
Estoy intentando recompilar el sound/usb
módulo en Ubuntu 18.10 con el kernel en ejecución. No obtengo errores de compilación, pero cuando intento cargar el módulo aparece este error:
Invalid module format
Estoy ejecutando el 4.18.0-21-lowlatency
kernel.
Obtengo la fuente del kernel de esta manera.
apt source linux
Esto descarga y extrae la fuente del 4.18.0
kernel en la linux-4.18.0
carpeta.
Copio los archivos .config
y desde la raíz del directorio fuente de mi kernel.Module.symvers
/lib/modules/4.18.0-21-lowlatency/build
Corro make EXTRAVERSION=-21-lowlatency modules_prepare
y luegomake EXTRAVERSION=-21-lowlatency M=sound/usb
La ejecución insmod
da como resultado el siguiente error escrito ensyslog
snd_usb_audio: version magic '4.18.20-21-lowlatency SMP preempt mod_unload ' should be '4.18.0-21-lowlatency SMP preempt mod_unload '
Al ejecutar modinfo /lib/modules/
uname -r /kernel/sound/usb/snd-usb-audio.ko | grep vermagic
se devuelve esto
vermagic: 4.18.0-21-lowlatency SMP preempt mod_unload
La ejecución modinfo
en mi módulo recién compilado devuelve esto
vermagic: 4.18.20-21-lowlatency SMP preempt mod_unload
Remonté el tema a las primeras líneas delMakefile
VERSION = 4
PATCHLEVEL = 18
SUBLEVEL = 20
Si cambio SUBLEVEL
a 0
y luego compilo, puedo cargar el módulo con éxito.
Entonces, aunque estoy ejecutando el 4.18.0
kernel y apt source linux
parece descargarlo 4.18.0
, los archivos descargados tienen versiones 4.18.20
.
¿Es esto normal o me falta algo?
Respuesta1
Tuve un problema similar. El problema radica en el método de obtención del código fuente del núcleo y de cómo se "construye" el núcleo. Hay un enlace a cuál es la forma oficial de hacerlo. lo seguí desdehttps://help.ubuntu.com/community/Kernel/Compile. Por lo que parece, parece estar desactualizado y ser una lectura larga.
Según la situación, quiero utilizar el kernel de Ubuntu lanzado oficialmente (no de ningún otro lugar) apt-get source xxxxx
. Es una carpeta con la carpeta Debian y una bola tar. Luego sigo instrucciones parciales deIntentando compilar el kernel en 18.04. No hay opción de editar configuraciones
Descargar las fuentes del kernel (
deb-src
deben descomentarse en/etc/apt/sources.list
)$ apt-get install linux-source kernel-package
Vaya a la carpeta con las fuentes del kernel y descomprima
$ cd /usr/src/linux-source-x.x.x $ tar jxvf linux-source-x.x.x.tar.bz2
- Mover contenido a la carpeta actual
$ mv linux-source-x.x.x/* . $ rm -rf linux-source-x.x.x/
- Obtenga los paquetes necesarios
$ apt-get build-dep linux-source $ mkdir debian/stamps
Entonces puedo correr fakeroot debian/rules clean
y fakeroot debian/rules binary-headers binary-generic binary-perarch
. En el medio, tengo que copiar manualmente un archivo de encabezado AMD GPU en la ubicación que falta; de lo contrario, la compilación falló. De esta manera, fakeroot debian/rules
utiliza la configuración del kernel en ejecución ( uname -r
).
Si uso make menuconfigure
and .config, termino con el mismo problema que tú. Entonces puedes usar mi ejemplo para usar el kernel de Ubuntu lanzado oficialmente y fakeroot debian/rules
para compilar. La versión del módulo podría coincidir.
Mi versión es Ubuntu 18.04 y la mía uname -r
es 5.3.0-51. Utilizo apt-get para obtener la fuente alrededor del 15 de abril de 2020.
Creo que hay otras formas de utilizarlo make
en lugar de fakeroot debian/rules
y podría ayudar a crear módulos en el árbol.