Wie kompiliere ich ein Kernelmodul für Raspberry Pi?
Ich habe Probleme beim kompilieren von einem kernel-Modul für raspberry pi. Ich möchte die Erstellung eines "Hallo Welt" - kernel-Modul mit dem raspberry pi selbst.
Ich bin mit raspbian wheezy 3.6.11+.
Ich habe versucht, nach den Anweisungen auf http://elinux.org/RPi_Kernel_Compilation.
Hier ist das Makefile ich bin mit:
obj-m += hello-1.o
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
Hier ist der Quellcode für hello-1.c:
/*
* hello-1.c - The simplest kernel module.
*/
#include <linux/module.h> /* Needed by all modules */
#include <linux/kernel.h> /* Needed for KERN_INFO */
int init_module(void)
{
printk(KERN_INFO "Hello world 1.\n");
/*
* A non 0 return means init_module failed; module can't be loaded.
*/
return 0;
}
void cleanup_module(void)
{
printk(KERN_INFO "Goodbye world 1.\n");
}
Hier ist, was ich bekomme, wenn ich versuche das Projekt:
root@raspberrypi:/home/pi/hello-module# make
make -C /lib/modules/3.6.11+/build M=/home/pi/hello-module modules
make: *** /lib/modules/3.6.11+/build: No such file or directory. Stop.
make: *** [all] Error 2
Ich habe versucht das erstellen der build-Verzeichnis unter /lib/modules/3.6.11+
make -C /lib/modules/3.6.11+/build M=/home/pi/hello-module modules
make[1]: Entering directory `/lib/modules/3.6.11+/build'
make[1]: *** No rule to make target `modules'. Stop.
make[1]: Leaving directory `/lib/modules/3.6.11+/build'
make: *** [all] Error 2
Habe ich mit GNU Make 3.81 und gcc (Debian 4.6.3-14+rpi1) 4.6.3 installiert ist. Ich habe auch installiert den linux-source mit
sudo apt-get install linux-source
Irgendwelche Ideen auf, was könnte ich tun, um diese zu kompilieren?
InformationsquelleAutor der Frage user3025582 | 2013-11-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beim kompilieren eines Moduls die
-C
parameter sollte auf den source-tree, auf dem der kernel gebaut wurde (nicht sauber!). Wenn Sie gebaut, es auf dem pi seine Wahrscheinlichkeit in einem Verzeichnis unter Ihrem home-Verzeichnis.Den
build
Verzeichnis unter/lib/modules/<version>
ist ein Debian-ism, wo eine cut-down-version der source-tree ist mit gerade genug Kontext, um zu bauen, Module gegen. Die Kerne von der Raspberry Pi Foundation Kernel nicht Schiff mit einembuild
Verzeichnis.Sind Sie vielleicht ein bisschen veraltet, aber raspbian bietet eine kernel als Debian-style-Paket, was sollte die
build
Verzeichnis, das Sie verwenden können, um build-kernel-Module gegen.InformationsquelleAutor der Antwort Greg
Hier sind die Schritte, die ich verwendet, um zu bauen, die Hallo Welt kernel-Modul auf Raspbian.
Durchführen
sudo rpi-update
Sehen https://github.com/Hexxeh/rpi-update für details auf
rpi-update
. Sie haben, um auf die neueste firmware und die zugehörigen kernel ausführen zu können, ist der nächste Schritt.Installieren und ausführen
rpi-source
zu installieren, die source-code gebaut, der neueste kernel, die Sie ausgeführt werden. Dadurch wird der richtige Eintrag in/lib/modules
für den kernel, die Sie ausgeführt werden. Hinweis: Sie brauchen nicht root sein, um diesen Befehl ausgeführt, jedoch wird das script ausführen bestimmter Aufgaben mithilfe vonsudo
und das root-Kennwort wird angefordert während der Skript-Ausführung.Anweisungen zum installieren
rpi-source
finden Sie unter https://github.com/notro/rpi-source/wikiNachdem Sie diese Schritte durchgeführt werden, sollten Sie in der Lage sein, um
make
den Hello World kernel-Modul.InformationsquelleAutor der Antwort HeatfanJohn
Müssen Sie zuerst die kernel-Header (und die entsprechenden kernel-Binär -) bauen Ihr Modul.
Wie Greg schon sagte, die raspbian-distribution enthält die Pakete :
Dann, sagen raspbian Booten des neu installierten kernel (3.10-3-rpi für mich).
Hängen Sie die am Ende des
/boot/config.txt
und starten Sie Ihren Pi :Ändern Sie dann Ihre Makefile, um die frisch installierten kernel-Header :
InformationsquelleAutor der Antwort JayDee
Dies war ein Schmerz. Ich hatte zum kompilieren und installieren Sie einen kernel-Modus-Treiber.Nach langen Suche, bekam ich den Header für den pi 2 (3.18.7-v7+) aus hier.
InformationsquelleAutor der Antwort Ryu_hayabusa
Arbeitete ich auf der exakt gleichen Probe auf meinem RPI mit der exakt gleichen kernel. Ich konnte kompilieren Sie das Modul, auf mein RPI, aber wenn ich ausgestellt insmod ich erhielt eine Fehlermeldung. Ich folgte den Anweisungen hier auf eine XUbuntu-virtuelle Maschine (mit meinem RPI kernel-version 3.6.y), und es funktionierte perfekt. Nicht sicher, warum das kompilieren direkt auf dem RPI nicht funktioniert, dann ist das ein problem für einen anderen Tag.
Musste ich das Makefile entsprechend der neuen Umgebung.
InformationsquelleAutor der Antwort cstick