Mittwoch, 8. Februar 2012, 15:09

Du bist nicht angemeldet.



errorX

hat hier 2. Wohnsitz.

  • »errorX« ist der Autor dieses Themas

Beiträge: 134

Ubuntu: 9.10

Kernel: 2.6.28

Desktop: KDE

Architektur: 64-bit

  • Private Nachricht senden

1

Freitag, 12. September 2008, 14:43

Modul laden funktioniert nicht

Hallo,
ich arbeite mich gerade ein wenig in die Treiberprogrammierung unter Linux ein. Allerdings komme ich schon an einer Stelle ganz am Anfang nicht so recht weiter. (Das Tutorial, das ich verwende, wurde für den Kernel 2.4 geschrieben.) Ich will ein Modul laden, das "Hello World!" ausgeben soll. Das Problem ist, dass die linux/module.h-Datei nicht gefunden wird. (No such file or directory.) Wurde das beim Kernel 2.6 in andere Dateien ausgelagert? Kennt vielleicht jemand eine gute Anleitung, wie im 2.6er-Kernel ein Modul geladen wird?

MfG errorx

PS.: Nicht dass ich falsch verstanden werde, ich suche NICHT eine Funktion wie insmod, sondern eine Möglichkeit, ein Modul zu erstellen.

basslord

Ubuntufreund

Beiträge: 2 653

Ubuntu: 11.10

Kernel: 3.0.0-12

Desktop: KDE

Architektur: 64-bit

  • Private Nachricht senden

2

Freitag, 12. September 2008, 22:31

Hallo,

da hast du dir ein interessantes Gebiet ausgeguckt ;) Die module.h ist durchaus in 2.6er Kerneln vorhanden. Ich gehe mal davon aus, dass dir die Kernel-Header fehlen. Oder ein Link darauf fehlt. Schau mal in /usr/src nach. Sollte in etwa so aussehen:

Quellcode

1
2
lrwxrwxrwx  1 root  src         29 2008-09-12 15:12 linux -> linux-headers-2.6.26.5-rve.01
drwxr-xr-x 20 root  root      4096 2008-09-12 15:11 linux-headers-2.6.26.5-rve.01

Unter linux-headers-$(uname -r)/include/linux ist dann die module.h zu finden.

Gruß
Rodge
"Ohne Musik wäre das Leben ein Irrtum." - Friedrich Nietzsche

errorX

hat hier 2. Wohnsitz.

  • »errorX« ist der Autor dieses Themas

Beiträge: 134

Ubuntu: 9.10

Kernel: 2.6.28

Desktop: KDE

Architektur: 64-bit

  • Private Nachricht senden

3

Samstag, 13. September 2008, 09:48

Hallo,

ja, die module.h habe ich jetzt unter /usr/src/linux-headers-2.6.24-19-generic/include/linux/module.h gefunden (eine nicht-generic Version existiert auch.) Sobald ich diese allerdings einbinde, spuckt der Compiler mir eine seitenlange Fehlermeldung aus:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
/usr/src/linux-headers-2.6.24-19-generic/include/linux/module.h:9:24: Fehler: linux/list.h: No such file or directory
/usr/src/linux-headers-2.6.24-19-generic/include/linux/module.h:11:28: Fehler: linux/compiler.h: No such file or directory
/usr/src/linux-headers-2.6.24-19-generic/include/linux/module.h:12:25: Fehler: linux/cache.h: No such file or directory
/usr/src/linux-headers-2.6.24-19-generic/include/linux/module.h:13:24: Fehler: linux/kmod.h: No such file or directory
/usr/src/linux-headers-2.6.24-19-generic/include/linux/module.h:15:29: Fehler: linux/stringify.h: No such file or directory
/usr/src/linux-headers-2.6.24-19-generic/include/linux/module.h:16:27: Fehler: linux/kobject.h: No such file or directory
/usr/src/linux-headers-2.6.24-19-generic/include/linux/module.h:17:31: Fehler: linux/moduleparam.h: No such file or directory
/usr/src/linux-headers-2.6.24-19-generic/include/linux/module.h:18:26: Fehler: linux/marker.h: No such file or directory
/usr/src/linux-headers-2.6.24-19-generic/include/linux/module.h:19:23: Fehler: asm/local.h: No such file or directory
/usr/src/linux-headers-2.6.24-19-generic/include/linux/module.h:21:24: Fehler: asm/module.h: No such file or directory
In file included from /usr/src/linux-headers-2.6.24-19-generic/include/linux/module.h:14,
                 from hello.c:2:
