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:
- 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). - 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