Recientemente pasé por Desempaquetar kernel-source rpm fuera del sistema (OpenSuse)? ; y como tardó más de 10 h en mi máquina, imagina mi sorpresa de que después de hacer el proceso descrito allí, ¡no encuentro ningún Module.symverslugar!
Cuando busco "generate Module.symvers", obtengo esto:
NOTA: "modules_prepare" no generará Module.symvers incluso si
se configura CONFIG_MODVERSIONS; por lo tanto, se debe
ejecutar una compilación completa del kernel para que las versiones del módulo funcionen.
( Documentación del kernel de Linux :: kbuild: modules.txt )
... pero realmente no lo entiendo: ¿no se compiló el núcleo en el paso anterior (descrito en el enlace anterior? Estoy seguro de que CC tardó más de 10 h en generar un montón de * .o archivos y LD para vincularlos, por lo que se debe haber construido algo, pero si es así, ¿dónde está entonces Module.symvers?
En términos más explícitos, ¿exactamente qué comando debo llamar para generar Module.symvers? Sé que make prepareeso no funcionará, pero ¿cuál es el comando que sí funcionará?
fuente

Module.symversmediantezypper install kernel-source, y similar sobre otra distribución de Linux. El archivo se encuentra enlib/modules/xxx/build.Respuestas:
El
Module.symvers(re) se genera cuando (re) compila módulos. Ejecutemake modules, y debería obtener unModule.symversarchivo en la raíz del árbol del núcleo.Tenga en cuenta que si solo ejecutó
makey nomake modules, aún no ha creado ningún módulo. Los símbolos del núcleo mismo (vmlinuxo uno de los formatos de imagen dependientes de la arquitectura) están enSystem.map.fuente
make modulesefectivamente creaModule.symvers. Gracias también por aclarar la diferencia entremakeymake modules, y la relación conSystem.map. ¡Salud!insmod.para las personas que encontraron esta pregunta buscando en Google la advertencia que se obtiene al compilar uno de los LKM de muestra de Derek Molloy: simplemente puede hacer uno vacío con
touch Modules.symvers. Si su kernel no usa modversiones (CRC utilizados por el sistema operativo para ayudar a asegurar que los módulos coincidan con el kernel) y su módulo no tiene ninguna dependencia de otros módulos, esto será lo suficientemente bueno como para suprimir la advertencia.el archivo vacío es tan buena como la generada por gcc, que acaba de los símbolos de todos con el mismo
0x00000000valor de CRC, en un sistema sin MODVERSIONS.fuente
En CentOS, y tal vez otras variantes de RedHat, simplemente extraiga el archivo correspondiente para su núcleo en ejecución:
En Ubuntu y tal vez otras variantes de Debian, el archivo parece ser encontrado automáticamente. Sin embargo, si lo necesita, el archivo está aquí:
fuente
linux-headers-$(uname -r)carpeta