Mám linuxový box, na kterém běží Busybox. Jsou zde zabudovány dvě čtečky karet. Jak zjistím typ čteček karet?
Zkoušel jsem lshw
, hwinfo
a lspci
ale tyto příkazy nejsou implementovány na Busybox.
Dobrý den, Stéphane Chazelas,
Děkuji mnohokrát za podrobnou odpověď. Zkusil jsem to. Grep však nic nenajde.
# 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
Přijatá odpověď:
Čtečky karet jsou často zařízení USB. Pokud ano, můžete udělat něco jako:
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}'
Chcete-li získat ID a názvy dodavatelů/produktů (jak jsou hlášeny jádrem). To je hledání zařízení USB, jejichž konfigurace je nastaveno na ČTEČKA KARET a extrahujte obsah vendorID
, productID
, manufacturer
a product
soubory umístěné v nadřazeném adresáři toho, který obsahuje configuration
soubor.
U zařízení PCI by to zachytilo alespoň zařízení používající níže uvedené ovladače. busybox find
nepodporuje GNU find
's -lname
predikát, takže bychom potřebovali něco jako:
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)
}'
Neexistuje žádná konfigurace soubor, který můžeme tentokrát použít k určení třídy zařízení (ve skutečnosti existuje class
soubor pro třídu zařízení PCI, ale vidím, že je to 0xff00 (Misc) pro zařízení Realtek, neexistuje žádná třída zařízení PCI vyhrazená pro „čtečky karet“, takže se na ni nemůžeme spolehnout). Místo toho hledáme drivers
symbolické odkazy, které ukazují na kterýkoli z ovladačů, o nichž je známo, že jsou ovladači pro čtečky karet PCI, a získávají ID dodavatele/produktu v příslušných cestách.
Jednodušší přístup je použít /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