Po co kompilujemy własną wersję jądra
- W standardowym jajku nie mam tego co potrzebuje do działania (obsługi) sprzętu itp.
- Potrzebuję jakiejś większej funkcjonalności po nałożeniu swoich łatek.
- Chcę się nauczyć kompilować jajo.
Teraz to już nie te czasy kiedy trzeba było walczyć o każdy kilobajt miejsca w pamięci albo na dysku! Dyski są wielkie, pamięci też. A parę kilobajtów więcej, przedkładając na czas włożony w kompilację, w ogóle się nie przelicza.
Według mnie kompilacja jaja dla idei (po to aby uruchamiać system na własnej wersji jądra albo mieć wyższy numerek jaja) jest stratą czasu, który można poświęcić na coś innego.
Tak, trzeba poznać proces kompilacji, tego nie ukrywam.
Kompilacja przeprowadzona na Debianie Wheezy, który jest jeszcze w tej chwili wersją testową
Na początek instalujemy potrzebne paczki aby skompilować i zbudować paczkę z jądrem.
Kod: Zaznacz cały
apt-get update
apt-get install kernel-package build-essential libncurses5-dev zlib1g-dev
apt-get install fakeroot wget bzip2 initramfs-tools cramfsprogs
Następnie ściągamy najnowszego źródła jądra ze strony [url]http://www.kernel.org\\[/url]
Na dzień dzisiejszy jest to jądro w wersji 3.2.7 (25.2.2012)
Kod: Zaznacz cały
wget [url]http://www.kernel.org/pub/linux/kernel/v3.0/linux-3.2.7.tar.bz2[/url]
Kod: Zaznacz cały
cp linux-3.2.7.tar.bz2 /usr/src
Kod: Zaznacz cały
tar xjf linux-3.2.7.tar.bz2
Tworzymy dowiązanie symboliczne wskazujące na katalog linux-3.2.7
Kod: Zaznacz cały
ln -s /usr/src/ linux-3.2.7 /usr/src/linux
Jeśli chcemy skorzystać ze źródeł wersji jadra, która jest w repozytorium instalujemy je poleceniem:
Kod: Zaznacz cały
apt-get install linux-source-3.2
Sprawdzamy, czy jesteśmy w katalogu /usr/src/linux, po czym przechodzimy do konfiguracji jądra.
Dobrze jest wczytać poprzedni konfig jaja, a potem dopiero od tego zacząć konfigurować, więc wydajemy polecenie:
Kod: Zaznacz cały
make oldconfig && make menuconfig
Ewentualnie jeśli mamy swój konfig robimy tylko polecenie:
Kod: Zaznacz cały
make menuconfig
Jeśli czujemy się na tyle silni, że potrafimy samemu skonfigurować to nie wczytujemy nic i nie wykonujemy polecenia make oldconfig przed make menuconfig.
Kod: Zaznacz cały
make menuconfig
Edytujemy ustawienia według potrzeb. Po zakończeniu czas na zapisanie konfiguracji. Wybieramy:
Kod: Zaznacz cały
**Exit**
Kod: Zaznacz cały
**YES**
Kod: Zaznacz cały
**Do you wish to save your new kernel configuration?**
Kod: Zaznacz cały
Konfiguracja zapisana...
Teraz musimy zmienić linijki w pliku .config na poniższe.
Kod: Zaznacz cały
CONFIG_LGUEST_GUEST=n
CONFIG_LGUEST=n
Kod: Zaznacz cały
make[1]: Opuszczenie katalogu `/usr/src/linux-3.2.7'
/usr/bin/make EXTRAVERSION=-yampress ARCH=i386 \
-C Documentation/lguest
make: *** Documentation/lguest: Nie ma takiego pliku ani katalogu. Stop.
make: *** [debian/stamp/build/kernel] Błąd 2
root@debian:/usr/src/linux#
Aktualnie mamy skonfigurowane jądro. Pozostaje skompilować je i zbudować paczkę.
Kod: Zaznacz cały
make-kpkg clean
make-kpkg --initrd --append-to-version=-yampress --revision=01 kernel_image kernel_headers
[INDENT]––append-to-version=-yampress - własna nazwa jądra -yampress
––revision=01 - numer kolejnej wersji zmian w konfiguracji jądra
––initrd - tworzy ram dysk jądra[/INDENT]
Po kompilacji jądra utworzyły się nam 2 paczki: jedna z nowym jądrem oraz druga plików nagłówkowych jądra.
Pozostaje już tylko je zainstalować:
Kod: Zaznacz cały
dpkg -i linux-image-3.2.7-yampress_01_i386.deb
dpkg -i linux-headers-3.2.7-yampress_01_i386.deb
/boot/grub/menu.lst i ewentualnie wprowadzić indywidualnie ustawienia według potrzeb.
Aby cieszyć się nową wersją jądra, resetujemy komputer
Kod: Zaznacz cały
shutdown -r now
Po uruchomieniu sprawdzamy na jakiej aktualnie wersji jądra nasz system pracuje.
Kod: Zaznacz cały
uname -a