¿Puedo detectar si mi kernel personalizado fue creado con soporte de módulo?

¿Puedo detectar si mi kernel personalizado fue creado con soporte de módulo?

Me han proporcionado una instalación mínima de Linux proporcionada por el proveedor. De una respuesta a una pregunta anterior descubrí que es posible construir un kernel con o sin soporte de módulo. Tengo un dispositivo CANBUS que necesito conectar y que viene con controladores en forma de archivos .ko. Me gustaría poder instalarlos con los scripts de instalación proporcionados, pero primero necesito saber si mi kernel fue creado con soporte de módulo. ¿Es posible detectar esto desde la línea de comando?

Cuando lo ejecuto, lsmodno devuelve nada, así que sé que no hay archivos .ko allí en este momento, pero ¿significa esto que el kernel no me permitirá instalar un archivo .ko?

Respuesta1

Si tiene un /procsistema de archivos, el archivo /proc/modulesexiste si y solo si el kernel está compilado con soporte de módulo. Si el archivo existe pero está vacío, su kernel admite módulos pero no hay ninguno cargado en este momento. Si el archivo no existe, su kernel no puede cargar ningún módulo.

Es técnicamente posible tener soporte para módulos cargables sin /proc. Puede verificar la presencia de llamadas al sistema init_moduley delete_moduleen el binario del kernel. Puede que esto no sea fácil si sólo tiene un binario comprimido (por ejemplo, vmlinuzo uImage). Ver¿Cómo descomprimo vmlinuz a vmlinux?para vmlinuz. Una vez que haya logrado descomprimir la mayor parte del kernel, busque la cadena sys_init_module.

Tenga en cuenta que si los módulos son compatibles, necesitará archivos adicionales para compilar sus propios módulos de todos modos:encabezados del kernel. Estos son archivos de encabezado C ( *.h), algunos de los cuales se generan cuando se compila el kernel (por lo que no puede tomarlos simplemente del código fuente del kernel). Ver¿Qué contiene un árbol de fuentes del kernel? ¿Está esto relacionado con los encabezados del kernel de Linux?

Respuesta2

La mayoría de las distribuciones almacenan un archivo de texto con la configuración del kernel en algún lugar. En un sistema Debian lo encontrará en /boot/config-<kernel_version>.

Entonces simplemente puedes ejecutar grepen ese archivo:

grep CONFIG_MODULES /boot/config-<kernel_version>

información relacionada