GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo construir un módulo del kernel de Linux para que sea compatible con todas las versiones del kernel?

En resumen :usted difícilmente puede escribir un módulo kernel útil, que se puede cargar en kernels de una gama relativamente amplia de versiones.

Cuando construyes el módulo contra el kernel compilado con CONFIG_MODVERSIONS (como en su caso), para cada símbolo, exportado desde el kernel, el CRC para este símbolo se almacena en el archivo del módulo. CRC es una especie de suma de control , que tiene en cuenta, entre otras cosas, el diseño de tipos, utilizados para los parámetros de la función. Por ejemplo, si el diseño de un hipotético struct A difiere en dos núcleos, CRC para la función f(struct A *a) en estos núcleos también difiere.

Cuando se carga un módulo en el núcleo en ejecución, los CRC de todas las funciones del módulo se comparan con los del núcleo. Si difieren, el núcleo se niega a cargar el módulo. Para leer más sobre este mecanismo, consulte la documentación del núcleo (Documentación/kbuild/modules.txt).

Entonces, para hacer que un módulo se pueda cargar en dos núcleos diferentes, está restringido solo con funciones cuyos parámetros tienen el mismo diseño en ambos núcleos. En particular, si el diseño de tipo struct module difiere, no se puede cargar un solo módulo para ambos núcleos.

Hay varios enfoques para entregar un controlador adecuado para varios núcleos. La forma más sencilla es entregar las fuentes del conductor y añádelos a dkms . De esta manera, si el kernel en ejecución no tiene el controlador integrado, el controlador se compilará automáticamente usando sus fuentes.


Linux
  1. Cómo usar el comando Rmmod en Linux con ejemplos

  2. Linux:¿cómo determinar qué módulo contamina el kernel?

  3. Linux:¿cómo recargar correctamente un módulo del kernel?

  4. Cómo escribir su propio módulo kernel de Linux con un ejemplo simple

  5. ¿Cómo encontrar todos los archivos que terminan en .rb con Linux?

Cómo compilar el kernel de Linux desde cero {Guía paso a paso}

Cómo cargar y descargar módulos del kernel en Linux

Comando Modprobe en Linux

Mostrar información del módulo del kernel de Linux con el comando Modinfo

Cómo construir el kernel de Linux desde cero

Cómo compilar el kernel de Linux desde el origen para crear un kernel personalizado