Ubuntu 22.04でUSBの問題をデバッグしようとしています。私はこのusb-devices
コマンドを見つけました。しかし、私はその結果を理解していません。マニュアルページを読んで、次のように言います。
このスクリプトの出力は、/proc/bus(usbfsがインストールされている場合)または/sys/kernel/debug(debugfsがインストールされている場合)の下のusb / devicesファイルに似ています。このスクリプトは、主にファイルが利用できない場合に使用されます。 usb / devicesファイルとは異なり、このスクリプトはアクティブなインターフェース(usb / devicesファイルに「*」とマークされているインターフェース)とそのエンドポイントのみをリストします。情報の並べ替え方法と出力形式に違いがある可能性があることに注意してください。
しかし、これらのファイルの出力を読み取る方法についての明確な指示も見つかりません。以下は、さまざまなコンピュータの出力例です。
T: Bus=01 Lev=01 Prnt=01 Port=03 Cnt=01 Dev#= 3 Spd=1.5 MxCh= 0
D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
P: Vendor=045e ProdID=082c Rev=01.00
S: Manufacturer=Microsoft
S: Product=Microsoft Ergonomic Keyboard
S: SerialNumber=601135501321
C: #Ifs= 2 Cfg#= 1 Atr=a0 MxPwr=100mA
I: If#= 0 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=01 Prot=01 Driver=usbhid
E: Ad=81(I) Atr=03(Int.) MxPS= 8 Ivl=10ms
I: If#= 1 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=00 Prot=00 Driver=usbhid
E: Ad=82(I) Atr=03(Int.) MxPS= 8 Ivl=10ms
これをどのように読みますか?略語とはどういう意味ですか?スクリプト自体を読むことができ、vim $(which usb-devices)
少し役に立ちます。たとえば、最初の行は次のように出力します。
T: Bus=01 Lev=01 Prnt=01 Port=03 Cnt=01 Dev#= 3 Spd=1.5 MxCh= 0
コードでは、次の行で参照されていることがわかります。
printf "\nT: Bus=%02i Lev=%02i Prnt=%02i Port=%02i Cnt=%02i Dev#=%3i Spd=%-3s MxCh=%2i\n" \
$busnum $level $parent $port $count $devnum $speed $maxchild
だから私はそれがどこから来たのかわかりますが、それでも「最初に」が何を意味するのか$busnum
わかりません。T
答え1
何度も掘り下げて答えを見つけましたここ。興味深い部分は以下に引用されています。
T:で始まる行はトポロジです。バスは、デバイスがどのバスにあるかを示します。 Levは、ルートハブの場合はレベル00から始まり、ルートハブに接続されているすべてのデバイスの場合はレベル01、レベル01ハブに接続されているすべてのデバイスの場合はレベル02などで、デバイスのレベルを表します。 Prntはこのデバイスの親デバイスです(ルートハブの場合は常に00、ルートハブに接続されているデバイスの場合は01)。ポートは親デバイスのポートであり、各デバイスの最初のポートは00で始まります。印刷/ポートはバス固有です。 Cntは、最初のデバイスに対して01から始まり、そのトポロジレベル内の列挙順に基づいてこのレベルのデバイス番号を表します。 Dev#は、レベルに関係なく、バス列挙順に基づいてデバイス番号を表します。すべてのバスはユニークです。 Spdは、デバイスの動作速度をMbpsで表します(現在のUSBバージョンでは1.5または12)。 MxChは、このデバイスに接続できるデバイスの数を表し、ハブを除くすべてのデバイスの場合は00です。ドライバは、このデバイスがどのデバイスドライバを使用しているかを示します。 (なし)エントリは、使用しているドライバがないことを示します。
D:で始まる行は、デバイス記述子の情報です。 Verは、デバイスが準拠していると主張するUSB仕様のバージョンを示します。 Clsは、デバイスが準拠していると主張するデバイスクラスを16進形式および文字列形式で表します。 Clsエントリ00(> ifc)は、デバイスクラス仕様の準拠がインターフェイスに関連付けられており、デバイスクラス情報を取得するためにインターフェイス記述子を読み取る必要があることを示します。 Subは、デバイスが準拠するサブクラスを表します(Clsエントリ内)。 Prot は、デバイスが満たしていると主張するクラスまたはサブクラス内のプロトコルを表します。 MxPS はエンドポイント 0 のパケットサイズを示します。 #Cfgsは、デバイスに含まれる構成の数を示します。
D:と同様に、P:で始まる行はデバイス記述子の情報であり、1行にすべて入ることができないため、主に分離されます。 Vendorはデバイスのベンダー識別コードを表し、ProdIDはデバイスの製品識別コードを表します。 Rev は製品リビジョン番号を示します。
S:(存在する場合)で始まる行は、デバイスから返されたベンダーと製品の文字列です。
C:で始まる行は構成記述子の情報です。各デバイスのC:行数は#Cfgsとして提供され、アスタリスクが続くものは現在の設定です。 #If はデバイスのインターフェイス数を示します。 Cfg#は説明されている構成を表します。 Atrはデバイス属性の16進数の表示です(0x80はバス電源を意味し、0x40は自己電源を意味し、0x20はリモートウェイク可能を意味します)。 MxPwrは、このデバイス構成の最大消費電力(ミリアンペア)です。構成記述子の詳細については、USB仕様セクション9.7.2を参照してください。
I:で始まる行はインターフェース記述子の情報です。各C:行のI:行数は#Ifsエントリによって提供されます。 If#は、特定のデバイス構成でどのインターフェイスが記述されているかを示します。 Alt このインターフェイスの代替設定が説明されていることを示します。 #EPs このエンドポイントの代替設定にあるエンドポイントの数を示します。 Clsは、インターフェイスの代替設定が対応するクラスを16進形式および文字列形式で表します。 Sub インターフェイスの代替設定が属するサブクラスを表します。 Prot インターフェイスの代替設定が準拠するインターフェイス プロトコル(クラスおよびサブクラスタプル内)を表します。ドライバは、どのUSBドライバがこのインターフェイスを要求したかを示します。詳細については、USB仕様セクション9.7.3を参照してください。
E: で始まる行は、エンドポイント記述子の情報です。各I:行のE:行数は#EPsエントリによって提供されます。エンドポイント 0 は表示されません。広告は、エンドポイントが In エンドポイントか Out エンドポイントかを示す文字を使用してエンドポイント アドレスを表します。 Atrはエンドポイントに関連付けられた属性(トランスポートタイプ)を表し、その後にトランスポートタイプを変換する文字列が続きます。 MxPSは、このエンドポイントが送受信できる最大パケットサイズを表します。 Ivlは、ポーリング割り込みエンドポイント間の時間間隔(ミリ秒)を表します。一括転送および制御転送の場合はIvlは無視され、等時性転送の場合はIvlは1に設定されます。エンドポイント記述子の詳細については、USB仕様セクション9.7.4を参照してください。