Intéressé par des cours d'informatique en ligne ?
Visitez mon nouveau site https://www.yesik.it !

Sur un système Linux, le dossier /proc/bus/usb permet d'obtenir des informations sur les périphériques USB connectés à la machine. Ces informations sont maintenues par un système de fichier spécial appelé usbfs.

Or, « sur de nombreux systèmes modernes, le système de fichiers usbfs n'est pas du tout utilisé » [1]. À tel point que les distributions récentes ne le montent plus. Il se peut donc que vous ayez un jour la surprise de constater sur une machine qu'il est vide:

sh$ ls -ls /proc/bus/usb/
total 0

Si c'est le cas, vous allez devoir le monter manuellement:

sh$ sudo mount -t usbfs none /proc/bus/usb
sh$ ls /proc/bus/usb/
001  002  devices # Succès!

Une fois monté, dans /proc/bus/usb/devices les informations relatives aux differents périphériques connectés à votre système:

sh$ head /proc/bus/usb/devices

T:  Bus=02 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#=  1 Spd=480  MxCh= 3
B:  Alloc=  0/800 us ( 0%), #Int=  3, #Iso=  0
D:  Ver= 2.00 Cls=09(hub  ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
P:  Vendor=1d6b ProdID=0002 Rev= 2.06
S:  Manufacturer=Linux 2.6.32-5-amd64 ehci_hcd
S:  Product=EHCI Host Controller
S:  SerialNumber=0000:00:1d.0
C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=  0mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub

Remarque:

Il est aussi possible d'obtenir ces informations à partir de debugfs – le système de fichiers virtuel dédié au débogage du système. Mais ici encore, il y a fort peut de chance que ce système de fichiers soit monté par défaut sur votre machine:

sh$ mount -t debugfs /sys/kernel/debug
sh$  head /sys/kernel/debug/usb/devices

T:  Bus=02 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#=  1 Spd=480  MxCh= 3
B:  Alloc=  0/800 us ( 0%), #Int=  3, #Iso=  0
D:  Ver= 2.00 Cls=09(hub  ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
P:  Vendor=1d6b ProdID=0002 Rev= 2.06
S:  Manufacturer=Linux 2.6.32-5-amd64 ehci_hcd
S:  Product=EHCI Host Controller
S:  SerialNumber=0000:00:1d.0
C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=  0mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub

Ressources