Ten poradnik ma na celu wyjaśnienie, jak samodzielnie skompilować kernela. Będę posługiwał się nieistniejącą (jeszcze?) wersją 31.3.37. Przystosowane pod Debiana lub Ubuntu, ale po zmianie sposobu budowania powinno działać na każdym systemie.
Ściągamy źródła[]
Najnowszą wersję możemy ściągnąć ze strony http://kernel.org/ . Po ściągnięciu kopiujemy ją do katalogu /usr/src (albo innego) i rozpakowujemy poleceniem:
$ tar -xjf linux-31.3.37.tar.bz2
Następnie przechodzimy do katalogu wypakowanego kernela:
$ cd linux-31.3.37
Instalacja pakietów[]
Teraz musimy zainstalować pakiety o nazwach kernel-package
i fakeroot
.
Narzędzie konfigurujące[]
Tryb graficzny - xconfig[]
Do użycia tego trybu będzie potrzebny pakiet libqt3-headers
. Uruchamiamy go wpisując polecenie:
$ make xconfig
[]
Do użycia tego trybu będzie potrzebny pakiet ncurses-dev
. Uruchamiamy go wpisując polecenie:
$ make menuconfig
Konfiguracja[]
Teraz czas na najtrudniejszą część zadania. Korzystając z wybranego narzędzia konfigurującego, dokonujemy wyboru modułów, które mają zostać zainstalowane. Na początek warto wczytać aktualną konfigurację, w przypadku xconfig'a dokonujemy tego poleceniem File -> Load. Wybieramy plik /boot/config-aktualna.wersja.kernela
.
Teraz przeglądamy wszystkie interesujące nas kategorie i wyłączamy niepotrzebne naszemu sprzętowi moduły. Aby dowiedzieć się, jakie są potrzebne, możemy skorzystać z okienkowego menedżera urządzeń (gnome-device-manager
) lub wydać następujące polecenie:
$ find /sys/bus -type d -exec ls -ld {} \; | perl -ne "m/(module|drivers)\/([^ \/]+)/; print \$2.\"\\n\"" | sort -u
Uwaga! Jeśli nie jesteś pewien, czy wyłączyć jakiś moduł, zostaw włączony!
Warto zajrzeć również do następujących opcji:
- General setup -> Optimize for size (wyłączyć)
- Processor type and features -> Processor family (wybrać odpowiedni - czasem informacje można zdobyć z
/proc/cpuinfo
) - File systems (wyłączyć bardzo niepopularne i nieużywane systemy plików)
Po odpowiednim skonfigurowaniu zapisujemy konfigurację w domyślnym miejscu (dla xconfig'a - naciskamy Ctrl+S) i zamykamy konfiguratora.
Budowanie[]
Wydajemy polecenia:
make dep make-kpkg clean fakeroot make-kpkg --revision=custom.1.0 kernel_image
Mała dygresja
To ostatnie najlepiej wydać na screen'ie a później wyświetlić na tty - na pełnym ekranie ciekawie wygląda i można poszpanować przed rodziną ;) Rada: Jeśli zacina się muzyka, zmniejszamy nice odtwarzacza do najmniejszego. |
Budowanie powinno przebiegać bez błędów (mogą być ostrzeżenia). Jeśli występują błędy to znaczy, że albo mamy rozwalony/przestarzały GCC, albo wybraliśmy jakieś podejrzane moduły. W takim przypadku piszemy:
$ make clean
a następnie znowu uruchamiamy konfiguratora (np. make xconfig
) i wywalamy to co powoduje błędy.
Instalacja[]
Przechodzimy do katalogu nadrzędnego, w którym znalazł się pakiet, i wydajemy polecenie:
# dpkg -i kernel-image-31.3.37_custom.1.0_i386.deb
Radzę zachować kopię konfiguracji gruba (/etc/grub.d ), bo po restarcie może się okazać, że z pięknego trybu tekstowego zrobił się ohydny graficzny. ("piękny", "ohydny" - opinia subiektywna autora) |
Musimy jeszcze stworzyć initrd. W tym celu wydajemy polecenie:
# mkinitramfs -o /boot/initrd.img-31.3.37 -v 31.3.37
Ważne jest, aby wybrać nową wersję kernela, a nie aktualną. Do tego służy przełącznik -v.
Teraz kompilujemy plik konfiguracyjny GRUB-a:
# grub-mkconfig > /boot/grub/grub.cfg
Zakończenie[]
Pozostaje tylko restart:
# init 6
W przypadku błędów przy uruchamianiu resetujemy i wybieramy starsze jądro - zawsze jest taka możliwość.
Bibliografia[]
Debian-Kernel-Compile-Howto autorstwa Falko Timme