La versión de subnivel no coincide al intentar compilar el kernel actual

La versión de subnivel no coincide al intentar compilar el kernel actual

Estoy intentando recompilar el sound/usbmó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-lowlatencykernel.

Obtengo la fuente del kernel de esta manera.

apt source linux

Esto descarga y extrae la fuente del 4.18.0kernel en la linux-4.18.0carpeta.

Copio los archivos .configy 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_preparey luegomake EXTRAVERSION=-21-lowlatency M=sound/usb

La ejecución insmodda 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 vermagicse devuelve esto

vermagic:       4.18.0-21-lowlatency SMP preempt mod_unload

La ejecución modinfoen 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 SUBLEVELa 0y luego compilo, puedo cargar el módulo con éxito.

Entonces, aunque estoy ejecutando el 4.18.0kernel y apt source linuxparece 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

  1. Descargar las fuentes del kernel ( deb-srcdeben descomentarse en /etc/apt/sources.list)

    $ apt-get install linux-source kernel-package
    
  2. 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
    
  3. Mover contenido a la carpeta actual
    $ mv linux-source-x.x.x/* .
    $ rm -rf linux-source-x.x.x/
    
  4. Obtenga los paquetes necesarios
    $ apt-get build-dep linux-source
    $ mkdir debian/stamps
    

Entonces puedo correr fakeroot debian/rules cleany 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/rulesutiliza la configuración del kernel en ejecución ( uname -r).

Si uso make menuconfigureand .config, termino con el mismo problema que tú. Entonces puedes usar mi ejemplo para usar el kernel de Ubuntu lanzado oficialmente y fakeroot debian/rulespara compilar. La versión del módulo podría coincidir.

Mi versión es Ubuntu 18.04 y la mía uname -res 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 makeen lugar de fakeroot debian/rulesy podría ayudar a crear módulos en el árbol.

información relacionada