2013-07-10 3 views
5

Ich versuche, ein Modul in meine Kernel zu kompilieren und einfügen, aber ich erhalte diesen Fehler:andernfalls insmod ein wirklich einfaches Modul einzufügen

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

ich die Schritte folgten in diesem Tutorial hier beschrieben: http://www.cyberciti.biz/tips/compiling-linux-kernel-module.html. Und alles schien Sinn zu ergeben und funktionierte. Ich habe mein Beispielmodul kompiliert, aber es gab eine Warnung, die ein wichtiger Hinweis darauf sein könnte, warum dieses Ding versagt. Die Warnung war diese:

WARNING: Symbol version dump /usr/src/linux-3.0.0/Module.symvers is missing; modules will have no dependencies and modversions.

Ich weiß ehrlich gesagt nicht, warum die Module.symvers-Datei nicht da ist. Die /usr/src/linux-3.0.0 Verzeichnis und alle seine Inhalte wurden von mir erstellt, nachdem ich die Quellen mit diesem Befehl dowloaded:

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

, dass der einzige Schritt dieses Tutorial in der Tat war, dass ich folgte nicht, weil ich die genauen Quellen für meinen Kernel (3.0.0-32-generic) nicht finden konnte und dachte, dass das aptitude-Tool mir das erklären würde.

Und ich bin mit Ubuntu auf einer 64-Bit-Maschine durch die Art und Weise, hier ist die uname -a Ausgabe:

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

Irgendwelche Vorschläge, was als nächstes zu versuchen? Irgendwelche empfohlene Lesung?

PS1. Nach etwas mehr Forschung bestätigte ich, dass ich das 3.0.0-32-Generikum laufen lasse. update-grub zurückgegeben:

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

Aber nach einer sudo machen oldconfig und Überprüfung der resultierenden CONFIG-Datei Ausgabe ich diese interessante Linie erhalten:

CONFIG_VERSION_SIGNATURE="Ubuntu 3.0.0-32.51-generic 3.0.69" 

dass als missmatch qualifiziert?

PS2. dmesg gibt diese:

[ 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

genau nachdem du insmod laufen hast was dmesg sagt, zum Beispiel die letzten 10 Zeilen? – fghj

+0

Ich habe gerade die Frage aktualisiert, um ein paar Zeilen mehr einzufügen, was dmesg ausgibt, aber ich glaube, nur die letzte ist relevant. – Bilthon

+0

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

Antwort

7

Ihre aktuelle Kernel-Version ist 3.0.0-32-generic zu cd /lib/modules/3.0.0-32-gereric/ Verzeichnis gehen und prüfen, ob Build-Verzeichnis vorhanden ist oder nicht. Wenn vorhanden, dann können Sie direkt kompilieren Ihr Modul unter Befehl

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

, wenn Sie mit von Ihnen heruntergeladenen Kernel Ihr Modul kompilieren wollen, dann folgen das Verfahren unter:

cd /usr/src/linux-3.0.0/ 

make menuconfig 

make -j5 

make modules 

sudo make modules_install 

sudo make install 

sudo reboot 

dann starten Sie das System mit linux-3.0.0 kernel, und kompilieren sie ihr modul mit folgendem Befehl:

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

Danke, ich akzeptiere deine Antwort, da sie die einzige ist, die als solche zur Verfügung gestellt wird! Ich bin aber nicht durch deine Schritte gegangen. Stattdessen habe ich nur einen neuen Kernel kompiliert und insmod auf dem neuen Kernel ausgeführt. Es hat funktioniert, aber ich habe auch bemerkt, dass, obwohl ich die Quellen hatte, sie nicht kompiliert wurden, was mein Problem sein könnte. – Bilthon

+0

Sehr hilfreich! Ich habe neu gestartet und Insmod gab mir diesen Fehler auf Code, der 5 Minuten zuvor funktionierte. Ich habe in/lib/modules eingecheckt und es war sicher ein zweites Verzeichnis mit einer späteren Versionsnummer. Ich habe meine make-Datei auf die Version umgestellt und alles hat wieder funktioniert. –