En Linux, dado:
- un dispositivo, por ejemplo
/dev/sda
, - y sus números mayores y menores, por ejemplo
8, 0
,
¿Cómo puedo saber qué módulo / controlador lo está "manejando"?
¿Puedo profundizar /sys
o /proc
descubrir eso?
linux
drivers
kernel-modules
Totor
fuente
fuente
lsmod
,/proc/modules
ymodinfo
?Respuestas:
Para obtener esta información de
sysfs
un archivo de dispositivo, primero determine el número mayor / menor mirando la salida dels -l
, p. Ej.El
8, 0
nos dice que el número mayor es8
y el menor es0
. Alb
principio de la lista también nos dice que es un dispositivo de bloque. Otros dispositivos pueden tener unc
dispositivo para caracteres al comienzo.Si luego mira debajo
/sys/dev
, verá que hay dos directorios. Uno llamóblock
y otro llamóchar
. La obviedad aquí es que estos son para dispositivos de bloque y de caracteres, respectivamente. Cada dispositivo es accesible por su número mayor / menor es este directorio. Si hay un controlador disponible para el dispositivo, puede encontrarlo leyendo el objetivo deldriver
enlace en este o en eldevice
subdirectorio. Por ejemplo, para mi/dev/sda
simplemente puedo hacer:Esto muestra que el
sd
controlador se utiliza para el dispositivo. Si no está seguro de si el dispositivo es un dispositivo de bloque o de caracteres, en el shell simplemente puede reemplazar esta parte con a*
. Esto funciona igual de bien:También se puede acceder a los dispositivos de bloque directamente a través de su nombre a través de
/sys/block
o/sys/class/block
. P.ej:Tenga en cuenta que la existencia de varios directorios
/sys
puede cambiar según la configuración del kernel. Además, no todos los dispositivos tienen unadevice
subcarpeta. Por ejemplo, este es el caso de los archivos de dispositivos de partición como/dev/sda1
. Aquí debe acceder al dispositivo para todo el disco (desafortunadamente no haysys
enlaces para esto).Una última cosa que puede ser útil es enumerar los controladores para todos los dispositivos para los que están disponibles. Para esto, puede usar globos para seleccionar todos los directorios en los que están presentes los enlaces del controlador. P.ej:
Finalmente, para divergir un poco de la pregunta,
/sys
agregaré otro truco global para obtener una perspectiva mucho más amplia sobre qué controladores están siendo utilizados por qué dispositivos (aunque no necesariamente aquellos con un archivo de dispositivo):Actualizar
Mirando más de cerca el resultado de
udevadm
, parece funcionar al encontrar el/sys
directorio canónico (como lo haría si desreferenciara los directorios principales / secundarios anteriores), luego avanza hacia arriba en el árbol de directorios, imprimiendo cualquier información que encuentre. De esta forma, obtiene información sobre los dispositivos principales y los controladores que utilizan también.Para experimentar con esto, escribí el script a continuación para recorrer el árbol de directorios y mostrar información en cada nivel relevante.
udev
parece buscar archivos legibles en cada nivel, con sus nombres y contenidos incorporadosATTRS
. En lugar de hacer esto, muestro el contenido de losuevent
archivos en cada nivel (aparentemente la presencia de esto define un nivel distinto en lugar de solo un subdirectorio). También muestro el nombre base de cualquier enlace de subsistema que encuentre y esto muestra cómo encaja el dispositivo en esta jerarquía.udevadm
no muestra la misma información, por lo que esta es una buena herramienta complementaria. La información del dispositivo principal (por ejemplo,PCI
información) también es útil si desea hacer coincidir la salida de otras herramientas, comolshw
dispositivos de nivel superior.fuente
udevadm
respuesta te darásd
yahci
. ¿Hay alguna manera de determinar si tambiénahci
se está utilizando?device/device/
, por lo que mireadlink
comando se parecíareadlink /sys/dev/char/XX\:Y/device/device/driver
.Puedes usar la
udevadm
herramienta para descubrir esto.El comando sería
udevadm info -a -n /dev/sda
, y luego mira losDRIVER==
parámetros.Esto muestra que en realidad hay 2 controladores involucrados en la provisión de este dispositivo,
sd
yahci
. El primero,sd
es directamente responsable del/dev/sda
dispositivo, pero utiliza elahci
controlador subyacente.El resultado del
udevadm
comando tiene este aspecto e incluye una descripción de cómo funciona.fuente
udevadm
se elimina (o incluso se recomienda)? No puedo encontrar nada ni siquiera dando una pista sobre eso.Utilice el comando hwinfo y el modelo de salida y el controlador. Si no hay controlador, no se mostrará. Por ejemplo para discos:
Para tarjetas de red:
Para dispositivos USB:
Use hwinfo --help para averiguar qué otros tipos de dispositivos puede consultar. hwinfo se instala de manera predeterminada, por ejemplo, en SUSE Linux.
fuente
--only
opción. Por ejhwinfo --block --only /dev/sda | grep ...
.lshw
es una herramienta increíble para enumerar el hardware que se encuentra en su máquina. Deberá instalarlo primero antes de ejecutarlo.Use
yum
oapt-get
dependiendo del sistema que esté usando. Luego, para enumerar específicamente el hardware de almacenamiento:Es posible que desee ejecutarlo
root
para recuperar toda la información.De lo contrario,
lspci
también puede dar información sobre su hardware:Para averiguar el número mayor y menor de un dispositivo, simplemente ejecútelo
ls
.En este producto, el
b
enbrw-rw----.
significa que este es un dispositivo de bloque. Los dígitos8
y0
son, respectivamente, el número mayor y menor del dispositivo.fuente
lshw
ylspci
puede ver el módulo utilizado por un dispositivo: configuración: driver = ahci latencia = 0 y controlador Kernel en uso: ahci .