Kiedy kompiluję własne jądro, zasadniczo robię to:
Pobieram źródła ze strony www.kernel.org i rozpakowuję je.
Kopiuję moje poprzednie
.config
do źródeł imake menuconfig
sprawdzam nowe opcje i modyfikuję konfigurację zgodnie z nową polityką jądra.Następnie kompiluję:
make -j 4
Wreszcie mogę zainstalować go:
su -c 'make modules_install && make install'
.Po kilku testach usuwam stare jądro (z
/boot
i/lib/modules
) i uruchamiam w pełni z nowym (ten ostatni krok kilkakrotnie uratował mi życie! To wskazówka !).
Problem polega na tym, że zawsze otrzymuję coś, /boot/initrd.img-4.x.x
co jest ogromne w porównaniu do tych z mojej dystrybucji. Oto treść mojego bieżącego /boot/
katalogu jako przykład:
# 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
Jak zapewne zauważyłeś, rozmiar moich initrd.img
plików jest około 10 razy większy niż tych z mojej dystrybucji.
Czy robię coś złego podczas kompilacji jądra? I jak mogę zmniejszyć swój rozmiar initrd.img
?
źródło
Odpowiedzi:
Jest tak, ponieważ wszystkie moduły jądra nie są usuwane. Musisz go rozebrać do mniejszego rozmiaru.
Użyj tego polecenia:
To drastycznie zmniejszy rozmiar. Po wykonaniu powyższej komendy możesz przystąpić do tworzenia initramfs / initrd
źródło
initrd
obrazu przez 10 ... Bardzo dziękuję, działało dobrze!{}
i+
.Przeprowadziłem dodatkowe badania problemu, aby dowiedzieć się, jaki jest najlepszy sposób na usunięcie modułów i oto pełny proces, który znalazłem (nadal SHW przyniósł odpowiedź, ale proces, który znalazłem, jest w jakiś sposób bardziej ustandaryzowany):
Pobierz źródła
www.kernel.org
i rozpakuj je.Skopiuj poprzednie
.config
do źródeł i zróbmake menuconfig
obserwację nowych opcji i zmodyfikuj konfigurację zgodnie z nową polityką jądra.Następnie skompiluj to:
Na koniec zainstaluj:
Po kilku testach, usunąć stary kernel od
/boot
i/lib/modules
katalogów.INSTALL_MOD_STRIP
Gdy ustawiono1
dodaćstrip --strip-debug
podczas instalowania modułu, który jest na tyle, aby zmniejszyć rozmiar drastycznie.Zobacz: INSTALL_MOD_STRIP w
Documentation/kbuild/kbuild.txt
.źródło
Możesz także zmienić konfigurację swojego
initramfs.conf
Znajdź plik na
/etc/initramfs-tools/initramfs.conf
Jest ustawienie, które mówi, że
MODULES=most
obejmuje to większość modułów obrazu twojego initrd.Zmień to na
MODULES=dep
to, że generator initramfs zgaduje, które moduły należy uwzględnić.Sprawdź stronę podręcznika dla initramfs.conf tutaj .
UWAGA 1: Po wykonaniu powyższych kroków rozmiar mojego obrazu initramfs zmniejszony z 282 MB do 99 MB. (Jest to wciąż wystarczająco duży, ale jest to znacząca poprawa)
UWAGA 2: Próbowałem również usunąć moduły jądra z
/lib/modules/<kernel version>
. Moduły dostarczane przez aktualizacje systemu operacyjnego są usuwane (rozmiar = 211 MB), a zatem odpowiedni obraz intiramfs ma około 15 MB. Po usunięciu modułów jądra wanilii, które sam skompilowałem, rozmiar folderu wynosił 185 MB, a obraz intramfs 16 MB. Po wszystkich optymalizacjach rozmiar zmniejszył się z 282 MB do 16 MB !! Do usuwania użyj tego koduW powyższym kodzie zastąp
<kernel_release>
wersję jądra, z której chcesz usunąć moduły.Aby uzyskać więcej dyskusji, zobacz ten link .
Powyższy kod należy uruchomić jako
sudo
lubsu
źródło