J'ai une machine Linux qui exécute Busybox. Il y a deux lecteurs de cartes intégrés. Comment puis-je obtenir le type de lecteurs de cartes ?
J'ai essayé lshw
, hwinfo
et lspci
mais ces commandes ne sont pas implémentées sur Busybox.
Bonjour Stéphane Chazelas,
Merci beaucoup pour votre réponse détaillée. Je l'ai essayé. Cependant grep ne trouve rien.
# l `find /sys/devices -path '*/usb*/configuration'`
-r--r--r-- 1 root root 4096 Oct 2 19:14 /sys/devices/rdb.3/f0470300.ehci_v2/usb3/configuration
-r--r--r-- 1 root root 4096 Oct 2 19:14 /sys/devices/rdb.3/f0470400.ohci_v2/usb7/configuration
-r--r--r-- 1 root root 4096 Oct 2 19:14 /sys/devices/rdb.3/f0470500.ehci_v2/usb4/configuration
-r--r--r-- 1 root root 4096 Oct 2 19:14 /sys/devices/rdb.3/f0470600.ohci_v2/usb8/configuration
-r--r--r-- 1 root root 4096 Oct 2 19:14 /sys/devices/rdb.3/f0471000.xhci_v2/usb1/configuration
-r--r--r-- 1 root root 4096 Oct 2 19:14 /sys/devices/rdb.3/f0471000.xhci_v2/usb2/configuration
-r--r--r-- 1 root root 4096 Oct 2 19:14 /sys/devices/rdb.3/f0480300.ehci_v2/usb5/5-1/5-1.1/configuration
-r--r--r-- 1 root root 4096 Oct 2 19:14 /sys/devices/rdb.3/f0480300.ehci_v2/usb5/5-1/5-1.2/configuration
-r--r--r-- 1 root root 4096 Oct 2 19:14 /sys/devices/rdb.3/f0480300.ehci_v2/usb5/5-1/configuration
-r--r--r-- 1 root root 4096 Oct 2 19:14 /sys/devices/rdb.3/f0480300.ehci_v2/usb5/configuration
-r--r--r-- 1 root root 4096 Oct 2 19:14 /sys/devices/rdb.3/f0480400.ohci_v2/usb9/configuration
-r--r--r-- 1 root root 4096 Oct 2 19:14 /sys/devices/rdb.3/f0480500.ehci_v2/usb6/configuration
-r--r--r-- 1 root root 4096 Oct 2 19:14 /sys/devices/rdb.3/f0480600.ohci_v2/usb10/configuration
# l `find /sys/devices -path '*/pci*/driver'`
dr-xr-xr-x 2 root root 0 Oct 2 19:20 .
dr-xr-xr-x 4 root root 0 Oct 2 19:20 ..
-r--r--r-- 1 root root 0 Oct 2 19:31 devices
# l /proc/bus/pci/devices
-r--r--r-- 1 root root 0 Oct 2 19:31 /proc/bus/pci/devices
Réponse acceptée :
Les lecteurs de cartes sont souvent des périphériques USB. Si oui, vous pourriez faire quelque chose comme :
find /sys/devices -path '*/usb*/configuration' -exec \
grep -lx 'CARD READER' {} + | awk -F/ -vOFS=/ '{
NF--
getline idv < ($0 "/idVendor")
getline idp < ($0 "/idProduct")
getline v < ($0 "/manufacturer")
getline p < ($0 "/product")
print idv":"idp" "v" "p}'
Pour obtenir les ID et les noms des fournisseurs/produits (tels que rapportés par le noyau). C'est-à-dire rechercher des périphériques USB dont la configuration est réglé sur LECTEUR DE CARTE et extraire le contenu du vendorID
, productID
, manufacturer
et product
fichiers situés dans le répertoire parent de celui contenant la configuration
fichier.
Pour les périphériques PCI, cela attraperait au moins les périphériques utilisant les pilotes ci-dessous. busybox find
ne prend pas en charge GNU find
's -lname
prédicat, nous aurions donc besoin de quelque chose comme :
find /sys/devices -path '*/pci*/driver' -type l -exec readlink {} \; -print |
awk -F/ -v OFS=/ '
BEGIN{d["cb710"]d["r592"]d["r852"]d["rts5208"]d["rtsx_pci"]}
$NF in d {
getline
NF--
getline v < ($0 "/vendor")
getline p < ($0 "/device")
print substr(v, 3) ":" substr(p, 3)
}'
Il n'y a pas de configuration fichier que nous pouvons utiliser cette fois pour déterminer la classe de périphérique (en fait, il existe une class
fichier pour la classe de périphérique PCI, mais je peux voir qu'il s'agit de 0xff00 (Misc) pour un périphérique Realtek ici, il n'y a pas de classe de périphérique PCI dédiée aux «lecteurs de cartes», nous ne pouvons donc pas nous y fier). Donc, à la place, nous recherchons des drivers
des liens symboliques qui pointent vers l'un des pilotes connus pour être des pilotes de lecteurs de cartes PCI, et obtiennent les ID de fournisseur/produit dans les chemins relatifs à cela.
Une approche plus simple consiste à utiliser /proc/bus/pci/devices
:
awk '
BEGIN{d["cb710"]d["r592"]d["r852"]d["rts5208"]d["rtsx_pci"]}
$NF in d {print substr($2, 1, 4) ":" substr($2, 5)}
' < /proc/bus/pci/devices