...:: PODSTAWY LINUX`a ::...
..: 1 - co to jest jądro?
..: 2 - wersje stabilne i rozwojowe linux`a
3 - po co kompilować jądro? 4 - kompilacja jądra metodą tradycyjną :..
5 - kompilacja jądra sposobem debiana :..
DEBIAN <- 0
01_ INFO O SYSTEMIE
02_ instalacja OS
03_ shell
04_ bash
05_ system plików
06_ procesy
KONFIGURACJA <- 1
11_ konfiguracja środowiska
12_ WINE
13_ instalacja napędów
14_ instalacja karty sieciowej
15_ konfiguracja sieci
(eth0 & eth1)
INTERNET <- 2
21_ konfiguracja połączeń
22_ e-mail
23_ ftp
24_ apache
25_ przegladarki www
26_ telnet i irc
27_ ssh
ADMINISTRACJA <- 3
31_ x-window
32_ KDE & GNOME
33_ lilo & loadlin
34_ użytkownicy i grupy
35_ demony
36_ aplikacje
37_ kompilacja jądra systemu

KOMPILACJA JĄDRA

37-1 Co to jest jądro?

Jądro jest najważniejszą częścią systemu operacyjnego, jego "mózgiem", ale samo nie jest systemem operacyjnym. Zadaniem jądra jest obsługa systemu plików, zarządzanie pamięcią, przydzielanie programom czasu procesora i urzędzeń zewnętrznych. Obecnie Debian korzysta z jądra Linuxa (stąd nazwa Debian GNU/Linux), choć trwają też prace nad wykorzystaniem jądra Hurd.

37-2 Wersje stabilne i rozwojowe Linuxa

Pierwotna wersja jądra Linux została stworzona w 1991 r. przez fińskiego programistę - Linusa Torvaldsa. Dziś zajmuje się on koordynacją pracy programistów z całego świata nad jego dalszym rozwojem. Spakowane źródła nowych wersji jądra można pobierać bezpośrednio od Linusa, bądź z większości serwerów z oprogramowaniem dla systemów GNU/Linux. Specjalny system numeracji pozwala odróżniać użytkownikom kolejne wersje jądra. Jeśli pobraliśmy z serwera plik linux-2.x.x.tar.gz , to pierwsza cyfra oznacza serię produkcyjną (od wielu lat równa jest 2), druga określa serię jądra, a trzecia - numer kolejnej wersji tej serii. Parzysty numer serii jądra oznacza, że mamy do czynienia z jego wersją stabilną, a numer nieparzysty - z wersją niestabilną, czyli wciąż rozwijaną. Po przetestowaniu i usunięciu błędów jądro rozwojowe staje się jądrem stabilnym. Nowe wersje stabilne jądra pojawiają się co kilka tygodni, a eksperymentalne - nawet z dnia na dzień. Zamiast wielomegabajtowych plików ze spakowanymi źródłami całego jądra (źródła do wersji 2.4.x zajmują ponad 25MB) można też pobierać tylko pliki z zapisanymi zmianami w stosunku do poprzedniej wersji (tzw. "łaty"). I tak, jeśli na przykład mamy już źródła jądra w wersji 2.4.1, a chcemy uaktualnić jądro do wersji 2.4.3, to nie musimy pobierać pliku linux-2.4.3.tar.gz , lecz wystarczy ściągnąć pliki: patch-2.4.2.gz i patch-2.4.3.gz.

37-3 Po co kompilować jądro?

