Wenn ich meinen eigenen Kernel kompiliere, mache ich im Grunde Folgendes:
Ich lade die Quellen von www.kernel.org herunter und dekomprimiere sie.
Ich kopiere meine vorherigen
.config
in die Quellen undmake menuconfig
achte auf die neuen Optionen und ändere die Konfiguration entsprechend der neuen Richtlinie des Kernels.Dann kompiliere ich es:
make -j 4
Schließlich installiere ich es:
su -c 'make modules_install && make install'
.Nach ein paar Tests entferne ich den alten Kernel (von
/boot
und/lib/modules
) und starte ihn vollständig (dieser letzte Schritt hat mir mehrmals das Leben gerettet! Es ist ein Pro-Tipp !).
Das Problem ist, dass ich immer einen bekomme, /boot/initrd.img-4.x.x
der im Vergleich zu denen aus meiner Distribution riesig ist. Hier der Inhalt meines aktuellen /boot/
Verzeichnisses als Beispiel:
# ls -alFh
total 243M
drwxr-xr-x 5 root root 4.0K Mar 16 21:26 ./
drwxr-xr-x 25 root root 4.0K Feb 25 09:28 ../
-rw-r--r-- 1 root root 2.9M Mar 9 07:39 System.map-4.4.0-1-amd64
-rw-r--r-- 1 root root 3.1M Mar 11 22:30 System.map-4.4.5
-rw-r--r-- 1 root root 3.2M Mar 16 21:26 System.map-4.5.0
-rw-r--r-- 1 root root 170K Mar 9 07:39 config-4.4.0-1-amd64
-rw-r--r-- 1 root root 124K Mar 11 22:30 config-4.4.5
-rw-r--r-- 1 root root 126K Mar 16 21:26 config-4.5.0
drwxr-xr-x 5 root root 512 Jan 1 1970 efi/
drwxr-xr-x 5 root root 4.0K Mar 16 21:27 grub/
-rw-r--r-- 1 root root 19M Mar 10 22:01 initrd.img-4.4.0-1-amd64
-rw-r--r-- 1 root root 101M Mar 12 13:59 initrd.img-4.4.5
-rw-r--r-- 1 root root 103M Mar 16 21:26 initrd.img-4.5.0
drwx------ 2 root root 16K Apr 8 2014 lost+found/
-rw-r--r-- 1 root root 3.5M Mar 9 07:30 vmlinuz-4.4.0-1-amd64
-rw-r--r-- 1 root root 4.1M Mar 11 22:30 vmlinuz-4.4.5
-rw-r--r-- 1 root root 4.1M Mar 16 21:26 vmlinuz-4.5.0
Wie Sie vielleicht bemerkt haben, ist die Größe meiner initrd.img
Dateien etwa zehnmal größer als die meiner Distribution.
Mache ich also etwas falsch, wenn ich meinen Kernel kompiliere? Und wie kann ich meine Größe reduzieren initrd.img
?
quelle
Antworten:
Dies liegt daran, dass nicht alle Kernelmodule entfernt werden. Sie müssen es auf seine Größe verkleinern.
Verwenden Sie diesen Befehl:
Dadurch wird die Größe drastisch reduziert. Nachdem Sie den obigen Befehl ausgeführt haben, können Sie mit dem Erstellen von initramfs / initrd fortfahren
quelle
initrd
Bildes durch 10 teilen würde ... Vielen Dank, es hat gut funktioniert!{}
und sein+
.Ich habe mich eingehend mit dem Problem befasst, um herauszufinden, wie die Module am besten entfernt werden können. Hier ist der vollständige Prozess, den ich gefunden habe (immer noch hat SHW die Antwort geliefert, aber der Prozess, den ich gefunden habe, ist irgendwie standardisierter):
Laden Sie die Quellen herunter
www.kernel.org
und dekomprimieren Sie sie.Kopieren Sie Ihre vorherige Version
.config
in die Quellen undmake menuconfig
achten Sie auf die neuen Optionen und ändern Sie die Konfiguration entsprechend der neuen Kernelrichtlinie.Dann kompiliere es:
Zum Schluss installieren Sie es:
Entfernen Sie nach einigen Tests den alten Kernel aus den Verzeichnissen
/boot
und/lib/modules
.Die
INSTALL_MOD_STRIP
bei der Einstellung auf1
eine hinzuzufügen ,strip --strip-debug
wenn der Installation des Moduls, was genug ist , um die Größe drastisch zu reduzieren.Siehe: INSTALL_MOD_STRIP in
Documentation/kbuild/kbuild.txt
.quelle
Sie können auch die Konfiguration von ändern
initramfs.conf
Finden Sie die Datei unter
/etc/initramfs-tools/initramfs.conf
Es gibt eine Einstellung, die sagt
MODULES=most
dies die meisten Module Ihres initrd-Images umfasst.Ändern Sie es zu
MODULES=dep
dies, damit der initramfs-Generator errät, welche Module einbezogen werden sollen.Schauen Sie sich hier die Manpage für initramfs.conf an .
HINWEIS 1: Nachdem ich die obigen Schritte ausgeführt habe, hat sich die Größe meines initramfs-Image von 282 MB auf 99 MB verringert (dies ist immer noch groß genug, aber eine erhebliche Verbesserung).
HINWEIS 2: Ich habe auch versucht, die Kernel-Module von zu entfernen
/lib/modules/<kernel version>
. Die von den Betriebssystemaktualisierungen gelieferten Module werden entfernt (Größe = 211 MB), und daher beträgt das entsprechende intiramfs-Image etwa 15 MB. Nach dem Entfernen der Module des von mir kompilierten Vanilla-Kernels betrug die Größe des Ordners 185 MB und das Intramfs-Image 16 MB. Nach allen Optimierungen ist die Größe von 282 MB auf 16 MB gesunken !! Verwenden Sie zum Abisolieren diesen CodeErsetzen
<kernel_release>
Sie im obigen Code die Kernel-Version, von der Sie die Module entfernen möchten.Weitere Diskussionen finden Sie unter diesem Link .
Der obige Code muss als
sudo
oder ausgeführt werdensu
quelle