Einzelnes Kernel-Modul kompilieren und austauschen
Hallo, nachdem mein erster Versuch im Desaster endete muss ich Euch um Hilfe bitten -- ich bin mit dem folgenden Problem offensichtlich ueberfordert.... Problem: Es geht um das Modul cdc_acm. Damit es mit meinem GPS Logger (QSTARZ BT-Q1000X) (ueber USB) zusammenarbeitet, muss dieses Modul in der Datei cdc_acm.c um folgende Definition erweitert werden: { USB_DEVICE(0x0e8d, 0x3329), /* Qstarz BT-Q1000X */ .driver_info = NO_UNION_NORMAL, /* has no union descriptor */ }, Dass diese Definition fehlt ergibt sich auch aus meinen /var/log/messages beim Anschliessen des Loggers. Sodann muss das Modul neu kompiliert werden und das alte Modul durch das neue ersetzt werden. Aktuell ist dieses Modul bei mir (openSUSE 11.1, 64bit) ladbar. Wie mache ich dass? Hier noch einmal zum Vegleich, was ich gestern gemacht habe, und was schief ging (das System war anschliessend nicht mehr bootfaehig....) # cd /usr/src/linux-source-2.6.27.29-0.1-default # cp /boot/config-`uname -r` ./.config # make menuconfig Dann im Konfigurationsmenue "Alternate Configuration File" ausgewaehlt und ".config" (die Voreinstellung) ausgewaehlt. Nach dem Editieren der Datei cdc_acm.c habe ich dann dann nur noch # make modules # make modules_install ausgefuehrt. Im Verzeichnis /usr/src/linux habe ich uebrigends sonst nichts geaendert. Ich weiss daher auch nicht, warum ich solche Probleme bekommen habe. Vielleicht laesst sich das alles vermeiden, wenn ich nur dieses eine Modul uebersetze und installiere? Vielen Dank im Voraus fuer Eure Hilfe, Karl. -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo Karl, Am Donnerstag 03 September 2009 21:45:34 schrieb Karl Weber:
nachdem mein erster Versuch im Desaster endete muss ich Euch um Hilfe bitten -- ich bin mit dem folgenden Problem offensichtlich ueberfordert....
Problem: Es geht um das Modul cdc_acm.
ich kenne mich nicht sooo sehr damit aus, aber wäre es nicht am einfachsten, das Modul in Yast einzutragen? ->System -> Editor für sysconfig -> System -> Kernel -> Moduls loaded on boot. Warte aber damit noch bis ein kundiger "Kernelpapst" das bestätigen kann (oder auch nicht) Gruß Thomas
Vielen Dank im Voraus fuer Eure Hilfe, Karl.
-- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo, Am Don, 03 Sep 2009, Karl Weber schrieb:
Problem: Es geht um das Modul cdc_acm. Hier noch einmal zum Vegleich, was ich gestern gemacht habe, und was schief ging (das System war anschliessend nicht mehr bootfaehig....)
# cd /usr/src/linux-source-2.6.27.29-0.1-default
cd /lib/modules/`uname -r`/build/
# cp /boot/config-`uname -r` ./.config # make menuconfig
Dann im Konfigurationsmenue "Alternate Configuration File" ausgewaehlt und ".config" (die Voreinstellung) ausgewaehlt.
cp /boot/config-`uname -r` ./.config make prepare make oldconfig
Nach dem Editieren der Datei cdc_acm.c habe ich dann dann nur noch
# make modules
make drivers/usb/class/cdc-acm.ko
# make modules_install
cp drivers/usb/class/cdc-acm.ko \ /lib/modules/`uname -r`/kernel/drivers/usb/class/cdc-acm.ko depmod -a
Vielleicht laesst sich das alles vermeiden, wenn ich nur dieses eine Modul uebersetze und installiere?
s.o. HTH, -dnh -- Error: File not found -- search behind couch? (Y/N) -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo, Am Donnerstag, 3. September 2009 23:36 schrieb David Haller:
Am Don, 03 Sep 2009, Karl Weber schrieb:
Problem: Es geht um das Modul cdc_acm. Hier noch einmal zum Vegleich, was ich gestern gemacht habe, und was [...]
cd /lib/modules/`uname -r`/build/
[...]
cp /boot/config-`uname -r` ./.config make prepare make oldconfig
[...]
make drivers/usb/class/cdc-acm.ko
[...]
cp drivers/usb/class/cdc-acm.ko \ /lib/modules/`uname -r`/kernel/drivers/usb/class/cdc-acm.ko depmod -a
Zunaechst einmal vielen Dank fuer diese detaillierte Anleitung! Leider geht es immer noch nicht. Ich habe die kernel sourcen neu installiert und diese Anleitung exakt befolgt. Es gab keine einzige Fehlermeldung. Aufgefallen ist mir, dass cdc-acm.ko vorher eine Laenge von 42112 Bytes hatte. Nacher betrug die Laenge 292598 Bytes. In der Quelle cdc-acm.c hatte ich aber nur den Text { USB_DEVICE(0x0e8d, 0x3329), /* Qstarz BT-Q1000X */ .driver_info = NO_UNION_NORMAL, /* has no union descriptor */ }, hinzugefuegt. Nach dem erneuten starten des Rechners gab es dann folgendes Problem: # modprobe cdc_acm FATAL: Error inserting cdc_acm (/lib/modules/2.6.27.29-0.1-default/kernel/drivers/usb/class/cdc-acm.ko): Invalid module format Ich weiss nicht, was genau passiert, wenn ich den Logger ueber USB am Computer einstoepsele, aber im /var/log/messages sehe ich auch einen Unterschied: Messages vorher: Sep 4 19:51:45 dilbert2 kernel: usb 4-2: new full speed USB device using uhci_hcd and address 2 Sep 4 19:51:46 dilbert2 kernel: usb 4-2: configuration #1 chosen from 1 choice Sep 4 19:51:46 dilbert2 kernel: usb 4-2: New USB device found, idVendor=0e8d, idProduct=3329 Sep 4 19:51:46 dilbert2 kernel: usb 4-2: New USB device strings: Mfr=3, Product=4, SerialNumber=0 Sep 4 19:51:46 dilbert2 kernel: usb 4-2: Product: GPS Receiver Sep 4 19:51:46 dilbert2 kernel: usb 4-2: Manufacturer: MTK Sep 4 19:51:46 dilbert2 kernel: cdc_acm: Zero length descriptor references Sep 4 19:51:46 dilbert2 kernel: Sep 4 19:51:46 dilbert2 kernel: cdc_acm: probe of 4-2:1.1 failed with error -22 Sep 4 19:51:46 dilbert2 kernel: usbcore: registered new interface driver cdc_acm Sep 4 19:51:46 dilbert2 kernel: cdc_acm: v0.26:USB Abstract Control Model driver for USB modems and ISDN adapters Messages nachher: Sep 4 20:57:02 dilbert2 kernel: usb 2-2: new full speed USB device using uhci_hcd and address 4 Sep 4 20:57:02 dilbert2 kernel: usb 2-2: configuration #1 chosen from 1 choice Sep 4 20:57:02 dilbert2 kernel: cdc_acm: no symbol version for struct_module Sep 4 20:57:02 dilbert2 kernel: usb 2-2: New USB device found, idVendor=0e8d, idProduct=3329 Sep 4 20:57:02 dilbert2 kernel: usb 2-2: New USB device strings: Mfr=3, Product=4, SerialNumber=0 Sep 4 20:57:02 dilbert2 kernel: usb 2-2: Product: GPS Receiver Sep 4 20:57:02 dilbert2 kernel: usb 2-2: Manufacturer: MTK Sep 4 20:57:02 dilbert2 kernel: cdc_acm: no symbol version for struct_module Sep 4 20:57:02 dilbert2 kernel: cdc_acm: no symbol version for struct_module Sep 4 20:59:28 dilbert2 kernel: CE: hpet increasing min_delta_ns to 15000 nsec Sep 4 21:04:45 dilbert2 kernel: cdc_acm: no symbol version for struct_module Sep 4 21:08:10 dilbert2 kernel: cdc_acm: no symbol version for struct_module Viele Gruesse, Karl -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
On 04.09.2009, Karl Weber wrote:
Invalid module format
Ich habe mich nie mit den opensuse kernels auseinandergesetzt, weiss also auch nicht, was da wie in welchen Paketen installiert wird, du scheinst aber ein Problem mit den headerfiles zu haben, die scheinen nicht mit der Version deines aktuellen Kerns uebereinzustimmen. Mach mal ein "rpm -qa | grep kernel" und schaue, ob die installierten header mit deiner Version gleich sind. -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Am Samstag, 5. September 2009 10:28 schrieb Heinz Diehl:
On 04.09.2009, Karl Weber wrote:
Invalid module format
Ich habe mich nie mit den opensuse kernels auseinandergesetzt, weiss also auch nicht, was da wie in welchen Paketen installiert wird, du scheinst aber ein Problem mit den headerfiles zu haben, die scheinen nicht mit der Version deines aktuellen Kerns uebereinzustimmen.
Mach mal ein "rpm -qa | grep kernel" und schaue, ob die installierten header mit deiner Version gleich sind.
Ich suche seit gestern (i.e. seit Stunden) mit google nach Hilfe. Zu "Invalid module format" findet man sehr viel -- dass mir aber alles bisher nicht geholfen hat. Oft ist dort auch von falschen header-Versionen die Rede. An einer Stelle stand allerdings, dass die linux-headers nur zum Uebersetzen von nicht-kernel Programmen notwendig sind und dass die Kernel Quellen ihre eigenen Header haben.... Ich kann mir dazu kein Urteil erlauben (zumal sich die Hilfen auf diverse Distros beziehen). Hier nun endlich meine Pakete: dilbert2:/lib/modules/2.6.27.29-0.1-default/build # rpm -qa | grep kernel kernel-default-2.6.27.29-0.1.1 kernel-default-extra-2.6.27.29-0.1.1 kernel-default-base-2.6.27.29-0.1.1 kernel-source-2.6.27.29-0.1.1 kernel-syms-2.6.27.29-0.1.1 linux-kernel-headers-2.6.27-2.28 Die linux-headers haben in der Tat eine andere Version. Leider finde ich ueber die opensuse 11.1 Repositories keine andere: YaST zeigt mir zu den linux headers als einzig verfuegbare und installierte Version die 2.6.27-2.28 an.... Fehlt mir hier vielleicht noch ein Repository? /Karl -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo, Am Fre, 04 Sep 2009, Karl Weber schrieb:
Am Donnerstag, 3. September 2009 23:36 schrieb David Haller:
Am Don, 03 Sep 2009, Karl Weber schrieb:
Problem: Es geht um das Modul cdc_acm. Hier noch einmal zum Vegleich, was ich gestern gemacht habe, und was [...]
cd /lib/modules/`uname -r`/build/
[...]
cp /boot/config-`uname -r` ./.config make prepare make oldconfig
[...]
make drivers/usb/class/cdc-acm.ko
[...]
cp drivers/usb/class/cdc-acm.ko \ /lib/modules/`uname -r`/kernel/drivers/usb/class/cdc-acm.ko depmod -a
Ich habe die kernel sourcen neu installiert und diese Anleitung exakt befolgt. Es gab keine einzige Fehlermeldung.
Aufgefallen ist mir, dass cdc-acm.ko vorher eine Laenge von 42112 Bytes hatte. Nacher betrug die Laenge 292598 Bytes.
In der Quelle cdc-acm.c hatte ich aber nur den Text
{ USB_DEVICE(0x0e8d, 0x3329), /* Qstarz BT-Q1000X */ .driver_info = NO_UNION_NORMAL, /* has no union descriptor */ },
hinzugefuegt. [..] # modprobe cdc_acm FATAL: Error inserting cdc_acm (/lib/modules/2.6.27.29-0.1-default/kernel/drivers/usb/class/cdc-acm.ko): Invalid module format
Wo genau hast du das eingefügt? diff -u original_datei veränderte_datei Und bitte maile (mir per PM, wenn's mehr als ein paar Zeilen sind) die komplette Ausgabe von 'make ...'. Achso, ergänze vor dem 'make' noch: rm drivers/usb/class/cdc-acm.ko rm drivers/usb/class/*.o (ohne weitere Änderung an den Quellen wird make das Modul nicht neu bauen). -dnh -- Bisweilen glaubt man, auf dem Gipfel zu stehen und ins Tal zu blicken und in Wahrheit ist man nur die Laus auf dem Buckel eines Guerteltiers, das im Schlamm zu ertrinken droht. -- Das Internet Orakel -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo, Am Montag, 7. September 2009 03:59 schrieb David Haller:
Am Fre, 04 Sep 2009, Karl Weber schrieb:
Am Donnerstag, 3. September 2009 23:36 schrieb David Haller:
Am Don, 03 Sep 2009, Karl Weber schrieb:
Problem: Es geht um das Modul cdc_acm. Hier noch einmal zum Vegleich, was ich gestern gemacht habe, und was [...]
# modprobe cdc_acm FATAL: Error inserting cdc_acm (/lib/modules/2.6.27.29-0.1-default/kernel/drivers/usb/class/cdc-acm.ko): Invalid module format
Wo genau hast du das eingefügt?
Eingefuegt? Ich habe das Kommando manuell in der Shell ausgefuehrt.
diff -u original_datei veränderte_datei
Entfaellt.
Und bitte maile (mir per PM, wenn's mehr als ein paar Zeilen sind) die komplette Ausgabe von 'make ...'.
Nun, kann ich machen, fuer den vollen build: Ich habe mir die Zeit genommen, nicht nur alle Module sondern auch den Kernel neu zu kompilieren -- als neue lokale Version 2.6.27.29-0.1-xyz, statt 2.6.27.29-0.1-default. Und mit make oldconfig ganz ohne Aenderung des 2.6.27.29-0.1-default config (ausgenommen der Aenderung -default -> -xyz). Ich bin hier dem Linux Kernel Howto von Thomas Hertweck gefolgt. Neuer Kernel und neue Module zusammen kann ich booten und das System arbeitet sauber, mit und ohne dem Patch in cdc_acm. Soweit waere mein Problem also behoben. Neuer Kernel und neue Module zusammen funktionieren also. Erzeuge ich aber nur ein Modul, oder gar alle Module ohne den Kernel, funktioniert das nicht mit dem von SUSE ausgelieferten Kernel exakt derselben Version zusammen. Das erkennt man vermutlich auch schon an den Dateilaengen: Die neu gebauten Module (soweit ich nachgeschaut habe) sind laenger, der Kernel ist etwas kleiner... (Vgl. Faktor sieben im Modul cdc_acm, s.o.) Ich dachte immer, wenn ich die alte config unveraendert uebernehme, sollte ich dieselben (im Sinne von identisch) Module und denselben Kernel bauen, die SUSE ausliefert, aber dem scheint irgendwie nicht so zu sein. Vielleicht ist das ja trivial, fuer mich ist es unerwartet. /Karl -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo, Am Die, 08 Sep 2009, Karl Weber schrieb:
Am Montag, 7. September 2009 03:59 schrieb David Haller:
Am Fre, 04 Sep 2009, Karl Weber schrieb:
Am Donnerstag, 3. September 2009 23:36 schrieb David Haller:
Am Don, 03 Sep 2009, Karl Weber schrieb:
Problem: Es geht um das Modul cdc_acm. Hier noch einmal zum Vegleich, was ich gestern gemacht habe, und was [...]
# modprobe cdc_acm FATAL: Error inserting cdc_acm (/lib/modules/2.6.27.29-0.1-default/kernel/drivers/usb/class/cdc-acm.ko): Invalid module format
Wo genau hast du das eingefügt?
Eingefuegt? Ich habe das Kommando manuell in der Shell ausgefuehrt.
Den Patch.
diff -u original_datei veränderte_datei
Entfaellt.
Ich will wissen, wie du cdc_acm.c veränderst. -dnh -- Treffen sich zwei Viren im Outlook. Meint der eine "eigentlich bin ich ja Künstler..." -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo, ich bitte, die spaete Antwort zu entschuldigen... Am Dienstag, 8. September 2009 23:19 schrieb David Haller:
Eingefuegt? Ich habe das Kommando manuell in der Shell ausgefuehrt.
Den Patch.
diff -u original_datei veränderte_datei
Entfaellt.
Ich will wissen, wie du cdc_acm.c veränderst.
kw@dilbert2:~> diff -h ./cdc-acm.c /usr/src/linux-2.6.27.29-0.1/drivers/usb/class/cdc-acm.c 1346a1347,1349
{ USB_DEVICE(0x0e8d, 0x3329), /* MediaTek Inc GPS */ .driver_info = NO_UNION_NORMAL, /* has no union descriptor */ },
/Karl -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo, Am Mit, 16 Sep 2009, Karl Weber schrieb:
ich bitte, die spaete Antwort zu entschuldigen...
Das stört mich nicht ...
Am Dienstag, 8. September 2009 23:19 schrieb David Haller:
Eingefuegt? Ich habe das Kommando manuell in der Shell ausgefuehrt.
Den Patch.
diff -u original_datei veränderte_datei
Entfaellt.
Ich will wissen, wie du cdc_acm.c veränderst.
kw@dilbert2:~> diff -h ./cdc-acm.c /usr/src/linux-2.6.27.29-0.1/drivers/usb/class/cdc-acm.c 1346a1347,1349
{ USB_DEVICE(0x0e8d, 0x3329), /* MediaTek Inc GPS */ .driver_info = NO_UNION_NORMAL, /* has no union descriptor */ },
OK. Dank der Zeilenangaben konnte ich das prüfen. Aber sag mal, leidest du unter einer akuten selektiven Leseschwäche??? Wenn ich dich explizit um ein 'diff -u' bitte, d.h. ein diff _MIT KONTEXT_ ... Und das hier ...
Und bitte maile (mir per PM, wenn's mehr als ein paar Zeilen sind) die komplette Ausgabe von 'make ...'.
Achso, ergänze vor dem 'make' noch:
rm drivers/usb/class/cdc-acm.ko rm drivers/usb/class/*.o
hast du auch ignoriert. Naja, wenn du keine Hilfe willst ... Dein Problem. -dnh -- "Ich weiß, daß ich paranoid bin. Die Frage ist nur: 'Bin ich paranoid genug?'" -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Karl Weber wrote:
[...] Ich habe mir die Zeit genommen, nicht nur alle Module sondern auch den Kernel neu zu kompilieren -- als neue lokale Version 2.6.27.29-0.1-xyz, statt 2.6.27.29-0.1-default. Und mit make oldconfig ganz ohne Aenderung des 2.6.27.29-0.1-default config (ausgenommen der Aenderung -default -> -xyz). Ich bin hier dem Linux Kernel Howto von Thomas Hertweck gefolgt.
Neuer Kernel und neue Module zusammen kann ich booten und das System arbeitet sauber, mit und ohne dem Patch in cdc_acm. Soweit waere mein Problem also behoben.
Gut zu wissen, dass das Howto noch funktioniert und jemandem hilft ;-)
Neuer Kernel und neue Module zusammen funktionieren also. Erzeuge ich aber nur ein Modul, oder gar alle Module ohne den Kernel, funktioniert das nicht mit dem von SUSE ausgelieferten Kernel exakt derselben Version zusammen. Das erkennt man vermutlich auch schon an den Dateilaengen: Die neu gebauten Module (soweit ich nachgeschaut habe) sind laenger, der Kernel ist etwas kleiner... (Vgl. Faktor sieben im Modul cdc_acm, s.o.)
Ich dachte immer, wenn ich die alte config unveraendert uebernehme, sollte ich dieselben (im Sinne von identisch) Module und denselben Kernel bauen, die SUSE ausliefert, aber dem scheint irgendwie nicht so zu sein. Vielleicht ist das ja trivial, fuer mich ist es unerwartet.
Ich habe aus Zeitgruenden den Thread leider nicht ganz verfolgt, evtl. komme ich spaeter noch dazu, alles nachzulesen. Daher nur ein paar Kommentare: Wenn Du ein "make cloneconfig" absetzt oder die .config aus dem SuSE Build Verzeichnis verwendest, sollte die Kernelkonfiguration definitiv identisch sein. Du kannst jederzeit die aktuelle Konfiguration des laufenden Kernels auch direkt aus dem proc-Verzeichnis auslesen ueber "zcat /proc/config.gz". Du solltest in der Lage sein, ein einzelnes Kernel-Modul zu bauen, solange alle Abhaengigkeiten korrekt gehandhabt werden. Wenn Du mit einem "invalid module format" oder so endest, ging etwas schief beim Bau des Moduls bzw. es gibt Inkonsistenten auf Deinem System (kann z.B. passieren, wenn die header nichts stimmen, oder Du eine andere GCC Version verwendest, oder schlicht der Bau des Modules nicht korrekt angestossen wurde, usw). Ich werde vielleicht gegen Ende der Woche Zeit finden, Dein Vorgehen mal genauer anzuschauen, kann aber nichts versprechen. Gruesse aus London, Thomas -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Thomas Hertweck schrieb:
Karl Weber wrote:
[...] Ich habe mir die Zeit genommen, nicht nur alle Module sondern auch den Kernel neu zu kompilieren -- als neue lokale Version 2.6.27.29-0.1-xyz, statt 2.6.27.29-0.1-default. Und mit make oldconfig ganz ohne Aenderung des 2.6.27.29-0.1-default config (ausgenommen der Aenderung -default -> -xyz). Ich bin hier dem Linux Kernel Howto von Thomas Hertweck gefolgt.
Neuer Kernel und neue Module zusammen kann ich booten und das System arbeitet sauber, mit und ohne dem Patch in cdc_acm. Soweit waere mein Problem also behoben.
Gut zu wissen, dass das Howto noch funktioniert und jemandem hilft ;-)
Neuer Kernel und neue Module zusammen funktionieren also. Erzeuge ich aber nur ein Modul, oder gar alle Module ohne den Kernel, funktioniert das nicht mit dem von SUSE ausgelieferten Kernel exakt derselben Version zusammen. Das erkennt man vermutlich auch schon an den Dateilaengen: Die neu gebauten Module (soweit ich nachgeschaut habe) sind laenger, der Kernel ist etwas kleiner... (Vgl. Faktor sieben im Modul cdc_acm, s.o.)
Ich dachte immer, wenn ich die alte config unveraendert uebernehme, sollte ich dieselben (im Sinne von identisch) Module und denselben Kernel bauen, die SUSE ausliefert, aber dem scheint irgendwie nicht so zu sein. Vielleicht ist das ja trivial, fuer mich ist es unerwartet.
Ich habe aus Zeitgruenden den Thread leider nicht ganz verfolgt, evtl. komme ich spaeter noch dazu, alles nachzulesen. Daher nur ein paar Kommentare: Wenn Du ein "make cloneconfig" absetzt oder die .config aus dem SuSE Build Verzeichnis verwendest, sollte die Kernelkonfiguration definitiv identisch sein. Du kannst jederzeit die aktuelle Konfiguration des laufenden Kernels auch direkt aus dem proc-Verzeichnis auslesen ueber "zcat /proc/config.gz".
... oder einfach "make cloneconfig" statt "make oldconfig"
Du solltest in der Lage sein, ein einzelnes Kernel-Modul zu bauen, solange alle Abhaengigkeiten korrekt gehandhabt werden. Wenn Du mit einem "invalid module format" oder so endest, ging etwas schief beim Bau des Moduls bzw. es gibt Inkonsistenten auf Deinem System (kann z.B. passieren, wenn die header nichts stimmen, oder Du eine andere GCC Version verwendest, oder schlicht der Bau des Modules nicht korrekt angestossen wurde, usw).
Alles obige stimmt, aber ab openSUSE 11.1 (bzw. der mitgelieferten Kernelversion) *muss* auch beim Compilieren des Kernelmoduls auch die "Symbol Versions"-Datei im Kernel Source Tree verfügbar sein. Bis einschließlich openSUSE 11.0 wurde sonst während des Compilierens nur eine Warnung angezeigt: WARNING: Symbol version dump ... is missing Das Modul liess sich jedoch trotzdem laden. Unter openSUSE 11.1 lassen sich solche Module nicht mehr laden, sondern es wird ebenfalls der Fehler "Invalid module format" ausgegeben. Die "Symbol Versions"-Datei kann wie folgt in den Source Tree kopiert werden: cd /lib/modules/`uname -r`/build cp /boot/symvers-`uname -r`.gz Module.symvers.gz gunzip -v Module.symvers.gz Vielleicht gibt es noch eine elegantere Methode, aber ich kenne nur diese. Es gibt auch noch eine weitere Falle: Auf einigen Linux-Systemen wird sogar überprüft, ob ein Kernel-Modul mit der gleichen gcc-Version compiliert wurde wie der laufende Kernel. Wenn das nicht der Fall ist, lässt sich das compilierte Modul nicht laden. Den Grund sieht man danach in der Ausgabe von dmesg. Dort steht dann in etwa sinngemäß: Das Modul wurde mit gcc v4.3 compiliert, der Kernel jedoch mit gcc v4.2. Es können mehrere gcc-Versionen parallel installiert werden. Mit dem folgenden Befehl kann man sehen, welche Versionen aktuell installiert sind: ls -l /usr/bin/gcc* lrwxrwxrwx 1 root root 7 Sep 14 09:59 /usr/bin/gcc -> gcc-4.3 -rwxr-xr-x 1 root root 238848 Dec 3 2008 /usr/bin/gcc-4.3 Im Fall oben ist das lediglich gcc-4.3. Falls mehrere vorhanden sind, kann man entweder den oben gezeigten Link ändern oder die gewünschte Compilerversion angeben, z.B. CC=gcc-4.3 make ... Martin -- Martin Burnicki Meinberg Funkuhren Bad Pyrmont Germany -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Martin Burnicki wrote:
Thomas Hertweck schrieb:
[...] Ich habe aus Zeitgruenden den Thread leider nicht ganz verfolgt, evtl. komme ich spaeter noch dazu, alles nachzulesen. Daher nur ein paar Kommentare: Wenn Du ein "make cloneconfig" absetzt oder die .config aus ^^^^^^^^^^^^^^^^^^ dem SuSE Build Verzeichnis verwendest, sollte die Kernelkonfiguration definitiv identisch sein. Du kannst jederzeit die aktuelle Konfiguration des laufenden Kernels auch direkt aus dem proc-Verzeichnis auslesen ueber "zcat /proc/config.gz".
... oder einfach "make cloneconfig" statt "make oldconfig"
Wo liegt der Unterschied zu dem was ich geschrieben habe?
[...] Alles obige stimmt, aber ab openSUSE 11.1 (bzw. der mitgelieferten Kernelversion) *muss* auch beim Compilieren des Kernelmoduls auch die "Symbol Versions"-Datei im Kernel Source Tree verfügbar sein.
Das ist Unsinn. Der Source Tree sollte absolut rein sein. Cheers, Thomas -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
On 03.09.2009, Karl Weber wrote:
# make menuconfig
Ein "make oldconfig" waere evtl. angebracht gewesen, wenn du nur den Standard-Kernel benutzt.
Vielleicht laesst sich das alles vermeiden, wenn ich nur dieses eine Modul uebersetze und installiere?
In's Modul-Verzeichnis wechseln und "make <modulname>. Oder halt direkt kompilieren, z.B. gcc -DMODULE -D__KERNEL__ -Wall -Wstrict-prototypes -O2 -c module.c -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
participants (6)
-
David Haller
-
Heinz Diehl
-
Karl Weber
-
Martin Burnicki
-
Thomas Hertweck
-
Thomas Schirrmacher