ch wollte nur mal testen, ein modul zu kompilieren, wie es in meinem buch abgetippt ist:
#include <linux/module.h>
#if defined(CONFIG_SMP)
#define __SMP__
#endif
#if defined(CONFIG_MODVERSIONS)
#define MODVERSIONS
#include <linux/modversions.h>
#endif
#include <linux/kernel.h>
int init_module(void)
{
printk(KERN_DEBUG "Hallo Kernel!\n");
return 0;
}
void cleanup_module(void)
{
printk(KERN_DEBUG "Kernel ade!\n");
}
kompiliert mit dem befehl:
gcc -D__KERNEL__ -I/usr/src/linux/include -DMODULE -Wall -O2 -c main.c -o main.o kommen folgende fehlermeldungen:
flo@buenaventura:~/schule/apr/cpp/module/halloworld$ gcc -D__KERNEL__ -I/usr/src/linux/include -DMODULE -Wall -O2 -c main.c -o main.o
main.c:1:1: Warnung: »MODULE« redefiniert
<Kommandozeile>:1:1: Warnung: dies ist die Stelle der vorherigen Definition
In Datei, eingefügt von /usr/include/linux/sched.h:16,
von /usr/include/linux/module.h:9,
von main.c:4:
/usr/include/linux/signal.h:2:2: Warnung: #warning "You should include <signal.h>. This time I will do it for you."
In file included from /usr/include/linux/resource.h:4,
from /usr/include/linux/sched.h:79,
from /usr/include/linux/module.h:9,
from main.c:4:
/usr/include/linux/time.h:9: Fehler: Redefinition von »struct timespec«
/usr/include/linux/time.h:15: Fehler: Redefinition von »struct timeval«
/usr/include/linux/time.h:20: Fehler: Redefinition von »struct timezone«
/usr/include/linux/time.h:47: Fehler: Redefinition von »struct itimerval«
In file included from main.c:4:
/usr/include/linux/module.h:41: Fehler: Feld »attr« hat unvollständigen Typen
/usr/include/linux/module.h:49: Fehler: Feld »kobj« hat unvollständigen Typen
main.c: In Funktion »init_module«:
main.c:8: Warnung: implizite Deklaration der Funktion »printk«
main.c: Auf höchster Ebene:
main.c:13: Warnung: Rückgabetyp ist auf »int« voreingestellt
main.c:13: Warnung: in Konflikt stehende Typen für »cleanup_module«
/usr/include/linux/module.h:55: Warnung: vorherige Deklaration von »cleanup_module« war hier
flo@buenaventura:~/schule/apr/cpp/module/halloworld$
ich versteh nicht, wie der code im buch (Linux Programmierung) richtig sein kann, und bei mir nur fehlerhaft kompiliert werden kann.
bitte um hilfe