PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Kernel Module kompilieren


poldy
18.06.2005, 10:08
Hallo alle zusammen,
ich lese mich gerade ein bischen ein in die Kernel und Modul Programmierung ein.
hab dazu das Buch o'reilly Linux Deviece drivers von 1998. (Kernel 1.2 und 2.0)

Ich wollte mal das erste modul dann kompilieren (ein einfaches Hello World) mit kprint
und soweiter.#define MODULE
#include <linux/module.h>

int init_module (void)
{
printk("<1>Hello, World\n");
return 0;
}
void cleanup_module(void)
{
printk("<1>Goodbye cruel World\n");
}


Das compilieren sollte mit gcc -c prog.c geschehen. Es kamen aber eine Latte von Fehlermeldungen. (liegt wohl daran das ich den Kernel 2.4 benutze)
Nachdem Ich die Schalter -D__KERNEL__ und -DMODULE mitbenutzt habe war nur noch eine Fehlermeldung da:
hello_world.c:1:1: Warnung: "MODULE" redefined
<command line>:5:1: Warnung: this is the location of the previous definition
In file included from /usr/include/linux/module.h:20,
from hello_world.c:2:
/usr/include/asm/module.h:54:2: #error unknown processor family

Ich hab schon "gegoogelt" wie blöde finde aber nichts passendes. Kann mir jemand Links,
Literaturvorschläge,Tips o.ä. geben. Wäre super.
Bitte jetzt aber keine Belehrung wie ( wenn man noch nicht mal alle Schalter vom Compiler kennt sollte man auch die Finger vom Kernel lassen ;) )Das ist mir alles schon bewusst. Ich will mich ja erst "reinlesen".
Gruß POLDY


FireBird2002
18.06.2005, 10:28
1. #define MODULE kannste weglassen da MODULE mit -DMODULE definiert wird

Zur Literatur: http://tldp.org/guides.html da "The Linux Kernel Module Programming Guide". Da findest du dann acuh die anderen Compiler-Switches.

poldy
19.06.2005, 09:36
Jo Danke für den Link. Mit der doppelten Definition hattes Du auch Recht.

Bekomme das aber mit dem unbekannten Processor-Type immer noch nicht hin. Dachte schon das ich nicht alle Kernel Sourcen installiert hatte oder das bei meiner SuSE Distribution mal wieder etwas in anderen Verzeichnissen liegt (kommt ja schon mal vor) ;ist aber nich so.

Kann es vielleicht sein das das Macro current_set [this_cpu] mit benutzt werden muss?
Habs versucht aber ich bekomme die letzte Meldung nicht weg.

Gruß POLDY

poldy
20.06.2005, 09:17
Hat geklappt, kaum macht man es richtig funktioniet es.


gcc -c hallo.c -D__KERNEL__ -I /lib/modules/2.4.21-99-default/build/include
bzw.
gcc -c hallo.c -D__KERNEL__ -I /lib/modules/`uname -r`/build/include

es ist wichtig gegen die Kernel Sourcen zu zu kompilieren, ich dachte ich hätte das gemacht (na ja wohl nicht richtig :rolleyes: )

Gruß an alle die sich nen Kopf gemacht haben.
POLDY

SeveQ
07.07.2005, 14:32
Hängt natürlich auch ganz davon ab, welchen Kernel du benutzt. Wenn du dich mal entschließen solltest, auf 2.6 umzusteigen (kann ich persönlich auch im Bereich der Treiberentwicklung nur empfehlen), dann ändert sich so manches.

Extrem gute, leicht verständliche und sauber verfasste Literatur zum Thema Treiberentwicklung mit Kernel 2.6 ist das Buch

"Linux-Treiber entwickeln"
von Jürgen Quade und Eva-Katharina Kunst
ISBN 3-89864-238-0
dpunkt.verlag (www.dpunkt.de)
Kostenpunkt 45,00 Euro

Das hat mir bisher extremst geholfen.

Baegsch
09.07.2005, 20:58
Hängt natürlich auch ganz davon ab, welchen Kernel du benutzt. Wenn du dich mal entschließen solltest, auf 2.6 umzusteigen (kann ich persönlich auch im Bereich der Treiberentwicklung nur empfehlen), dann ändert sich so manches.Das kann ich auch nur bestätigen - und vieles ändert sich zum Guten. Ich habe das Buch "Linux device drivers" von Rubini & Corbet ebenfalls, und kann es daher auch im Vergleich zu "Linux-Treiber entwickeln" nicht empfehlen. Trotzdem ist es nett es mal zu lesen ;)

"Linux-Treiber entwickeln"
von Jürgen Quade und Eva-Katharina Kunst
ISBN 3-89864-238-0
dpunkt.verlag (www.dpunkt.de)
Kostenpunkt 45,00 Euro
Gibt es mittlerweile frei auf der Webseite http://ezs.kr.hsnr.de/TreiberBuch/html/

mfg Maik