erro insmod: inserção de './hello.ko': -1 formato de módulo inválido "
Acabei de criar meu primeiro módulo de driver, o módulo hello world após o LDD3. No entanto, infelizmente, encontrei este erro:
insmod: error inserting './hello.ko': -1 Invalid module format.
Estou fazendo isso no Ubuntu 11.04 e meu ambiente:
$ uname -r
2.6.38-8-generic
Eu recebo a fonte do kernel assim:
sudo apt-cache search linux-source
linux-source - Linux kernel source with Ubuntu patches
linux-source-2.6.38 - Linux kernel source for version 2.6.38 with Ubuntu patches
$sudo apt-get install linux-source-2.6.38
meu / usr / src:
$ls /usr/src/
linux-headers-2.6.38-8 linux-source-2.6.38 vboxguest-5.0.10
linux-headers-2.6.38-8-generic linux-source-2.6.38.tar.bz2
e então eu compilo o kernel
$sudo cp /boot/config-2.6.38-8-generic ./.config
$sudo make menuconfig -- load the .config file
$make
$make modules
e então eu compilo meu módulo do kernel
$make -C /usr/src/linux-source-2.6.38/linux-source-2.6.38 M=`pwd` modules
com Makefile:
obj-m := hello.o
e, finalmente, quando insiro o módulo:
$sudo insmod hello_world.ko
insmod: error inserting 'hello_world.ko': -1 Invalid module format
o que eu encontrei no dmesg:
hello: disagrees about version of symbol module_layout
Então qual é o problema?
Eu também notei que olinux-header is -2.26.38-generic
e a versão do código-fonte é -2.26.38, esse é o problema? mas eu realmente não encontrei umlinux-source-2.26.38-generic
pacote na web.
atualização de status: Eu descobri que o arquivo / lib / moduels / $ (nome -r) / build / Makefile indica minha versão do kernel em execução:
VERSION = 2
PATCHLEVEL = 6
SUBLEVEL = 38
EXTRAVERSION = .2
Então, eu baixo o linux-2.6.38.2 e compilo, mas ainda assim o mesmo erro.
Também descobri que existe uma linha em / boot / config - $ (uname -r):
CONFIG_VERSION_SIGNATURE="Ubuntu 2.6.38-8.42-generic 2.6.38.2"
Alguém sabe o que isso significa? Não o vejo no arquivo de configuração do kernel que estou construindo.