Ho una scatola Linux che esegue Busybox. Ci sono due lettori di schede integrati. Come posso ottenere il tipo di lettori di schede?
Ho provato lshw
, hwinfo
e lspci
ma questi comandi non sono implementati su Busybox.
Ciao Stéphane Chazelas,
Grazie mille per la tua risposta dettagliata. L'ho provato. Tuttavia grep non trova nulla.
# 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
Risposta accettata:
I lettori di schede sono spesso dispositivi USB. In tal caso, potresti fare qualcosa del tipo:
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}'
Per ottenere ID e nomi fornitore/prodotto (come riportato dal kernel). Questo è cercare i dispositivi USB la cui configurazione è impostato su LETTORE SCHEDE ed estrarre il contenuto del vendorID
, productID
, manufacturer
e product
file che si trovano nella directory principale di quella contenente la configuration
file.
Per i dispositivi PCI, questo catturerebbe almeno i dispositivi che utilizzano i driver seguenti. occupatobox find
non supporta GNU find
's -lname
predicato, quindi avremmo bisogno di qualcosa come:
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)
}'
Non c'è configurazione file che possiamo usare questa volta per determinare la classe del dispositivo (in realtà, esiste una class
per la classe del dispositivo PCI, ma posso vedere che è 0xff00 (Varie) per un dispositivo Realtek qui, non esiste una classe di dispositivo PCI dedicata ai "lettori di schede", quindi non possiamo fare affidamento su di esso). Quindi cerchiamo invece drivers
collegamenti simbolici che puntano a uno qualsiasi dei driver noti per essere driver per lettori di schede PCI e ottengono gli ID fornitore/prodotto nei percorsi relativi a quello.
Un approccio più semplice consiste nell'usare /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