/usr/include/linux/elf.h:396: Fehler: »loff_t« wurde nicht deklariert
In file included from hello.c:2:
/usr/src/linux-headers-2.6.24-19-generic/include/linux/module.h:48: Fehler: Feld »attr« hat unvollständigen Typen
/usr/src/linux-headers-2.6.24-19-generic/include/linux/module.h:49: Fehler: expected identifier before »*« token
/usr/src/linux-headers-2.6.24-19-generic/include/linux/module.h:49: Fehler: ISO-C++ verbietet Deklaration von »ssize_t« ohne Typ
/usr/src/linux-headers-2.6.24-19-generic/include/linux/module.h:49: Fehler: »ssize_t« als Funktion, die eine Funktion zurückgibt, deklariert
/usr/src/linux-headers-2.6.24-19-generic/include/linux/module.h:50: Fehler: expected identifier before »*« token
/usr/src/linux-headers-2.6.24-19-generic/include/linux/module.h:51: Fehler: »size_t« wurde nicht deklariert
/usr/src/linux-headers-2.6.24-19-generic/include/linux/module.h:51: Fehler: ISO-C++ verbietet Deklaration von »ssize_t« ohne Typ
/usr/src/linux-headers-2.6.24-19-generic/include/linux/module.h:51: Fehler: »ssize_t« als Funktion, die eine Funktion zurückgibt, deklariert
/usr/src/linux-headers-2.6.24-19-generic/include/linux/module.h:51: Fehler: »int module_attribute::ssize_t(int*)« kann nicht überladen werden
/usr/src/linux-headers-2.6.24-19-generic/include/linux/module.h:49: Fehler: mit »int module_attribute::ssize_t(int*)«
/usr/src/linux-headers-2.6.24-19-generic/include/linux/module.h:59: Fehler: Feld »kobj« hat unvollständigen Typen
/usr/src/linux-headers-2.6.24-19-generic/include/linux/module.h: In function »int lookup_module_symbol_name(long unsigned int, char*)«:
/usr/src/linux-headers-2.6.24-19-generic/include/linux/module.h:529: Fehler: »ERANGE« wurde in diesem Gültigkeitsbereich nicht definiert
/usr/src/linux-headers-2.6.24-19-generic/include/linux/module.h: In function »int lookup_module_symbol_attrs(long unsigned int, long unsigned int*, long unsigned int*, char*, char*)«:
/usr/src/linux-headers-2.6.24-19-generic/include/linux/module.h:534: Fehler: »ERANGE« wurde in diesem Gültigkeitsbereich nicht definiert
/usr/src/linux-headers-2.6.24-19-generic/include/linux/module.h: In function »int module_get_kallsym(unsigned int, long unsigned int*, char*, char*, char*, int*)«:
/usr/src/linux-headers-2.6.24-19-generic/include/linux/module.h:541: Fehler: »ERANGE« wurde in diesem Gültigkeitsbereich nicht definiert
hello.c: In function »int init_module()«:
hello.c:6: Fehler: »printk« wurde in diesem Gültigkeitsbereich nicht definiert
hello.c: In function »void cleanup_module()«:
hello.c:12: Fehler: »printk« wurde in diesem Gültigkeitsbereich nicht definiert
joscha@evolutionX:~/Projekte/Lernen/driver$ g++ -Wall -c hello.c
In Datei, eingefügt von hello.c:2:
/usr/src/linux-headers-2.6.24-19/include/linux/module.h:9:24: Fehler: linux/list.h: No such file or directory
/usr/src/linux-headers-2.6.24-19/include/linux/module.h:11:28: Fehler: linux/compiler.h: No such file or directory
/usr/src/linux-headers-2.6.24-19/include/linux/module.h:12:25: Fehler: linux/cache.h: No such file or directory
/usr/src/linux-headers-2.6.24-19/include/linux/module.h:13:24: Fehler: linux/kmod.h: No such file or directory
/usr/src/linux-headers-2.6.24-19/include/linux/module.h:15:29: Fehler: linux/stringify.h: No such file or directory
/usr/src/linux-headers-2.6.24-19/include/linux/module.h:16:27: Fehler: linux/kobject.h: No such file or directory
/usr/src/linux-headers-2.6.24-19/include/linux/module.h:17:31: Fehler: linux/moduleparam.h: No such file or directory
/usr/src/linux-headers-2.6.24-19/include/linux/module.h:18:26: Fehler: linux/marker.h: No such file or directory
/usr/src/linux-headers-2.6.24-19/include/linux/module.h:19:23: Fehler: asm/local.h: No such file or directory
/usr/src/linux-headers-2.6.24-19/include/linux/module.h:21:24: Fehler: asm/module.h: No such file or directory
In file included from /usr/src/linux-headers-2.6.24-19/include/linux/module.h:14,
                 from hello.c:2:
