Recientemente instalé un Linux integrado suministrado por un proveedor en un dispositivo de hardware. Cuando ejecuté lsmod
la 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:
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
/lib
directorio 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:
*
indica un controlador incorporado, mientras queM
indica un módulo.fuente
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.
fuente
Esto depende de cómo haya configurado su compilación del kernel de Linux.
Dentro de un proceso de compilación, generalmente puede:
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
lsmod
es 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
observe el uso de
less
, puede usar cada buscapersonas que desee o redirigir la salida a donde desee.fuente
.config
archivo y modifíquelo según lo necesite.Vea el contenido del archivo / lib / modules / $ (uname -r) /modules.builtin
por ejemplo, para buscar un módulo específico
Documentation / kbuild / kbuild.txt
fuente
parece contener todos los módulos integrados y externos.
Pero también parece contener algunas entradas que en realidad no son módulos: /unix/225706/are-modules-listed-under-sys-module-all-the-loaded-modules
TODO: lee la fuente y comprende con mayor precisión lo que se pone allí.
La ventaja de este método es que no confía en poder encontrar la configuración del kernel en
/boot
o/proc/config.gz
.fuente