Incompatibilidade de versão de subnível ao tentar compilar o kernel atual

Incompatibilidade de versão de subnível ao tentar compilar o kernel atual

Estou tentando recompilar o sound/usbmódulo no Ubuntu 18.10 no kernel em execução. Não recebo erros de compilação, mas quando tento carregar o módulo recebo este erro:

Invalid module format

Estou executando o 4.18.0-21-lowlatencykernel.

Eu obtenho a fonte do kernel desta forma

apt source linux

Isso baixa e extrai a fonte do 4.18.0kernel para a linux-4.18.0pasta.

Copio os arquivos .confige para a raiz do diretório de origem do meu kernel.Module.symvers/lib/modules/4.18.0-21-lowlatency/build

Eu corro make EXTRAVERSION=-21-lowlatency modules_preparee entãomake EXTRAVERSION=-21-lowlatency M=sound/usb

A execução insmodresulta no seguinte erro escrito emsyslog

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 '

Executar modinfo /lib/modules/uname -r /kernel/sound/usb/snd-usb-audio.ko | grep vermagicretorna isso

vermagic:       4.18.0-21-lowlatency SMP preempt mod_unload

A execução modinfono meu módulo recém-compilado retorna isto

vermagic:       4.18.20-21-lowlatency SMP preempt mod_unload

Rastreei o problema até as primeiras linhas doMakefile

VERSION = 4
PATCHLEVEL = 18
SUBLEVEL = 20

Se eu mudar SUBLEVELpara 0e compilar, posso carregar o módulo com sucesso.

Portanto, embora eu esteja executando o 4.18.0kernel e apt source linuxpareça baixá-lo 4.18.0, os arquivos baixados são versionados 4.18.20.

Isso é normal ou estou faltando alguma coisa?

Responder1

Eu tive um problema semelhante. O problema está no método como você obtém a fonte do kernel e como você "construi" o kernel. Existe um link para qual é a forma oficial de fazer isso. Eu acompanhei desdehttps://help.ubuntu.com/community/Kernel/Compile. Pela aparência, parece desatualizado e de longa leitura.

Com base na situação, quero usar o kernel oficial do Ubuntu lançado (não de qualquer outro lugar) apt-get source xxxxx. É uma pasta com a pasta Debian e uma bola tar. Então sigo instruções parciais deTentando construir o kernel em 18.04. Nenhuma opção editconfigs

  1. Baixar fontes do kernel ( deb-srcdeve ser descomentado em /etc/apt/sources.list)

    $ apt-get install linux-source kernel-package
    
  2. Vá para a pasta com fontes do kernel e descompacte

    $ cd /usr/src/linux-source-x.x.x
    $ tar jxvf linux-source-x.x.x.tar.bz2
    
  3. Mover conteúdo para a pasta atual
    $ mv linux-source-x.x.x/* .
    $ rm -rf linux-source-x.x.x/
    
  4. Obtenha os pacotes necessários
    $ apt-get build-dep linux-source
    $ mkdir debian/stamps
    

Então eu posso correr fakeroot debian/rules cleane fakeroot debian/rules binary-headers binary-generic binary-perarch. No meio, tenho que copiar manualmente um arquivo de cabeçalho AMD GPU para o local ausente, caso contrário, a compilação falhará. Dessa forma, você fakeroot debian/rulesestá usando a configuração do kernel em execução ( uname -r).

Se eu usar o make menuconfiguree .config, acabo tendo o mesmo problema que você. Portanto, você pode usar meu exemplo para usar o kernel oficial do Ubuntu e fakeroot debian/rulescompilar. A versão do módulo pode corresponder.

Minha versão é Ubuntu 18.04 e a minha uname -ré 5.3.0-51. Eu uso o apt-get para obter a fonte por volta de 15/04/2020.

Acredito que existem outras maneiras de usar makeem vez de fakeroot debian/rules, e isso pode ajudar a construir módulos em árvore.

informação relacionada