ich hab eine Frage zum Bauen von Kernel (-Modulen). Ich wollte ein paar Optionen vom SuSE Kernel ändern (10.3, 2.6.22.19-0.2-bigsmp) und den Kernel neu bauen. Dabei ist mir aufgefallen, dass /lib/modules/<version>/kernel auf einmal wesentlich größer geworden ist. Zunächst hatte ich meine Änderungen der .config in Verdacht. Um dies auszuschließen, habe ich die orginal .config genommen, den Kernel nochmals gebaut und nochmal verglichen. Wieder waren die Module um ca. Faktor 7 größer. Folgendes habe ich gemacht:
<orginal Kernel läuft>
/lib/modules/2.6.22.19-0.2-bigsmp/kernel # du -sh .
82M .
rm -rf /lib/modules/2.6.22.19-0.2-bigsmp/
cd /usr/src/linux-2.6.22.19-0.2
zcat /proc/config.gz > .config
make oldconfig
make -j5
make modules_install
make install
Ergebnis:
/lib/modules/2.6.22.19-0.2-bigsmp/kernel # du -sh .
558M .
Warum? Welche Optionen wurden für den orginal Kernel beim Compilieren verwendet, dass die Module so schön klein sind?
Die zwei Befehle mit zcat und “make oldconfig” kannst Du durch “make cloneconfig” abkürzen.
Bist Du sicher, dass die Module wirklich größer sind? Kann es nicht sein, dass einfach mehr Module gebaut wurden?
Die Optionen kannst Du im Source-RPM des Kernels nachschauen. Ich hab auf der 11.3 nachgesehen und da ist eigentlich nichts derartiges gesetzt. Es ist anscheinend auch keine derartige Option verfügbar. Eventuell war bei der 10.3 da noch etwas anders…
Ja, ich habe die Anzahl der Dateien überprüft bzw. auch die Dateinamen. Es waren keine unterschiede, außer dass die Module wirklich größer sind. So war z.B. rd.ko vohrer 26 KB und ist jetzt 150 KB.
Dafür muss es doch einen Grund geben. Ich weiß ja, dass nie exakt der gleiche Code generiert wird, aber so krasse Unterschiede. Als Compiler habe ich den von SuSE durch Pattern “Kernel-Development” installierten verwendet.
OK, so wie es aussieht, wird der Befehl “strip” wirklich für jedes Modul einzeln im spec-File ausgeführt. Ich hatte dauernd nach einer Option o.ä. gesucht. Deswegen meiner Verwirrung zuvor.
Ich hab das strip ohne -d bei einem Modul probiert, dass in der Initrd ist,
und mkinitrd meckert beim neu erstellen der RamDisk in dem Fall:
WARNING: Couldn’t find symtab and strtab in module <…>
Ist -d nicht das gleiche? Hab gerade nur eine Debian man-page hier, aber da steht:
-s
--strip-all
Remove all symbols.
-g
-S
-d
--strip-debug
Remove debugging symbols only.
--strip-unneeded
Remove all symbols that are not needed for relocation processing.
Wie auch immer: Vielen Dank für den Tip, --strip-debug hat den gewünschten Erfolg gebracht (563 MB → 83 MB) und die Kiste bootet noch. mkinitrd hat auch problemlos funktioniert