On Fri, 2003-09-05 at 04:53, David Haller wrote:
Hallo,
On Sun, 31 Aug 2003, Thomas Hertweck schrieb:
Konrad Neitzel schrieb:
/usr/include/linux und /usr/include/asm sollten also bei aktuellen Distris IMO auf /lib/modules/`uname -r`/build/include/linux bzw. auf /lib/modules/`uname -r`/build/include/asm zeigen.
Sorry David, aber das ist ... . /usr/include/linux und /usr/include/asm sind Bestandteil der "System-Headers", die wiederum die User-API eines Systems darstellt. /lib/modules/*/build/* hingegen bildet die API des korrespondierenden Kernels.
Die Realitaet z.B. bei der 8.2 sieht anders aus, dort sind dies "echte Verzeichnisse" aus "glibc-devel" mit den Headern, gegen die die glibc kompiliert wurde, d.h. die Probleme, die mit einem anderen Kernel auftreten koennen, koennen erst zur Laufzeit bemerkt werden. *seufz* Ja.
Das Problem verlagert sich also nur von einem symlink (/usr/src/linux) auf einen anderen (automatisch pro Kernel erstellten, eben auf /lib/modules/`uname -r`/build), was durchaus als Fortschritt angesehen werden kann... Ja.
Will man also ein Programm schreiben, dass zum Kernel passt darf man nach wie vor nicht /usr/include/{linux,asm} verwenden, denn dort koennen veraltete/unpassende libc-Header rumliegen, sondern man verwendet nun eben statt '-I/usr/src/linux/include' eben '-I/lib/modules/`uname -r`/build/include' was durchaus ein Fortschritt sein _koennte_, falls der Admin mal sein /usr/src/linux nicht gepflegt hat -- andererseits ist es ein Rueckschritt, da es den Admin noetigt, den Kernel zu booten, fuer den kompiliert werden soll[3], mit /usr/src/linux musste er nur diesen symlink auf die passenden Kernelquellen umbiegen... Jein.
Richtig ist, /lib/modules/`uname -r` nimmt die Header des laufenden Kernels, /lib/modules/<kernel-version> hingegen die Header des Kernels der in <kernel-version> angegeben ist. Mit anderen Worten, das Makefile eines Kernel-modules sollte so geschrieben sein, dass es per default `uname -r` verwendet, sich dieser Wert aber überschreiben lässt. Findest Du in einem GNUmakefile z.B. dieses: KERNDIR=/lib/modules/$(shell uname -r) kannst Du es (sofern das GNUmakefile sauber geschrieben ist) mit gmake KERNDIR=/lib/modules/2.4.16-dnh oder ä. überschreiben.
Das Grundproblem aber bleibt also. Nur leider scheinen die relevanten (Linus, U. Drepper u.a., Mantel?) Leute eben anderer Ansicht als ich.
Fazit: ich werde auch weiterhin nicht drumrumkommen, wie vor 3 Jahren symlinks zu legen und umzubiegen... Siehe oben.
[3] was beim cross-compile unmoeglich sein kann! Sachlich falsch. Es besteht kein Bedarf zu "rebooten".
Ralf