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.
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