GNU/Linux >> Tutoriels Linux >  >> Linux

Comment obtenir le type de lecteur de carte interne ?

J'ai une machine Linux qui exécute Busybox. Il y a deux lecteurs de cartes intégrés. Comment puis-je obtenir le type de lecteurs de cartes ?

J'ai essayé lshw , hwinfo et lspci mais ces commandes ne sont pas implémentées sur Busybox.

Bonjour Stéphane Chazelas,

Merci beaucoup pour votre réponse détaillée. Je l'ai essayé. Cependant grep ne trouve rien.

# 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

Réponse acceptée :

Les lecteurs de cartes sont souvent des périphériques USB. Si oui, vous pourriez faire quelque chose comme :

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}'

Pour obtenir les ID et les noms des fournisseurs/produits (tels que rapportés par le noyau). C'est-à-dire rechercher des périphériques USB dont la configuration est réglé sur LECTEUR DE CARTE et extraire le contenu du vendorID , productID , manufacturer et product fichiers situés dans le répertoire parent de celui contenant la configuration fichier.

Pour les périphériques PCI, cela attraperait au moins les périphériques utilisant les pilotes ci-dessous. busybox find ne prend pas en charge GNU find 's -lname prédicat, nous aurions donc besoin de quelque chose comme :

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)
    }'

Il n'y a pas de configuration fichier que nous pouvons utiliser cette fois pour déterminer la classe de périphérique (en fait, il existe une class fichier pour la classe de périphérique PCI, mais je peux voir qu'il s'agit de 0xff00 (Misc) pour un périphérique Realtek ici, il n'y a pas de classe de périphérique PCI dédiée aux «lecteurs de cartes», nous ne pouvons donc pas nous y fier). Donc, à la place, nous recherchons des drivers des liens symboliques qui pointent vers l'un des pilotes connus pour être des pilotes de lecteurs de cartes PCI, et obtiennent les ID de fournisseur/produit dans les chemins relatifs à cela.

En relation :Chargement des bibliothèques partagées et utilisation de la RAM ?

Une approche plus simple consiste à utiliser /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. Comment obtenir la taille de tar.gz dans le fichier (Mo) en python

  2. Comment puis-je obtenir le nom d'utilisateur dans un Makefile ?

  3. Comment changer le mot de passe root mysql

  4. Comment obtenir le PYTHONPATH en shell?

  5. Comment obtenir l'ID de processus pour tuer un processus nohup ?

Comment obtenir la taille d'un répertoire sous Linux

Comment tirer le meilleur parti de Qmmp 1.0

Comment changer le mot de passe root sous Linux

CentOS / RHEL 5,6 :Comment changer le fuseau horaire

Comment un noyau monte-t-il la partition racine ?

Comment puis-je obtenir mon adresse IP à partir de la ligne de commande ?