37-5 Kompilacja jądra sposobem Debiana
Do kompilacji jądra z wykorzystaniem udogodnień znajdujących się w Debianie potrzebne są następujące pakiety: binutils , bzip2 , fileutils , libc-dev , gcc , make , libncurses-dev , kernel-package , bin86 , fakeroot .
37-5.1 Konfiguracja jądra
Najpierw wypakowujemy źródła jądra do jednej z poniższych
lokalizacji:
/tmp/linux
/var/tmp/linux
/usr/local/src/<gdziekolwiek>
/usr/src/linux-x.x.x
Następnie konfigurujemy jądro za pomocą
komendy:
make-kpkg -config <metoda>
, gdzie
metoda może przyjmować następujące wartości:
oldconfig , config , menuconfig ,
xconfig lub w skrócie: old , menu ,
x .
37-5.2 Kompilacja jądra
Po skonfigurowaniu jądra czyścimy drzewo katalogów ze źródłem i
parametry pakietu kernel-package . W tym celu wydajemy
polecenie:
make-kpkg clean
Teraz budujemy pakiet
.deb z nowym jądrem. Robimy to w następujący sposób:
make-kpkg -revision <nasza_nazwa> kernel_image
gdzie
<nasza_nazwa> jest symbolem oznaczającym naszą wersję
jądra. Musi on zawierać litery i przynajmniej jedną cyfrę oraz nie
może zawierać znaku '_' . Jako łączników można użyć znaków
'.' , '+' i ':' , np.:
make-kpkg -revision SuperKernel1.0+sound kernel_image
UWAGA: Do budowania pakietu możemy użyć konta dowolnego
użytkownika, jeśli zastosujemy program fakeroot :
fakeroot make-kpkg -revision <nasza_nazwa> kernel_image
37-5.3 Instalacja jądra
Jeśli budowa pakietu przebiegła bezbłędnie, to w katalogu
nadrzędnym powinien już czekać gotowy .deb . Instalujemy go
w dokładnie taki sam sposób, jak każdą inną paczkę:
dpkg -i kernel-image-2.x.x_<nasza_nazwa>_i386.deb
UWAGA: Jeśli po raz kolejny budujemy pakiet z tych samych
źródeł jądra, to przed jego instalacją powinniśmy przenieść stare
moduły w inne miejsce, np.:
mv /lib/modules/2.x.x /lib/modules/2.x.x.old
Polecenie
instalujące pakiet oprócz samego jądra zainstaluje także inne
potrzebne pliki ( /boot/System.map-2.x.x i
/boot/config-2.x.x ) oraz tak zmodyfikuje program ładujący
jądro (LILO), aby można je było uruchomić po zrestartowaniu
komputera. Standardowe dowiązania symboliczne utworzone przez
program dpkg są następujące:
- /vmlinuz.old - dla starego jądra,
- /vmlinuz - dla nowego jądra.
37-5.4 Inne możliwości make-kpkg
Program make-kpkg to bardzo pożyteczne narzędzie, które
umożliwia nam również tworzenie podwersji jądra, nakładanie "łatek",
budowanie modułów, dodawanie do jądra wsparcia dla initrd i wiele
innych.
37-5.4.1 Tworzenie podwersji jądra
Dzięki tej funkcjonalności programu make-kpkg możemy w
łatwy sposób tworzyć paczki z tą samą wersją jądra, lecz w różnej
konfiguracji.
Załóżmy, że chcemy dodać do naszego jądra obsługę dźwięku, która
standardowo jest wyłączona w "Woodim". W tym celu dokonujemy
odpowiednich modyfikacji w konfiguracji jądra i kompilujemy je w
sposób pokazany poniżej:
make-kpkg -config menu -revision SuperKernel1.0+sound -append-to-version -sound \
kernel_imageW wyniku działania polecenia otrzymamy pakiet
kernel-image-2.x.x-sound_SuperKernel1.0+sound_i386.deb .
Nie musimy się zbytnio martwić o moduły do tego jądra, gdyż po
instalacji pakietu zostaną one umieszczone w katalogu
/lib/modules/2.x.x.-sound .
37-5.4.2 Nakładanie "łatek" na jądro
Powiedzmy, że znudziło się nam już standardowe logo Linuxa
wyświetlane w czasie startu systemu przez framebuffer. Możemy je
zmienić modyfikując odpowiednio źródła jądra. W tym celu
wykorzystamy dostępny w dystrybucji pakiet
kernel-patch-debianlogo . Instalujemy go w typowy dla
Debiana sposób:
apt-get install kernel-patch-debianlogo
Po
zainstalowaniu pakietu odpowiednie "łaty" zostaną umieszczone w
katalogu /usr/src/kernel-patches/all/debianlogo .
Żeby "połatanie" jądra się udało musimy wcześniej wyeksportować
zmienną środowiskową PATCH_THE_KERNEL :
export PATCH_THE_KERNEL=YES
Teraz możemy
przystąpić do budowy jądra i jego automatycznego "połatania":
make-kpkg -config menu -revision SuperKernel1.0+logo -append-to-version -logo \
-added-patches debianlogo kernel_imagePo zakończeniu
działania polecenia otrzymamy pakiet
kernel-image-2.x.x-logo_SuperKernel1.0+logo_i386.deb .
37-5.4.3 Budowanie modułów
Program make-kpkg możemy wykorzystać nie tylko do
budowania jądra, ale także modułów.
Załóżmy, że mamy notebooka, dodaliśmy do jądra obsługę dźwięku, a
teraz chcemy zbudować moduły do obsługi kart sieciowych PCMCIA.
Instalujemy w tym celu pakiet pcmcia-source . Po jego
zainstalowaniu źródła znajdą się w katalogu
/usr/src/modules/pcmcia-cs .
Teraz przystępujemy do budowy modułów używając komendy:
make-kpkg -revision SuperKernel1.0+sound -append-to-version -sound \
-added-modules pcmcia-cs modules_imagePo zakończeniu
działania komendy otrzymamy pakiet
pcmcia-modules-2.x.x-sound_3.1.33+SuperKernel1.0+sound_i386.deb .
UWAGA: Jeśli do budowy jądra nie używaliśmy opcji
-append-to-version , to do zbudowania modułów także nie
musimy jej używać.
37-5.4.4 Dodanie do jądra wsparcia dla initrd
Initrd (ang.
Initial RAM disk) to RAM dysk, który jest montowany przez program
uruchamiający Linuxa (np. Loadlin lub LILO) jako partycja /
przed zamontowaniem właściwej głównej partycji. Initrd jest
najczęściej używany po to, aby załadować moduły potrzebne do
podmontowania "prawdziwej" partycji / . Aby dodać obsługę
initrd przez jądro musimy w czasie jego konfiguracji zaznaczyć
wkompilowanie na stałe opcji RAM disk support
( CONFIG_BLK_DEV_RAM ) i Initial RAM disk (initrd)
support ( CONFIG_BLK_DEV_INITRD ) w sekcji Block
Devices oraz opcji ROM filesystem support
( CONFIG_ROMFS_FS ) w sekcji Filesystems . Więcej
informacji na temat initrd możemy znaleźć w pliku
Documentation/initrd.txt znajdującym się w źródłach jądra.
Do pliku /etc/kernel-img.conf dopisujemy linijkę:
do_initrd = Yes
Do wywołania make-kpkg
dodajemy jeszcze jedną opcję: make-kpkg -revision SuperKernel1.0+initrd -append-to-version -initrd \
-initrd kernel_imagePo zainstalowaniu pakietu powiniśmy
jeszcze sprawdzić czy dowiązanie symboliczne /initrd.img
wskazuje na /boot/initrd.img-2.x.x-initrd .