Ich habe eine Linux-Box, auf der Busybox läuft. Es sind zwei Kartenleser eingebaut. Wie erfahre ich den Typ der Kartenleser?
Ich habe es mit lshw
versucht , hwinfo
und lspci
aber diese Befehle sind nicht auf Busybox implementiert.
Hallo Stéphane Chazelas,
Vielen Dank für Ihre ausführliche Antwort. Ich versuchte es. grep findet jedoch nichts.
# 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
Akzeptierte Antwort:
Kartenleser sind oft USB-Geräte. Wenn ja, könnten Sie so etwas tun:
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}'
Um Anbieter-/Produkt-IDs und Namen zu erhalten (wie vom Kernel gemeldet). Das heißt nach USB-Geräten suchen, deren Konfiguration auf KARTENLESER eingestellt ist und extrahieren Sie den Inhalt der vendorID
, productID
, manufacturer
und product
Dateien, die sich im übergeordneten Verzeichnis desjenigen befinden, das die configuration
enthält Datei.
Bei PCI-Geräten würde dies zumindest die Geräte erfassen, die die folgenden Treiber verwenden. busybox find
unterstützt GNU find
nicht 's -lname
Prädikat, also bräuchten wir etwas wie:
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)
}'
Es gibt keine Konfiguration Datei, die wir dieses Mal verwenden können, um die Geräteklasse zu bestimmen (tatsächlich gibt es eine class
Datei für die PCI-Geräteklasse, aber ich kann sehen, dass es hier 0xff00 (Misc) für ein Realtek-Gerät ist, es gibt keine PCI-Geräteklasse, die „Kartenlesern“ gewidmet ist, also können wir uns nicht darauf verlassen). Stattdessen suchen wir nach drivers
symbolische Links, die auf einen der Treiber verweisen, von denen bekannt ist, dass sie Treiber für PCI-Kartenleser sind, und die Hersteller-/Produkt-IDs in relativen Pfaden abrufen.
Ein einfacherer Ansatz ist die Verwendung von /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