Kompilacja j

Archiwalne, stare wpisy FAQ i HowTo Użytkowników
Awatar użytkownika
Yampress
Administrator
Posty: 6400
Rejestracja: 09 sierpnia 2007, 21:41
Lokalizacja: PL

Kompilacja jądra Linuksa 3.x metodą Debiana

Post autor: Yampress »

Wpis jest bliźniaczym wpisem zamieszczonego na moim blogu opisu jak skompilować jądro 2.6 http://debian.linux.pl/entries/177-Komp ... dą-Debiana. Dodanych jest parę szczegółów plus jeden trik aby skompilowało nam się jajo.


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.
W innych przypadkach nie ma sensu tego robić. Dystrybucyjne jajo jest budowane przez ludzi, którzy się na tym znają, zawiera obsługę potrzebnych elementów aby na jak największej ilości sprzętu działało, ma wsparcie bezpieczeństwa.

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]
Po ściągnięciu paczki ze źródłami jądra kopiujemy ją do katalogu: /usr/src:

Kod: Zaznacz cały

cp linux-3.2.7.tar.bz2 /usr/src
i rozpakowujemy:

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 
Nie jest to najnowsza wersja źródeł, a ta sama co wersja jądra dystrybucyjnego.

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
i tam w menu wczytujemy stary konfig.

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
Pojawi nam się niebieskie menu konfiguracyjne jądra.

Edytujemy ustawienia według potrzeb. Po zakończeniu czas na zapisanie konfiguracji. Wybieramy:

Kod: Zaznacz cały

**Exit**
potwierdzając:

Kod: Zaznacz cały

**YES**
na pytanie:

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
Jeśli tego nie zrobimy w trakcie kompilacji możemy spotkać się z błędem (stan na dzień 25.02.2012).

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# 
Może wkrótce to naprawią i nie będzie trzeba tego robić.

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
Przy czym powyższe zastosowane opcje to:

[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
Po instalacji należy jeszcze przejrzeć plik konfiguracyjny grub
/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
Zablokowany