Standardowe jądro dostarczane z Debianem obsługuje większość konfiguracji i jeśli Twój system działa zgodnie z oczekiwaniami, to kompilacja jądra nie jest Ci potrzebna. Kompilacja może być jednak konieczna, jeśli chcesz:

  • korzystać ze specjalnego sprzętu lub pozbyć się konfliktów sprzętowych, które mogą wystąpić w przypadku standardowego jądra,
  • korzystać ze sprzętu lub opcji takich, jak APM (zarządzanie energią) lub SMP (obsługa wielu procesorów), które nie są obsługiwane przez standardowe jądro,
  • zoptymalizować rozmiar jądra usuwając zbędne sterowniki i kompilując niektóre jako moduły, co może przyspieszyć czas ładowania systemu i szybkość jego działania,
  • użyć opcji jądra wyłączonych w standardowym jądrze (np. obsługa firewalli),
  • korzystac z uaktualnień lub rozwojowej wersji jądra,
  • zrobić wrażenie na kolegach/koleżankach ;-) albo wypróbować nowe rzeczy.

    37-4 Kompilacja jądra metodą tradycyjną

    37-4.1 Konfiguracja jądra

    Najpierw musimy wypakować pobrane źródła. W tym celu kopiujemy je do katalogu /usr/src i rozpakowujemy poleceniami:

  • dla plików ze źródłami .tar.gz : gunzip linux-2.x.x.tar.gz | tar -xvf -
  • dla plików ze źródłami .tar.bz2 : bunzip2 linux-2.x.x.tar.bz2 | tar -xvf -
  • dla plików ze "łatkami" .gz : gunzip patch-2.x.x.gz | patch -p0
  • dla plików ze "łatkami" .bz2 : bunzip2 patch-2.x.x.bz2 | patch -p0

    Jeśli w trakcie rozpakowywania nie wystąpiły jakieś błędy, to możemy przystapić do konfigurownia jądra. Możemy to zrobić na trzy sposoby:

  • make config
  • make menuconfig
  • make xconfig - Pierwszy sposób to najstarsza metoda konfiguracji w trybie tekstowym. Jest on niewygodny i należy go zastosować tylko wtedy, gdy zawiodą pozostałe. Drugi sposób pozwala na wygodną konfigurację z użyciem systemu tekstowych menu. Wreszcie trzeci - najwygodniejszy, działa tylko pod systemem X Window. W każdym z nich jednak mamy do dyspozycji pomoc do prawie wszystkich opcji.

    37-4.2 Kompilacja jądra

    Po skonfigurowaniu jądra możemy przystąpić do jego kompilacji. W tym celu wydajemy komendy:

  • make dep
  • make clean
  • make bzImage
  • make modules
  • make modules_install
    Trzy pierwsze polecenia przygotowują kompilację jądra, a następnie ją wykonują, dwa ostatnie zaś kompiluja moduły i instalują je. Czas trwania kompilacji zależy od szybkości maszyny i waha się od kilku minut na komputerach z procesorem Pentium II lub Celeron do kilkudziesięciu minut na komputerach wyposażonych w procesor 486.

    37-4.3 Instalacja jądra

    Jeśli kompilacja zakończyła się sukcesem i na ekranie nie mamy żadnych informacji o błędach, to możemy przystapić do zainstalowania nowego jądra:

    1. Kopiujemy plik bzImage :

      cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-<nowa_wersja>
    2. Tworzymy symboliczne dowiązania /vmlinuz i /vmlinuz.old :

      ln -s /boot/vmlinuz-<nowa_wersja> /vmlinuz ln -s /boot/vmlinuz-<stara_wersja> /vmlinuz.old
    3. Kopiujemy plik System.map :

      cp /usr/src/linux/System.map /boot/System.map-<nowa_wersja>
    4. Tworzymy plik initrd* :

      mkinitrd -o /boot/initrd-<nowa_wersja> /lib/modules/<nowa_wersja>
    5. Modyfikujemy plik /etc/lilo.conf

      # Nowe jądro
      image=/vmlinuz
      	label=debian
      	initrd=/boot/initrd-<nowa_wersja>*
      	read-only
       
      # Stare jądro
      image=/vmlinuz.old
      	label=debian.old
      	initrd=/boot/initrd-<stara_wersja>*
      	read-only
      * - tylko jeśli chcemy dodać do jądra obsługę initrd (ang. Initial RAM disk).
    6. Aktualizujemy LILO:

      lilo -v

    UWAGA: Pozostawienie starego jądra i utworzenie symbolicznego dowiązania do niego pozwoli nam ponownie uruchomić komputer, gdyby okazało się, że system nie chce działać z nowym jądrem.

    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_image
    W 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_image
    Po 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_image
    Po 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_image
    Po zainstalowaniu pakietu powiniśmy jeszcze sprawdzić czy dowiązanie symboliczne /initrd.img wskazuje na /boot/initrd.img-2.x.x-initrd .
  • - powrót do góry -

    Zoptymalizowane pod IE 6.0 w rozdzielczości 1024x768. Polskie znaki kodowane w ISO 8859-2.
    PODSTAWY LINUX`A - debian
    czerwik dariusz => Centrum Nauki i Biznesu "ŻAK" 2005/2006
    praca dyplomowa pod kierunkiem mgr jarosława wróbla

    ..: debian :..