Hallo, On Mon, 13 Jan 2003, Thilo A. Coblenzer wrote:
Am Sonntag, 12. Januar 2003 22:59 schrieb David Haller:
On Sun, 12 Jan 2003, Thilo A. Coblenzer wrote:
also da war noch ein anderer Patch namens usbdnet-SuSE-8.0-2.4.18_91.patch.gz Diesen konnte ich ohne Fehlermeldung verwenden. Das make modules ist nach einiger Zeit mit einer Fehlermeldung abgebrochen.
Mail mal die letzten paar Zeilen (10 oder so)... ok, da sind sie: make[2]: Wechsel in das Verzeichnis Verzeichnis »/usr/src/linux-2.4.18.SuSE/abi/svr4«
Oha. Das Verzeichnis gibt's gar nicht im Vanilla-Kernel...
gcc -D__KERNEL__ -I/usr/src/linux-2.4.18.SuSE/include -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fno-strict-aliasing -fno-common -fomit-frame-pointer -pipe -mpreferred-stack-boundary=2 -march=i586 -DMODULE -DKBUILD_BASENAME=sysinfo -c -o sysinfo.o sysinfo.c sysinfo.c:9: linux/compile.h: Datei oder Verzeichnis nicht gefunden sysinfo.c: In function `svr4_sysinfo': sysinfo.c:83: `UTS_VERSION' undeclared (first use in this function) sysinfo.c:83: (Each undeclared identifier is reported only once sysinfo.c:83: for each function it appears in.) make[2]: *** [sysinfo.o] Fehler 1
Da fehlt wohl a) ein #include, oder b) die Datei ist nicht aktuell. Mach mal ein: find /usr/src/linux/ -name "*.h" -print0 | \ xargs -0 grep -H 'UTS_VERSION' (muesste IIRC in include/linux/version.h sein). Ansonsten: kann's sein, dass du ein 'make dep' vergessen hast? Falls nicht, mach mal ein 'make mrproper' und mach nochmal die config...
Ich sage es vorsichtshalber nocheinmal: Mir geht es nur um usbnet.o Der Rest ist mir egal. Ich möchte dieses Modul kopieren.
Dazu sollte der Kernel aber schon durchlaufen... Naja, du kannst immer noch ein 'make drivers/usb/usbdnet.o' versuchen, ich habe da aber eher wenig Hoffnung, dass das sauber durchlaeuft...
find /usr/src/linux/ -name '*.[ch]' | xargs grep -H '__out_of_line_bug'
Du muesstest das mind. einmal (im usbdnet-Kram) finden, interessant sind weitere Fundstellen... Also das funktioniert bei mir nicht. Ist das ein regulärer Ausdruck, der sagen soll: alle Dateien, die mit .c oder .h enden?
Nein, das ist ein "Glob" (siehe 'man find'). Und ja: Alle Dateien, die mit .c oder .h enden (siehe 'man 7 glob').
Muß da nicht irgendwie ein "oder" rein?
Nein, das "oder" steckt schon im '[ch]' (s.og. manpages).
Schon ein find /usr/src/linux/ -name '*.[ch]' bringt nix.
Huch? Bei mir: $ find /usr/src/linux/ -name '*.[ch]' | wc -l 9308
Allerdings entweder spinnt mein find gerade oder ich stelle mich blöd an!
Irgendsowas muss es wohl sein ;) Keine Ahnung, warum das find bei dir nix liefert... Denn das '/' am Ende des Pfades sorgr dafuer, dass der (evtl.) symlink /usr/src/linux aufgeloest wird...
Nach ewigem herumprobieren hier die Ergebniss von *.h:
Naja, irgendwas scheint also zu klappen... Ist /usr/src/linux ein symlink auf '/usr/src/linux-2.4.18.SuSE'? Dann musst du den '/' beim 'find /usr/src/linux/' unbedingt mit angeben (oder 'find /usr/src/linux-2.4.18.SuSE/' verwenden)...
/usr/src/linux-2.4.18.SuSE/include/linux/kernel.h:extern void __out_of_line_bug(int line) ATTRIB_NORET;
/usr/src/linux-2.4.18.SuSE/include/linux/kernel.h:#define out_of_line_bug() __out_of_line_bug(__LINE__)
Ah, ok, sieht soweit eigentlich ok aus... Aber ob dann hinter der Deklaration auch eine Funktion steckt, dazu musst du noch (analog) in den '*.c', '*.s' und '*.S' nachschauen (falls sich dein find immer noch daneben benehmen sollte). Ein (eine Zeile, ohne das '\') find /usr/src/linux/ -name '*.[chsS]' -exec \ grep -H '__out_of_line_bug' {} \; sollte das eigentlich finden.
/usr/src/shk/include/linux/kernel.h:extern void __out_of_line_bug(int ^^^ Wo kommt _das_ nu her??? Pruef mal 'ls -l /usr/src/linux' (ohne ein '/' am Ende!) [snip]
-dnh -- ... at least I thought I was dancing, 'til somebody stepped on my hand. -- J. B. White