GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo obtener el tipo de lector de tarjetas interno?

Tengo una caja de Linux que ejecuta Busybox. Hay dos lectores de tarjetas incorporados. ¿Cómo puedo obtener el tipo de lectores de tarjetas?

Probé lshw , hwinfo y lspci pero estos comandos no están implementados en Busybox.

Hola Stéphane Chazelas,

Muchas gracias por su detallada respuesta. Lo intenté. Sin embargo, grep no encuentra nada.

# 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

Respuesta aceptada:

Los lectores de tarjetas suelen ser dispositivos USB. Si es así, podrías hacer algo como:

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

Para obtener ID y nombres de proveedores/productos (según lo informado por el kernel). Eso es buscar dispositivos USB cuya configuración está configurado en LECTOR DE TARJETAS y extraiga el contenido del vendorID , productID , manufacturer y product archivos ubicados en el directorio principal del que contiene la configuration archivo.

Para dispositivos PCI, esto capturaría al menos los dispositivos que usan los controladores a continuación. caja ocupada find no es compatible con GNU find 's -lname predicado, por lo que necesitaríamos algo como:

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

No hay configuración archivo que podemos usar esta vez para determinar la clase de dispositivo (en realidad, hay una class archivo para la clase de dispositivo PCI, pero puedo ver que es 0xff00 (Misc) para un dispositivo Realtek aquí, no hay una clase de dispositivo PCI dedicada a "lectores de tarjetas", por lo que no podemos confiar en ella). Entonces, en su lugar, buscamos drivers enlaces simbólicos que apuntan a cualquiera de los controladores que se sabe que son controladores para lectores de tarjetas PCI y obtienen los ID de proveedor/producto en rutas relacionadas con eso.

Relacionado:¿Carga de bibliotecas compartidas y uso de RAM?

Un enfoque más simple es usar /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. Cómo obtener el tamaño de tar.gz en un archivo (MB) en python

  2. ¿Cómo obtengo el nombre de usuario en un Makefile?

  3. Cómo cambiar la contraseña de root mysql

  4. ¿Cómo obtener el PYTHONPATH en shell?

  5. ¿Cómo obtener la identificación del proceso para eliminar un proceso nohup?

Cómo obtener el tamaño de un directorio en Linux

Cómo aprovechar al máximo Qmmp 1.0

¿Cómo obtener de forma segura la versión de Ksh?

Cómo cambiar la contraseña de root en Linux

CentOS / RHEL 5,6:Cómo cambiar la zona horaria

¿Cómo obtener el tamaño físico de un archivo en Linux?