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.symvers
lugar!
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 prepare
eso no funcionará, pero ¿cuál es el comando que sí funcionará?
fuente
Module.symvers
mediantezypper 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.symvers
archivo en la raíz del árbol del núcleo.Tenga en cuenta que si solo ejecutó
make
y nomake modules
, aún no ha creado ningún módulo. Los símbolos del núcleo mismo (vmlinux
o uno de los formatos de imagen dependientes de la arquitectura) están enSystem.map
.fuente
make modules
efectivamente creaModule.symvers
. Gracias también por aclarar la diferencia entremake
ymake 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
0x00000000
valor 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