GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie erhalte ich den Typ des internen Kartenlesers?

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.

Verwandte:Laden von gemeinsam genutzten Bibliotheken und RAM-Nutzung?

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

Linux
  1. Wie führe ich einen Befehl als Systemadministrator (root) aus?

  2. Wie bekomme ich sicher die Version von Ksh?

  3. So erhalten Sie den Exit-Status in einer Bash-Schleife

  4. So erhalte ich die Anzeigenummer, die mir von X zugewiesen wurde

  5. Wie erhalte ich die physische Größe einer Datei unter Linux?

So erhalten Sie die Größe eines Verzeichnisses in Linux

So holen Sie das Beste aus Qmmp 1.0 heraus

So ändern Sie das Root-Passwort unter Linux

CentOS / RHEL 5,6 :So ändern Sie die Zeitzone

Wie mountet ein Kernel die Root-Partition?

Wie erhalte ich meine IP-Adresse über die Befehlszeile?