Você pode usar udevadm
para obter o caminho do dispositivo de algum dispositivo. Isso é feito examinando os links simbólicos em /sys/
, então você também pode fazer isso manualmente (mas é mais fácil usar udevadm
).
Por exemplo, um pen drive USB conectado a um hub USB externo no meu sistema produz
$ udevadm info -q path -n /dev/sdh
/devices/pci0000:00/0000:00:1d.0/usb3/3-1/3-1.1/3-1.1.3/3-1.1.3.2/3-1.1.3.2:1.0/host7/target7:0:0/7:0:0:0/block/sdh
Como se pode ver comparando com a árvore USB,
$ lsusb -t
/: Bus 04.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/2p, 5000M
/: Bus 03.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/2p, 480M
|__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/8p, 480M
|__ Port 1: Dev 26, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 3: Dev 29, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 2: Dev 31, If 0, Class=Mass Storage, Driver=usb-storage, 480M
|__ Port 4: Dev 30, If 0, Class=Mass Storage, Driver=usb-storage, 480M
...
a parte 3-1.1.3.2
do caminho diz que no barramento 3, ele passa pela porta 1 (na ponte sul), novamente pela porta 1 (na placa-mãe), porta 3 (ainda na placa-mãe) e depois na porta 2 do hub USB externo. A porta 4 deste hub é usada para um leitor de cartão SD.
Então, dependendo de como seu hub USB está conectado, você precisa fazer algo semelhante e extrair a última porta em que está interessado.