2013-07-10 9 views
5

Sto cercando di compilare e inserire un modulo nel mio kernel, ma continuo a ricevere questo errore:insmod non riuscendo a inserire un modulo molto semplice

insmod: error inserting 'hello.ko': -1 Invalid module format 

Ho seguito la procedura descritta in questo tutorial qui: http://www.cyberciti.biz/tips/compiling-linux-kernel-module.html. E tutto sembrava avere un senso e funzionato. Ho ottenuto il mio modulo di esempio compilato, MA c'era un avvertimento che potrebbe essere un importante indizio del perché questa cosa sta fallendo. L'avviso era questo:

Francamente non so perché il file Module.symvers non è presente. La directory /usr/src/linux-3.0.0 e tutti i suoi contenuti sono stati creati da me dopo che dowloaded le fonti usando questo comando:

apt-get source linux-image-$(uname -r)

Questo era infatti l'unico passo di quel tutorial che ho non l'ho seguito, perché non sono riuscito a trovare le origini esatte per il mio kernel (3.0.0-32-generico) e ho pensato che lo strumento di attitudine avrebbe risolto il problema.

e sto correndo Ubuntu su una macchina a 64 bit a proposito, ecco l'output -a uname:

Linux vega 3.0.0-32-generiC#51-Ubuntu SMP Thu Mar 21 15:50:59 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

Qualche suggerimento su cosa provare dopo? qualsiasi lettura consigliata?

PS1. Dopo alcune ricerche ho confermato che sto usando il 3.0.0-32-generic. update-grub restituito:

Found linux image: /boot/vmlinuz-3.0.0-32-generic 

Ma dopo l'emissione di un sudo make oldconfig e controllando il file .config risultante ottengo questa linea interessante:

CONFIG_VERSION_SIGNATURE="Ubuntu 3.0.0-32.51-generic 3.0.69" 

Vuol qualificano come un missmatch?

PS2. Uscite dmesg questo:

[ 5.869900] ADDRCONF(NETDEV_UP): eth1: link is not ready 
[ 6.144304] EXT4-fs (dm-1): re-mounted. Opts: errors=remount-ro 
[ 6.368936] EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts: (null) 
[ 6.433919] vesafb: mode is 640x480x32, linelength=2560, pages=0 
[ 6.433921] vesafb: scrolling: redraw 
[ 6.433923] vesafb: Truecolor: size=8:8:8:8, shift=24:16:8:0 
[ 6.435424] vesafb: framebuffer at 0xb0000000, mapped to 0xffffc90012800000, using 1216k, total 1216k 
[ 6.435516] Console: switching to colour frame buffer device 80x30 
[ 6.443104] EXT4-fs (dm-2): mounted filesystem with ordered data mode. Opts: (null) 
[ 6.450198] fb0: VESA VGA frame buffer device 
[ 8.884523] e1000e: eth1 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: Rx/Tx 
[ 8.885845] ADDRCONF(NETDEV_CHANGE): eth1: link becomes ready 
[ 12.611236] init: ssh main process (762) terminated with status 255 
[ 12.624381] init: failsafe main process (752) killed by TERM signal 
[ 12.634739] type=1400 audit(1373412287.107:8): apparmor="STATUS" operation="profile_load" name="/usr/sbin/tcpdump" pid=852 comm="apparmor_parser" 
[ 12.634873] type=1400 audit(1373412287.107:9): apparmor="STATUS" operation="profile_replace" name="/sbin/dhclient" pid=851 comm="apparmor_parser" 
[ 12.635180] type=1400 audit(1373412287.107:10): apparmor="STATUS" operation="profile_replace" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=851 comm="apparmor_parser" 
[ 12.635403] type=1400 audit(1373412287.107:11): apparmor="STATUS" operation="profile_replace" name="/usr/lib/connman/scripts/dhclient-script" pid=851 comm="apparmor_parser" 
[ 19.390991] eth1: no IPv6 routers present 
[ 576.758697] hello: no symbol version for module_layout 
+0

esattamente dopo aver eseguito insmod cosa dice dmesg, ad esempio le ultime 10 righe? – fghj

+0

Ho appena aggiornato la domanda per incollare qualche riga in più su ciò che esce da dmesg, ma credo che solo l'ultimo sia rilevante. – Bilthon

+0

qui http://stackoverflow.com/questions/1738539/how-do-i-fix-no-symbol-version-for-module-layout? – fghj

risposta

7

del vostro kernel è 3.0.0-32-generic vanno a cd /lib/modules/3.0.0-32-gereric/ directory e controllare se cartella di compilazione è presente o meno. Se presente, allora è possibile compilare direttamente il modulo usando sotto comando

make -C /lib/modules/3.0.0-32-generic/build M=$(PWD) modules 

se si vuole compilare il modulo con kernel scaricato da voi allora seguire la seguente procedura:

cd /usr/src/linux-3.0.0/ 

make menuconfig 

make -j5 

make modules 

sudo make modules_install 

sudo make install 

sudo reboot 

quindi avviare il sistema con linux-3.0.0 kernel e compilare il modulo usando il seguente comando:

make -C /lib/modules/3.0.0/build M=$(PWD) modules 
+0

Grazie, accetterò la tua risposta in quanto è l'unica fornita in quanto tale! Comunque non ho seguito i tuoi passi. Invece ho appena compilato un nuovo kernel e ho eseguito insmod su quello nuovo. Ha funzionato, ma ho anche notato che anche se ho avuto le fonti, non sono state compilate in modo tale che potrebbe essere stato il mio problema. – Bilthon

+0

Molto utile! Ho riavviato e insmod mi ha dato questo errore sul codice che funzionava 5 minuti prima. Ho controllato/lib/modules e sicuramente c'era una seconda dir con un numero di versione successivo. Ho cambiato il mio file make per usare la versione e tutto ha ripreso a funzionare. –