/usr/include/linux/elf.h:396: Fehler: »loff_t« wurde nicht deklariert
In file included from hello.c:2:
/usr/src/linux-headers-2.6.24-19/include/linux/module.h:48: Fehler: Feld »attr« hat unvollständigen Typen
/usr/src/linux-headers-2.6.24-19/include/linux/module.h:49: Fehler: expected identifier before »*« token
/usr/src/linux-headers-2.6.24-19/include/linux/module.h:49: Fehler: ISO-C++ verbietet Deklaration von »ssize_t« ohne Typ
/usr/src/linux-headers-2.6.24-19/include/linux/module.h:49: Fehler: »ssize_t« als Funktion, die eine Funktion zurückgibt, deklariert
/usr/src/linux-headers-2.6.24-19/include/linux/module.h:50: Fehler: expected identifier before »*« token
/usr/src/linux-headers-2.6.24-19/include/linux/module.h:51: Fehler: »size_t« wurde nicht deklariert
/usr/src/linux-headers-2.6.24-19/include/linux/module.h:51: Fehler: ISO-C++ verbietet Deklaration von »ssize_t« ohne Typ
/usr/src/linux-headers-2.6.24-19/include/linux/module.h:51: Fehler: »ssize_t« als Funktion, die eine Funktion zurückgibt, deklariert
/usr/src/linux-headers-2.6.24-19/include/linux/module.h:51: Fehler: »int module_attribute::ssize_t(int*)« kann nicht überladen werden
/usr/src/linux-headers-2.6.24-19/include/linux/module.h:49: Fehler: mit »int module_attribute::ssize_t(int*)«
/usr/src/linux-headers-2.6.24-19/include/linux/module.h:59: Fehler: Feld »kobj« hat unvollständigen Typen
/usr/src/linux-headers-2.6.24-19/include/linux/module.h: In function »int lookup_module_symbol_name(long unsigned int, char*)«:
/usr/src/linux-headers-2.6.24-19/include/linux/module.h:529: Fehler: »ERANGE« wurde in diesem Gültigkeitsbereich nicht definiert
/usr/src/linux-headers-2.6.24-19/include/linux/module.h: In function »int lookup_module_symbol_attrs(long unsigned int, long unsigned int*, long unsigned int*, char*, char*)«:
/usr/src/linux-headers-2.6.24-19/include/linux/module.h:534: Fehler: »ERANGE« wurde in diesem Gültigkeitsbereich nicht definiert
/usr/src/linux-headers-2.6.24-19/include/linux/module.h: In function »int module_get_kallsym(unsigned int, long unsigned int*, char*, char*, char*, int*)«:
/usr/src/linux-headers-2.6.24-19/include/linux/module.h:541: Fehler: »ERANGE« wurde in diesem Gültigkeitsbereich nicht definiert
hello.c: In function »int init_module()«:
hello.c:6: Fehler: »printk« wurde in diesem Gültigkeitsbereich nicht definiert
hello.c: In function »void cleanup_module()«:
hello.c:12: Fehler: »printk« wurde in diesem Gültigkeitsbereich nicht definiert

Die Datei habe ich folgendermaßen inkludiert:

Quellcode

1
#include "/usr/src/linux-headers-2.6.24-19/include/linux/module.h"


Woran liegen diese Fehlermeldungen? Habe ich mich (mal wieder:D) ganz doof angestellt oder liegt da wirklich irgendein technisches Problem vor? (Ich tippe auf ersteres^^).

MfG errorX

PS: Dieses Forum (und vor allem seine User) hat mich einmal mehr überzeugt - in den meisten anderen Foren hätte ich auf Antworten wie "Du willst Treiber programmieren und kannst noch nicht mal Module einbinden? Vergiss es!" getippt :thumbup:

basslord

Ubuntufreund

Beiträge: 2 653

Ubuntu: 11.10

Kernel: 3.0.0-12

Desktop: KDE

Architektur: 64-bit

  • Private Nachricht senden

4

Samstag, 13. September 2008, 13:23

Moin,

eine step-by-step-Anleitung kann ich als Nichtprogrammierer nicht liefern. Würde dir auch nicht viel bringen. C sollte man schon beherrschen, sonst kommst du bei jeder Fehlermeldung ins Schleudern. Statt so

Quellcode

1
#include "/usr/src/linux-headers-2.6.24-19/include/linux/module.h"

mal so probiert?

Quellcode

1
#include <linux/module.h>

Die module.h inkludiert wiederum weitere Header, die nicht gefunden werden.

Lesestoff:
http://www.galileocomputing.de/openbook/c_von_a_bis_z/
http://ezs.kr.hsnr.de/TreiberBuch/

Gruß
Rodge
"Ohne Musik wäre das Leben ein Irrtum." - Friedrich Nietzsche

errorX

hat hier 2. Wohnsitz.

  • »errorX« ist der Autor dieses Themas

Beiträge: 134

Ubuntu: 9.10

Kernel: 2.6.28

Desktop: KDE

Architektur: 64-bit

  • Private Nachricht senden

5

Samstag, 13. September 2008, 15:13

Hallo,

C kann ich durchaus (was heißt, hauptsächlich C++, aber ich bin mir auch über die Unterschiede im Klaren). Nur mit der Linux-Programmierung kenne ich mich nicht so wirklich aus, aber das will ich ja gerade lernen.

Quellcode

1
#include <linux/module.h>

Hatte zuvor nicht funktioniert, deswegen habe ich nachgefragt. Was die Fehlermeldungen bedeuten weiß ich ebenfalls, es ging mir mehr um die Ursache. (Ist wahrscheinlich etwas falsch rübergekommen.)

MfG errorX

PS: Sorry wenn das jetzt etwas unfreundlich rübergekommen ist. Ich wollte nur Missverständnisse ausräumen.