GNU/Linux >> Tutoriales Linux >  >> Linux

No está de acuerdo con la versión del símbolo symbol_name después de insmod

Debe compilar su módulo de kernel con la misma versión de kernel que va a ejecutar. Por lo tanto, si tiene fuentes del kernel 4.3 que ha descargado, necesita compilar eso versión del kernel y arranque con eso ejecutándose antes de intentar cargar su kernel.

Tienes dos soluciones entonces:

  1. Descargue las fuentes del kernel para el kernel que está ejecutando actualmente (puede instalarlas con zypper install kernel-source en SLES o un comando equivalente en otras distribuciones).
  2. Compila e instala el kernel 4.3 en tu sistema operativo. Si necesita ayuda con esto, haga una pregunta por separado (y probablemente pertenezca al superusuario, no aquí). Tenga en cuenta que si kernel y glibc están estrechamente relacionados, es posible que no pueda ejecutar un kernel nuevo si tiene una biblioteca C muy antigua.

make -C /lib/modules/$(uname -r)/build M=$PWD módulos,"$(uname -r)" muestra que está compilando contra la versión del kernel que está ejecutando ahora, por lo que debería poder insmod el módulo en el núcleo actual si no ha cambiado los encabezados.

De su texto, "Solo para verificar, he copiado algunos archivos de los directorios del kernel en mi directorio de proyectos. Hice cambios e inserté algunos códigos más".

Si ha realizado modificaciones en el código fuente del kernel, es posible que deba volver a compilar el nuevo kernel y arrancar con el nuevo kernel actualizado. Entonces debería poder compilar su módulo kernel con los encabezados modificados.


El problema aquí es que su módulo Kernel está utilizando los símbolos exportados de otros módulos kernel que, en este caso, parecen ser los métodos o símbolos exportados de la pila Linux InfiniBand RDMA.

Para resolver los problemas de versión del símbolo, copie el Module.symvers archivo de

/usr/src/ofa-kernel

y péguelo en su directorio de trabajo actual. Luego vuelves a hacer tus módulos. Ahora el insmod debería funcionar perfectamente bien.

NOTA:El archivo Module.symvers contiene información de todos los símbolos exportados del kernelmodule. Entonces, al copiarlo en su directorio de trabajo, está ayudando a kbuild a saber más sobre los símbolos exportados usados.

Y si no encuentra Module.symvers o está vacío, cree uno usando create_Module.symvers.sh


Linux
  1. Cómo verificar la versión del Kernel en Linux

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

  3. Comprensión de la versión efectiva del kernel de Ksplice

  4. ¿Cómo uso ioctl() para manipular mi módulo kernel?

  5. ¿Cómo encontrar la versión de un módulo kernel compilado?

Cómo cargar o descargar un módulo del kernel de Linux

Versión del núcleo de Ubuntu 22.04

Cómo verificar la versión del kernel en Linux

Comando Modprobe en Linux

insmod:comando no encontrado

Linux Kernel.org engañoso sobre el pánico del kernel