Como compilar o módulo do kernel para diferentes versões do kernel?

3

Eu tenho o seguinte kernel instalado:

[root@localhost ~]# uname -r
2.6.32-573.el6.x86_64

E a seguinte fonte do kernel:

linux-2.6.32-573.1.1.el6.x86_64

Eu estou tentando compilar um módulo do kernel com essa fonte do kernel para o meu próprio kernel.

No Makefile da fonte do kernel, editei a configuração EXTRAVERSION:

[root@localhost linux-2.6.32-573.1.1.el6.x86_64]# cat Makefile | grep "EXTRAVERSION ="
EXTRAVERSION = 2.6.32-573.el6.x86_64

E usou o seguinte comando para compilar o módulo:

[root@localhost linux-2.6.32-573.1.1.el6.x86_64]# make M=~/hw/
  LD      /root/hw/built-in.o
  CC [M]  /root/hw/hello_world.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /root/hw/hello_world.mod.o
  LD [M]  /root/hw/hello_world.ko.unsigned
  NO SIGN [M] /root/hw/hello_world.ko

Mas quando tento instalá-lo, recebo o seguinte erro:

[root@localhost linux-2.6.32-573.1.1.el6.x86_64]# insmod ~/hw/hello_world.ko
insmod: error inserting '/root/hw/hello_world.ko': -1 Invalid module format

E a saída do modinfo é:

[root@localhost linux-2.6.32-573.1.1.el6.x86_64]# modinfo ~/hw/hello_world.ko
filename:       /root/hw/hello_world.ko
license:        GPL
srcversion:     A8BB878B88F36D3A046026C
depends:
vermagic:       2.6.32-573.el6.x86_64 SMP mod_unload modversions

Posso compilar o módulo para meu kernel atual sem ter que instalar suas fontes de kernel?

Informações adicionais:

SO: CentOS 6.7 mínimo. Binário de distribuição.

Seguiu este guia: link

e baixei as fontes para o linux-2.6.32-573.1.1.el6.x86_64 aqui:

link

Eu sei que eu poderia apenas baixar o código-fonte para o meu kernel em particular, mas no final eu realmente quero construir o módulo para uma versão do kernel que eu não consigo encontrar as fontes (ainda 2.6.32), então porque eu quero fazer assim.

    
por Kenci 06.04.2016 / 21:26

1 resposta

2

Na verdade, aqui duas coisas estão lá para se preocupar:

A versão do kernel em execução é a mesma da fonte que estamos usando. Como o kernel compilado anteriormente pode não ter todas as dependências que podem ser usadas na versão mais recente, enquanto a compilação do módulo externo com a fonte do kernel mais recente pode depender de qualquer parte do código, que está presente apenas na versão mais recente. Por isso, é recomendado usar o kernel da versão mais recente com o qual estamos usando o módulo externo.

Em segundo lugar, o arquivo .config para compilação do kernel Você pode copiá-lo de / boot / config (versão atual) * do seu sistema de arquivos para .config no diretório superior de origem do kernel. Versão atual podemos obtê-lo a partir do uname -r

Assim, o procedimento será se a versão em execução (cheque com o comando uname -r) não for igual à fonte carregada, então você precisa compilar e usar o novo kernel ou baixar a mesma versão do kernel a partir do kernel em execução. Para compilação do kernel, use o arquivo de configuração presente no diretório de boot, copie-o como indicado acima.

Então você pode prosseguir com uma maneira normal de compilar o módulo externo e carregá-lo com o kernel em execução sem qualquer problema.

    
por 08.04.2016 / 09:17