Linux Debian - 特定のポートに接続されているUSBを識別しますか?

Linux Debian - 特定のポートに接続されているUSBを識別しますか?

USB connectionGoogle Coral Boardの実行に問題がありますDebian。 USB-Cポートハードウェアが接続されていることを確認し、システムが確認できるかどうかを確認します。これを行う最良の方法は何ですか?どんな助けやアドバイスにも感謝します!

ベストアンサー1

私の答えはユニバーサルUSBです。ハードウェア不足のため、USB-Cを特別にテストしていません。それにもかかわらず、USB-CはUSB-1/2/3とは異なる可能性がありますが、実行する必要がある作業のおおよそのアイデアを提供する必要があります。

ご意見に基づき、デバイスが接続されたら、各ポートのLEDが点灯したいと思います。

まず、イベントベースのアプローチが必要です。Udevdこれにより、デバイスが追加および削除されたときに実行されるルールを作成できます(起動時に検出されたすべてのデバイスがイベントを実行するため、起動時にadd特別な処理を実行する必要はありません)。一見すると、およびをフィルタリングしSUBSYSTEM=usbたい場合がありますDEVTYPE=usb_device。適切な規則を設けた後、Udevdイベントの種類やデバイスパスなどのデバイスに関するいくつかの情報とともに、デバイスが追加または削除されたときに通知するハンドラスクリプトが起動されます/sys

その後、ハンドラスクリプトは含まれている情報を取得し、デバイスが/sysルートUSBハブの1つの既知のポートに接続されていることを確認する必要があります(参考文献を参照/sys/bus/usb/devices/usb[0-9])。一部のデバイスはハブから追加/削除される可能性があるため、すべてのデバイスの追加/削除がインジケータを切り替えるわけではありません。この場合、ハブ自体だけがインジケータをトリガします。したがって、各イベントについてファイルのシンボリックリンク先を確認してくださいport。ターゲット名にハブ名とポート番号が表示されます。

たとえば、私のシステムでは...各USBバージョン/速度に独自のバスがあるようですので、ルートハブを見ると次のようになります。

$ lsusb -t |grep ^/
/:  Bus 09.Port 1: Dev 1, Class=root_hub, Driver=ohci-pci/4p, 12M
/:  Bus 08.Port 1: Dev 1, Class=root_hub, Driver=ohci-pci/2p, 12M
/:  Bus 07.Port 1: Dev 1, Class=root_hub, Driver=ohci-pci/5p, 12M
/:  Bus 06.Port 1: Dev 1, Class=root_hub, Driver=ohci-pci/5p, 12M
/:  Bus 05.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/2p, 5000M
/:  Bus 04.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/2p, 480M
/:  Bus 03.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/4p, 480M
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/5p, 480M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/5p, 480M

バス1、2、3、6、7、9は同じ物理ポートを共有します(同じPCIデバイス番号を共有しますが、機能のみ異なります)。バス4と5と同じです(PCI機能も同じであるため、どちらも同じxhciドライバを使用する理由を説明しています)。バス8はUSB1専用です。オンボードUSB2ポートは4つしかないため、これらのデバイスの一部には内部USBヘッダーがあります。特殊なオンボードデバイスや同じチップ/ PCBに基づく他のマザーボードモデル用に予約されているヘッダーなど、一部にヘッダーがまったくない場合があります。

このコマンドは、すべてのインターフェイス()を除いて、デスクトップに接続されているすべてのデバイスを表示し、*:*その下にポートシンボリックリンクを印刷します。

$ for f in /sys/bus/usb/devices/+([^:])/*port*; do printf '%-32s: %s\n' $f $(readlink $f); done
/sys/bus/usb/devices/1-2.1/port : ../1-2:1.0/1-2-port1
/sys/bus/usb/devices/1-2.2/port : ../1-2:1.0/1-2-port2
/sys/bus/usb/devices/1-2.4/port : ../1-2:1.0/1-2-port4
/sys/bus/usb/devices/1-2/port   : ../1-0:1.0/usb1-port2
/sys/bus/usb/devices/4-1/port   : ../4-0:1.0/usb4-port1
/sys/bus/usb/devices/5-1.1/port : ../5-1:1.0/5-1-port1
/sys/bus/usb/devices/5-1.3/port : ../5-1:1.0/5-1-port3
/sys/bus/usb/devices/5-1/port   : ../5-0:1.0/usb5-port1
/sys/bus/usb/devices/7-1/port   : ../7-0:1.0/usb7-port1

以下のデバイスを見ています/sys/bus/usb/devices/。 udevはフルパスを提供します。これは実際のデバイスパスを取得する/sys/devices/ために使用できます。udevadm info

これを見て、基本的なデバイス情報を見ると、私のモニターハブに3つのデバイスusb1-port2(1-2のキーボード、マウス、ウェブカメラ)がバス4/5にあり、USB3ハブが接続されていることがわかります。usb4-port1(同じ物理ポートusb5-port1、EHCI / XHCI)とその下の2つのUSB3デバイス(5-1)と最後に低速シリアルデバイスusb7-port1

補助ハブがある場合以内にデバイスを識別し、そのポートを説明する方法を見つける必要があります。たとえば、RPi v3には4つの外部USBポートがありますが、デバイスを見ると、SoCのオンボードコントローラにはUSB2ポートが1つだけ、5つのポートハブがあり、最初のポートはオンボードUSBイーサネットコントローラに接続され、残りの4つのUSBポートは使用できます。

最後に、複数のルートハブがある場合は、ベンダー/モデルIDを使用して各関連ハブを確実に識別する方法が必要です(数値のみを使用して、デコードされた名前は通常ローカルデータベースから取得および変更できます)あり)。同じハブが複数ある場合はデフォルトバスID(またはPCI / PCIeデバイスの場合はPCI ID)。 PCI IDは、基本ハードウェア(マザーボードモデルまたはリビジョン)に応じて変更できますが、ルートデバイスが常に同じスロット番号を使用している場合は、少なくともデバイスIDの順序を信頼できます。次に、仕様に従って、またはポートテストによって各ハブのポート番号を実際のポート位置と一致させます。外部ハブのベンダー/モデルIDが同じでも深さを確認できます。


構成Udevd、マンページを参照してくださいman 7 udev。このudevadmツールは、特にルールの設定にも役立ちます。情報そして監視装置注文する。

lsusb利用してusbview読んでくださいシステムファイルシステム接続されているデバイスに関する情報を表示する属性です。

USB関連情報は次の場所にあります。システムファイルシステムに記録Linux-USBホストAPILinuxカーネル文書の一部として、多くの属性がUSB仕様に直接関連しています。

あなたは見つけることができますUSBクラスコード~からhttps://www.usb.org、これはデバイスの種類を識別するのに役立ちます。 USB構成階層のより一般的な説明については、以下を参照してください。USBの簡単な紹介です。 5: USB記述子

おすすめ記事