LinuxはUSBオーディオペリフェラルが接続されているかどうかをどのように検出しますか?
USB充電器を接続すると携帯電話が充電されますが、ステータスバーにヘッドフォンアイコンが表示されません(Android)。
ただし、USBオーディオヘッドセットを同じUSB Type-Cポートに接続すると、オーディオデバイスとして検出されます。
カーネルがこれらすべてをどのように処理するのか疑問に思います。
この問題を調査するための呼び出しフロー図または開始点はありますか?
答え1
USBは標準化された方法でホストに大量の情報を提供します。lsusb -v
接続されているデバイスに関する利用可能な情報を表示するために使用されます。この情報には、PCIデバイスと同様に、ベンダーとデバイス番号が含まれています。ストレージ、入力、オーディオなど、いくつかの定義されたデバイスカテゴリもあります。これにより、ドライバは特定のデバイスについて知らない場合でもデバイスクラスを処理できます。
あなたの場合、USBヘッドセットはオーディオデバイスとして認識され、USBオーディオドライバはヘッドセットを処理します。一方、充電器はそれを充電器として認識し、携帯電話がどれだけの電力を得ることができるかを伝えます。簡単な充電器ではこれを行うことはできません。安全のために、電話機はより低い電流のみを使用してロードするのに長い時間がかかります。