Mapeie o caminho do dispositivo USB físico para o número do barramento / dispositivo retornado pelo lsusb

7

Eu preciso obter o título do dispositivo USB conectado. Eu posso fazer isso com lsusb .

O udev permite algumas substituições quando escrevo regras: digamos, podemos usar $kernel para obter o nome do dispositivo ou $devpath para obter o caminho para o dispositivo.

Mas o problema é que lsusb retorna uma string assim:

Bus 005 Device 032: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC

Mas o devpath do udev é:

/devices/pci0000:00/0000:00:1d.0/usb5/5-2 

O número do barramento é o mesmo ( 5 ), mas os números são diferentes: Device 032 parece ser algum número lógico (quando eu reconectar o dispositivo, esse número aumenta) e 2 parece ser o número do dispositivo físico .

O udev retorna o número físico e eu preciso obter um número lógico. Então, eu posso recuperar dados como este: lsusb -D /dev/bus/usb/005/032

Então, como posso obter o número de dispositivo lógico 032 por caminho físico como /devices/pci0000:00/0000:00:1d.0/usb5/5-2 ?

    
por Dmitry Frank 24.02.2014 / 09:25

1 resposta

4

Primeiramente, precisamos prefixar /sys no caminho retornado por udev , para que o caminho se torne algo como: /sys/devices/pci0000:00/0000:00:1d.0/usb5/5-2 . Então vá para este diretório, e haverá vários arquivos nele. Entre outros, há busnum e devnum arquivos, eles contêm esses números "lógicos". Então, no script bash, podemos recuperá-los assim:

devpath='/devices/pci0000:00/0000:00:1d.0/usb5/5-2'

busnum='cat "/sys/$devpath/busnum"'
devnum='cat "/sys/$devpath/devnum"'

# we might want to make busnum and devnum have leading zeros
# (say, "003" instead of "3", and "012" instead of "12")
busnum='printf %03d $busnum'
devnum='printf %03d $devnum'

# now, we can retrieve device data by   lsusb -D /dev/bus/usb/$busnum/$devnum

echo "busnum=$busnum, devnum=$devnum"

Observe também que udev pode retornar esses busnum e devnum diretamente: em RUN+="..." podemos usar as substituições $attr{busnum} e $attr{devnum} respectivamente.

    
por 25.02.2014 / 07:32