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