raspberry_pi_kernelprogrammierung:helloworld
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
raspberry_pi_kernelprogrammierung:helloworld [2024/01/26 15:12] – [2. Hallo Welt Modul erstellen und übersetzen (compilieren)] torsten.roehl | raspberry_pi_kernelprogrammierung:helloworld [2024/01/26 15:49] (aktuell) – [3. Testen des "Hallo Welt" Moduls] torsten.roehl | ||
---|---|---|---|
Zeile 44: | Zeile 44: | ||
|Mit '' | |Mit '' | ||
- | Wir werden deshalb | + | Wir werden deshalb |
- | Gegen Sie die nachfolgende Zeile auf der Konsole ein: | + | Geben Sie die nachfolgende Zeile auf der Konsole ein: |
< | < | ||
Zeile 73: | Zeile 73: | ||
rpi-source </ | rpi-source </ | ||
- | Die erste Zeile installiert das Programm rpi-source in der zweiten Zeile wird es dann aufgerufen. Im Homeverzeichnis wird ein Verzeichnis linux angelegt. Dieses Verzeichnis ist ein Link auf das Verzeichnis | + | Die erste Zeile installiert das Programm rpi-source, und in der zweiten Zeile wird es dann aufgerufen. Im Homeverzeichnis wird ein Verzeichnis |
<WRAP center | <WRAP center | ||
Box: RPI-SOURCE | Box: RPI-SOURCE | ||
- | Mehr zum rpi-source Programm: | + | Mehr zum '' |
Insbesondes wenn Sie die nachfolgende Fehlermeldung bekommen, sollten Sie so vorgehen wie im Link beschrieben, | Insbesondes wenn Sie die nachfolgende Fehlermeldung bekommen, sollten Sie so vorgehen wie im Link beschrieben, | ||
Zeile 98: | Zeile 98: | ||
# | # | ||
# | # | ||
- | |||
- | |||
/* Metainformation */ | /* Metainformation */ | ||
| | ||
| | ||
- | | + | |
- | + | ||
- | + | ||
/* Loads the module in the kernel */ | /* Loads the module in the kernel */ | ||
| | ||
{ | { | ||
- | printk(" | + | printk(" |
- | | + | |
- | } | + | |
- | + | ||
- | + | ||
/* Removes the module from kernel */ | /* Removes the module from kernel */ | ||
- | 14 static void __exit exit_helloworld(void) | + | static void __exit exit_helloworld(void) |
- | 15 { | + | { |
- | 16 printk(" | + | |
- | 17 } | + | } |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | 18 module_init( init_helloworld ); | + | |
- | 19 module_exit( exit_helloworld ); | + | |
- | + | | |
+ | | ||
</ | </ | ||
+ | == Erläuterung == | ||
Das Einbinden | Das Einbinden | ||
Zeile 158: | Zeile 147: | ||
=== Vom Quellcode zum Modul: === | === Vom Quellcode zum Modul: === | ||
+ | |||
+ | Um ein vollständiges Kernel-Modul zu erstellen, muss der Quellcode noch übersetzt werden. Das Übersetzen (Kompilieren) des Quellcodes (Sourcecode) in ein ausführbares Programm erledigt man am besten mit einer Steuerdatei (Makefile) und dem Programm '' | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | < | ||
+ | obj-m := hello_world.o | ||
+ | |||
+ | else | ||
+ | KDIR := / | ||
+ | PWD := $(shell pwd) | ||
+ | |||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | |||
+ | Beim Makefile ist auf einiges zu achten, z.B.: | ||
+ | |||
+ | * Die Datei muss exakt Makefile geschrieben werden. | ||
+ | * Die Zeilen 2, 5, 6 und 9 müssen mit //" | ||
+ | |||
+ | Um nicht an dieser Stelle zu scheitern, empfehle ich, dieses Makefile downzuloaden: | ||
+ | Angenommen, im Verzeichnes '' | ||
+ | < | ||
+ | Damit '' | ||
+ | |||
==== 3. Testen des "Hallo Welt" Moduls ==== | ==== 3. Testen des "Hallo Welt" Moduls ==== | ||
+ | |||
+ | Um das Modul zu testen werden die Modul-Utilities benötigt. Darunter versteht man einen Satz von Hilfsprogrammen, | ||
+ | |||
+ | Um das Modul zu laden/ | ||
+ | |||
+ | Folgende Programme ('' | ||
+ | |||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | |||
+ | === Beispiel === | ||
+ | Hier die Ausgabe des '' | ||
+ | |||
+ | < | ||
+ | filename: | ||
+ | description: | ||
+ | author: | ||
+ | license: | ||
+ | srcversion: | ||
+ | depends: | ||
+ | vermagic: | ||
+ | |||
+ | Laden des Moduls: | ||
+ | < | ||
+ | Überprüfen, | ||
+ | |||
+ | < | ||
+ | hello_world | ||
+ | |||
+ | Um die Ausgabe von lsmod nicht zu lang zu machen, können wir mit grep hello_world nach hello_world suchen. Die Ausgabe zeigt an, dass die Suche erfolgreich war, d.h. das Modul korrekt geladen wurde. | ||
+ | |||
+ | Entladen des Moduls: | ||
+ | < | ||
+ | |||
+ | Lohnend ist auch ein Blick in die Datei ''/ | ||
+ | |||
+ | < | ||
+ | May 16 16: | ||
+ | May 16 16:26:16 kernel: GoodBye World: exit_helloworld</ | ||
===== Zusammenfassung ===== | ===== Zusammenfassung ===== |
raspberry_pi_kernelprogrammierung/helloworld.1706281948.txt.gz · Zuletzt geändert: 2024/01/26 15:12 von torsten.roehl