GNU/Linux >> Znalost Linux >  >> Linux

Jak získat typ interní čtečky karet?

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.

Související:Načítání sdílených knihoven a využití paměti RAM?

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

Linux
  1. Jak fungují vnitřnosti sudo?

  2. Jak získat klíč USB k automatickému připojení?

  3. Jak získat velikost tar.gz v (MB) souboru v pythonu

  1. Jak získám uživatelské jméno v souboru Makefile?

  2. Jak změnit heslo root mysql

  3. Jak získat stav ukončení smyčky v bash

  1. Jak získat PYTHONPATH v shellu?

  2. Jak získat ID procesu pro ukončení procesu nohup?

  3. Jak získám absolutní adresář souboru v bash?