GNU/Linux >> Linux Esercitazione >  >> Linux

Come ottenere il tipo di lettore di schede interno?

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.

Correlati:caricamento di librerie condivise e utilizzo della RAM?

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

Linux
  1. Come eseguire un comando come amministratore di sistema (root)?

  2. Come ottenere in sicurezza la versione di Ksh?

  3. Come ottenere la chiave USB per il montaggio automatico?

  4. Come ottenere la dimensione di tar.gz nel file (MB) in python

  5. Come ottengo il nome utente in un Makefile?

Come ottenere la dimensione di una directory in Linux

Come ottenere il massimo da Qmmp 1.0

Come funzionano gli interni di Sudo?

Come modificare la password di root in Linux

CentOS / RHEL 5,6:come modificare il fuso orario

Come ottengo il mio indirizzo IP dalla riga di comando?