Kernel-Header Problem bei Kernel 2.6.8 unter sarge

Welches Modul/Treiber für welche Hardware, Kernel compilieren...
Antworten
Benutzeravatar
Hermi
Beiträge: 20
Registriert: 20.09.2002 12:09:20
Wohnort: Osnabrücker Land
Kontaktdaten:

Kernel-Header Problem bei Kernel 2.6.8 unter sarge

Beitrag von Hermi » 22.12.2004 09:34:04

Hi folks,

ich habe hier ein Problem mit dem Kompilieren eines WLAN-Treibers unter Debian
3.1 (sarge) und dem Kernel 2.6.8.

Kern des Problems sind Probleme mit den Kernel-Headern.

Ich habe das Kernelpaket 2.6.8-1-686 von Debian installiert. Der Kernel läuft
auch gerade auf dem System.
Dazu habe ich das Sourcepaket des Kernel installiert (kernel-source-2.6.8)

Das Paket linux-kernel-headers ist ebenfalls installiert. Daher rühren diverse
Kernelheader (wie bspw. version.h) unter /usr/include/...

Unter /usr/src/treiber/ipw2200 habe ich mir einen Intel-Treiber ausgepackt,
den ich zu kompilieren gedenke. Voraussetzung dafür ist ein 2.6er Kernel, der
- wie gesagt - auf der Zielmaschine läuft.

Lt. der INSTALL-Beschreibung des Treibers soll das Aufrufen von "make" im
Quellverzeichnis reichen, um das Modul zu kompilieren.

