¿Qué controladores de dispositivo están integrados en el kernel?


14

Recientemente instalé un Linux integrado suministrado por un proveedor en un dispositivo de hardware. Cuando ejecuté lsmodla línea de comando del dispositivo, la respuesta estaba vacía. Me hicieron creer que esto significa que los controladores para el hardware que se ejecuta en el dispositivo se habían integrado en el núcleo en lugar de como archivos .ko. Mi pregunta es esta: ¿cómo sucede este proceso?

¿El soporte para hardware popular se integra gradualmente en el kernel en las versiones posteriores, reemplazando así los archivos .ko? ¿El archivo .ko se usa simplemente para admitir hardware nuevo que no tiene compatibilidad con controladores integrados en el núcleo en el momento del lanzamiento? En mi conocimiento limitado, pensé que todos los controladores de hardware tenían la forma de archivos .ko, pero claramente esto está mal.

Estoy un poco confundido por todo el proceso y agradecería que me aclararan, ya que tengo la sensación de que estoy mirando la situación de la manera incorrecta.


Respuestas:


10

Los controladores principales que se consideran críticos para la carga del kernel generalmente se integran en el kernel, mientras que otros controladores de hardware, etc., se crean como módulos o archivos .ko .

Los módulos .ko generalmente se almacenan en el /libdirectorio de su partición raíz. Para usar cualquiera de estos, el núcleo primero debe poder detectar y acceder al dispositivo de almacenamiento subyacente y luego acceder a su sistema de archivos. Por lo tanto, es seguro asumir que un kernel sin SATA / SCSI y ext2 / 3/4 soportados realmente no arrancará;)

Puede optar por cambiar la mayoría de los controladores de kernel integrados en forma de módulo. El equipo del kernel de Ubuntu decide si modifica la configuración predeterminada del equipo del kernel de Linux e incluye / excluye controladores incorporados adicionales para las imágenes del kernel que descargue.

Si construye su propio núcleo, puede hacer lo mismo:

ingrese la descripción de la imagen aquí

  • En la captura de pantalla anterior, *indica un controlador incorporado, mientras que Mindica un módulo.
  • El soporte de dispositivo de bucle invertido, que a menudo es esencial para arrancar un sistema, está integrado de forma predeterminada.
  • El controlador USB de baja velocidad (USB 1.0) también está incorporado de manera predeterminada para permitirle arrancar una memoria USB, pero aquí lo he cambiado a un módulo.

Gracias, eso me ayuda mucho. Creo que tendré una mejor comprensión de esto cuando eventualmente haga una construcción del núcleo desde cero para mí.
matemático1975

3

Al compilar un kernel , puede configurar qué componentes están instalados. No solo eso, sino que puedes elegir si están integrados o no en el núcleo o si son un módulo .

Por ejemplo, muchas personas usan el sistema de archivos ext2 en su partición / boot . Debido a esto, el núcleo debe poder leer los sistemas de archivos ext2 en el momento del arranque. Para lograr esto, el módulo ext2 está integrado en el núcleo mismo.

Ahora, imagine la cantidad de módulos disponibles. No tendría sentido tenerlos todos integrados en su núcleo, ¿verdad? Es por eso que puede construirlos como módulos .ko separados y cargarlos a voluntad.


1
Sí, su último párrafo es lo que motivó mi pregunta para ser honesto. Gracias por la respuesta
matemático1975

1

Esto depende de cómo haya configurado su compilación del kernel de Linux.

Dentro de un proceso de compilación, generalmente puede:

  • compilar el núcleo con o sin soporte de módulo (a menudo viene con soporte de módulo)
  • compilar un controlador como módulo o como una pieza de software incorporada directamente en el kernel

para comprender qué es un archivo .ko para /programming/10476990/difference-between-o-and-ko-file

La razón por la que tiene una salida vacía lsmodes porque tiene un núcleo monolítico.

Una forma rápida de enumerar todos sus módulos (si están presentes) es ejecutando este comando

find /lib/modules/*/ -type f -iname '*.ko' | less

observe el uso de less, puede usar cada buscapersonas que desee o redirigir la salida a donde desee.


Entonces, en un kernel configurado sin soporte de módulo (como parece ser el mío), ¿no podría instalar ningún controlador en forma de archivos .ko para usar hardware adicional?
matemático1975

Sí, básicamente tiene que volver a compilarlo desde la fuente. Si desea editar y / o agregar controladores, debe reconstruirlo, tal vez solo use el mismo .configarchivo y modifíquelo según lo necesite.
user827992

Entonces, para hacer esto, necesitaría obtener la fuente del kernel del proveedor, compilarlo yo mismo con las modificaciones correctas al archivo .config, ¿entonces seré bueno para instalar otros controladores?
matemático1975

depende, si usó un kernel de vainilla (sin nada más que el código fuente original), está bien con solo el .config y puede reproducir el mismo kernel solo con su PC, sin embargo, si usó un kernel de vainilla + algunos parches o modificaciones Si necesita esta información adicional, un Makefile personalizado también podría considerarse una variable relevante como cualquier otra modificación de la cadena de herramientas estándar y, en general, del proceso de compilación estándar.
user827992

Según mi experiencia, los módulos están deshabilitados para Linux incorporado, por razones de velocidad y tamaño, y que los núcleos para tales dispositivos a menudo contienen controladores fuera del árbol y están construidos en la PC de algún empleado al azar sin el beneficio del control de fuente. Buena suerte con eso.
Stephen M. Webb

0

Vea el contenido del archivo / lib / modules / $ (uname -r) /modules.builtin

por ejemplo, para buscar un módulo específico

grep <module> /lib/modules/$(uname -r)/modules.builtin

Documentation / kbuild / kbuild.txt

modules.builtin
--------------------------------------------------
This file lists all modules that are built into the kernel. This is used
by modprobe to not fail when trying to load something builtin.

??? No estoy seguro de lo que se supone que debe hacer el OP. ¿Se supone que debe ejecutar la primera línea en la terminal? Esta podría ser la respuesta, pero ¿podría explicar un poco más?
anonymous2

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.