Der Aufruf von make erzeugt allerdings ein paar Fehler, dahingehend, dass div.
Header nicht gefunden werden können.
Nachdem ich im Kernel-Source-Verzeichnis ein "make menuconfig" mit direkt
anschließendem "exit" gemacht habe, findet make neuerdings div.
*.c-Files, über die es vorher auch noch stolperte. Jedoch klemmt es nunmehr in
einer Tour über div. asm/*.h Files, die auf der Maschine vorhanden sind,
nämlich unter /usr/include, nicht aber unter /usr/src/kernel/
kernel-source-2.6.8 ...

Der Aufruf von make produziert dann eben die nachfolgenden Hinweise (es
handelt sich um die ersten dutzend Zeilen, es folgen hunderte Folgefehler).

Code: Alles auswählen

make -C /lib/modules/2.6.8-1-686/build SUBDIRS=/usr/src/treiber/ipw2200-0.19 
MODVERDIR=/usr/src/treiber/ipw2200-0.19 modules
make[1]: Entering directory `/usr/src/kernel/kernel-source-2.6.8'
  CC [M]  /usr/src/treiber/ipw2200-0.19/ipw2200.o
In Datei, eingefügt von include/linux/module.h:10,
                    von /usr/src/treiber/ipw2200-0.19/ipw2200.h:32,
                    von /usr/src/treiber/ipw2200-0.19/ipw2200.c:33:
include/linux/sched.h:4:37: asm/param.h: Datei oder Verzeichnis nicht gefunden
In Datei, eingefügt von include/linux/types.h:13,
                    von include/linux/capability.h:16,
                    von include/linux/sched.h:7,
                    von include/linux/module.h:10,
                    von /usr/src/treiber/ipw2200-0.19/ipw2200.h:32,
                    von /usr/src/treiber/ipw2200-0.19/ipw2200.c:33:
include/linux/posix_types.h:47:29: asm/posix_types.h: Datei oder Verzeichnis 
nicht gefunden
Ergo: Das Makefile findet die Header-Files unter /usr/include nicht - warum
auch immer ...

Die Frage ist also nun: wie bekomme ich dem Makefile beigebogen, dass
Header-Files nicht nur unter /usr/src/kernel/kernel-source-2.6.8 findet,
sondern auch unter /usr/include ... ????

Muss man im Kernel-Source noch irgendwas machen außer make menuconfig, dass /
usr/include "allgemein" bekannt ist, oder wie kriege ich hier die Kuh vom Eis?

Danke für alle Tipps im Voraus!!

Gruß,
hermi :(
Open Source Software - Freie Software für freie Bürger!

Benutzeravatar
pil
Beiträge: 629
Registriert: 30.04.2002 15:47:27

Re: Kernel-Header Problem bei Kernel 2.6.8 unter sarge

Beitrag von pil » 22.12.2004 10:20:50

Ein paar ganz grundsätzliche Sachen sollten dir weiterhelfen:

Die Quellen - incl. Kernel-header - des aktuellen Kernels sollten *immer* unter /usr/src/linux-2.X.X zu finden sein. Unter /usr/src sollte folgender Link gesetzt werden
/usr/src/linux --> /usr/src/linux-2.X.X

(die Header sind dann unter /usr/src/linux/include)

Um die Header Datei versions.h zu generieren, musst du nur die Kompilierung anstossen, also nach make menuconfig die Konfiguration speichern.

Unter /usr/include befinden sich die Header-Dateien des Kernels, mit dem die C-Library kompiliert wurde. Diese Header sind also nur in - ganz wenigen - Ausnahmefällen identisch mit den Header-Dateien des aktuellen Kernels und werden zum Kompilieren von Kernel-Modulen überhaupt nicht gebraucht.

Benutzeravatar
Hermi
Beiträge: 20
Registriert: 20.09.2002 12:09:20
Wohnort: Osnabrücker Land
Kontaktdaten:

Re: Kernel-Header Problem bei Kernel 2.6.8 unter sarge

Beitrag von Hermi » 22.12.2004 10:39:02

Hi,
Die Quellen - incl. Kernel-header - des aktuellen Kernels sollten *immer* unter /usr/src/linux-2.X.X zu finden sein.
Bei Debian ist das default-mäßig geringfügig anders, wie Du weißt. Kernel Souce aus Debian-Paketen liegt per default unter /usr/src/kernel-source-2.x.x (bei Sourcen von kernel.org ist das natürlich anders)

Ich habe es in den letzten Jahren immer so gehalten, dass ich Kernel-Source unter /usr/src/kernel/kernel-source-<version> verwalte, damit die Kernel-Sourcen an der einen und andere Quellen an der anderen Stelle (bspw. /usr/src/software/software-<version>) liegen.

In den vergangenen Jahren habe ich so noch alles hinbekommen, was ich wollte.
Unter /usr/src sollte folgender Link gesetzt werden
/usr/src/linux --> /usr/src/linux-2.X.X
Yep. Mein Link zeigt natürlich auf meinen Pfad: /usr/src/kernel/kernel-source-2.6.8
(die Header sind dann unter /usr/src/linux/include)
Bingo.
Um die Header Datei versions.h zu generieren, musst du nur die Kompilierung anstossen, also nach make menuconfig die Konfiguration speichern.
Ok, das hatte ich inzwischen auch schon durch Testen ermittelt. Funktioniert offenbar so.
Unter /usr/include befinden sich die Header-Dateien des Kernels, mit dem die C-Library kompiliert wurde. Diese Header sind also nur in - ganz wenigen - Ausnahmefällen identisch mit den Header-Dateien des aktuellen Kernels und werden zum Kompilieren von Kernel-Modulen überhaupt nicht gebraucht.
So habe ich das bisher auch immer verstanden, aber dieser depperte Treiber will - warum auch immer - auf div. asm/*.h Files zugreifen, die nunmal nur da liegen.

Was also tun?

Gruß,
Hermi
Open Source Software - Freie Software für freie Bürger!

Benutzeravatar
pil
Beiträge: 629
Registriert: 30.04.2002 15:47:27

Re: Kernel-Header Problem bei Kernel 2.6.8 unter sarge

Beitrag von pil » 22.12.2004 11:10:22

In /usr/scr/linux/include muss der Link auf das deiner Maschine entsprechende asm-Verzeichnis gesetzt sein. (Da der 2.6.er Kernel das von sich aus macht, nehme ich an, dass da im Kernel-Quellverzeichnis Müll-Dateien rumliegen. Ein make mrproper sollte dem abhelfen. Vorher noch die .config -Datei sichern!)

Dann musst du vermutlich noch im Makefile des Treibers den Pfad anpassen.

Benutzeravatar
Hermi
Beiträge: 20
Registriert: 20.09.2002 12:09:20
Wohnort: Osnabrücker Land
Kontaktdaten:

Re: Kernel-Header Problem bei Kernel 2.6.8 unter sarge

Beitrag von Hermi » 22.12.2004 12:02:29

pil hat geschrieben:In /usr/scr/linux/include muss der Link auf das deiner Maschine entsprechende asm-Verzeichnis gesetzt sein. (Da der 2.6.er Kernel das von sich aus macht, nehme ich an, dass da im Kernel-Quellverzeichnis Müll-Dateien rumliegen. Ein make mrproper sollte dem abhelfen. Vorher noch die .config -Datei sichern!)

Dann musst du vermutlich noch im Makefile des Treibers den Pfad anpassen.

Wir auch immer: das Kompilieren geht jetzt. Ich habe folgendes gemacht: zunächst mal habe ich auf Grund eines anderen Tipps mit "make all" den Kernel compiliert und danach habe ich "make" im Treibersource gemacht. Das Kompilieren war damit erfolgreich. Es gab allerdings ein paar Warnungen usw.

_Dieses_ Problem scheint damit gelöst zu sein ....

So richtig geht zwar der Treiber noch nicht, aber das ist weniger ein Kernel-Problem. Ich werde dazu ggf. in der entsprechenden Rubrik was Neues posten, falls ich hängen bleibe.

Thanx to all!

gruß,
hermi
Open Source Software - Freie Software für freie Bürger!

Antworten