[ powrót ] [ Spis treści ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ dalej ]


Debian Reference
Część 7 - Jądro systemu Linux w Debianie


Debian posiada swoją własną metodę kompilacji jądra i powiązanych z nim modułów. Zobacz również Debian i kernel, Rozdział 2.7.


7.1 Kompilacja jądra

Użycie gcc, binutils i modutils z Debiana unstable może pomóc przy kompilacji najnowszych wydań jądra systemu Linux. Zobacz /usr/share/doc/kernel-package/README.gz, szczególnie koniec, aby uzyskać oficjalne informacje.

Od zawsze kompilacja jądra była trudnym tematem, który nawet najbardziej zaawansowanych developerów może wprowadzić w zakłopotanie:

Manoj Srivastava napisał:

--initrd wymaga specjalnej łatki dla Debiana: cramfs.

Herbert Xu napisał:

Nie, wcale nie, wszystko co musisz zrobić aby użyć innego systemu plików niż CRAMFS, to ustawienie MKIMAGE w /etc/mkinitrd/mkinitrd.conf.

Bądź ostrożny i zawsze polegaj na /usr/share/doc/kernel-package/README.gz napisanym przez Manoj i Kent'a. Upewnij się, że zdobyłeś najnowszą wersję pakietu unstable kernel-package, jeśli chcesz kompilować najnowszą wersję jądra.

initrd nie jest wymagane dla jądra kompilowanego tylko dla jednej maszyny. Używam tego od czasu, kiedy chcę aby moje jądro było niemal takie samo, jak to dostarczane przez pakiety kernel-image. Jeśli używasz initrd, powinieneś przeczytać mkinitrd(8) i mkinitrd.conf(5). Zobacz również http://bugs.debian.org/149236.


7.1.1 Standardowa metoda Debiana

Śledź uważnie raporty o błędach w kernel-package, gcc, binutils i modutils. W miarę możliwości używaj ich nowych wersji.

Kompilacja spersonalizowanego jądra ze źródeł pod Debianem wymaga specjalnej uwagi. Użyj nowego --append_to_version wraz z make-kpkg, aby zbudować obrazy jądra wielokrotnego użytku.

     # apt-get install debhelper modutils kernel-package libncurses5-dev
     # apt-get install kernel-source-2.4.18    # użyj najnowszej wersji
     # apt-get install fakeroot
     # vi /etc/kernel-pkg.conf                # wpisz nazwisko i e-mail
     $ cd /usr/src                            # stwórz katalog
     $ tar --bzip2 -xvf kernel-source-2.4.18.tar.bz2
     $ cd kernel-source-2.4.18                 # jeżeli są to źródła Twojego jądra
     $ cp /boot/config-2.4.18-386 .config      # ustaw obecny plik konfiguracyjny jako domyślny
     $ make menuconfig                        # wybierz potrzebne Ci opcje
     $ make-kpkg clean                        # musi być uruchomione (per: man make-kpkg)
     $ fakeroot make-kpkg --append_to_version -486 --initrd \
             --revision=rev.01 kernel_image \ 
             modules_image # modules_image używa się dla pcmcia-cs* itd.
     $ cd ..
     # dpkg -i kernel-image*.deb pcmcia-cs*.deb # instalacja

make-kpkg kernel_image właściwie wykonuje make oldconfig i make dep. Nie używaj --initrd jeżeli initrd nie jest używane.

Jeżeli ktoś chce używać modułów z pcmcia-cs lub bez pcmcia, powinien wybrać „General setup —>”, następnie „PCMCIA/CardBus support —>” przy make menuconfig i ustawić konfigurację na „< > PCMCIA/CardBus support” (np. odznaczyć pole).

Na maszynie z SMP (Simetric Multi processing), ustaw CONCURRENCY_LEVEL zgodnie z kernel-pkg.conf(5).


7.1.2 Metoda klasyczna

Pobierz źródła z:

lub użyj równoważnych źródeł z Debiana i postępuj następująco:

     # cd /usr/src
     # tar xfvz linux-whatever.tar.gz
     # rm -rf linux
     # ln -s linux-whatever linux
     # tar xfvz pcmcia-cs-whatever.tar.gz
     # ln -s pcmcia-cs-whatever pcmcia
     # cd linux
     # make menuconfig
     ... konfiguracja jądra ...
     # make dep
     # make bzImage
     ... edycja lilo / grub ...
     ... przeniesienie /usr/src/linux/arch/i386/boot/bzImage do  /boot ...
     ... uruchomienie /sbin/lilo lub równoważnego polecenia dla grub
     # make modules; make modules_install
     # cd ../pcmcia
     # make config
     # make all
     # make install
     ... dodanie niezbędnych nazw modułów do /etc/modules
     # shutdown -r now
     ... wystartowanie systemu z nowym jądrem ...

7.1.3 Pliki nagłówkowe jądra

Większość „zwykłych” programów nie potrzebuje plików nagłówkowych jądra, a nawet może się popsuć jeśli użyjesz ich bezpośrednio; zamiast tego powinny być skompilowane z plikami nagłówkowymi, z którymi zbudowano/skompilowano glibc, które są wersjami z /usr/include/linux i /usr/include/asm systemu Debian.

Nie twórz więc dowiązań symbolicznych do katalogów w /usr/src/linux z /usr/include/linux i /usr/include/asm, jak jest to sugerowane w pewnych przestarzałych dokumentach.

Jeżeli szczególnie potrzebujesz plików nagłówkowych jądra dla aplikacji zależnych od jądra, zmień plik/pliki Makefile, tak aby ich ścieżki do plików dołączanych (include) wskazywały na katalog-specjalnych-plików-nagłówkowych-jądra/include/linux i katalog-specjalnych-plików-nagłókowych-jądra/include/asm.


7.2 Zmodularyzowane jądro 2.4

Nowe jądra 2.4 w Debianie, dostarczone przez kernel-image-2.4.NN są bardzo zmodularyzowane. Musisz się upewnić czy moduły te są aktywne, aby jądro działało tak, jak zamierzałeś.

W następnej części, jako szybkie rozwiązania, prezentuję wiele przykładów pliku /etc/modules. Jednakże, lepszą metodą rozwiązywania problemów z modułami jest przypisanie ich, jako nazw zastępczych (aliasów) dla urządzeń, w plikach w /etc/modutils/. Niektóre moduły mogą być automatycznie aktywowane przez programy rozpoznające sprzęt, takie jak discover. Więcej na ten temat tutaj: Wykrywanie sprzętu dla X, Rozdział 9.4.2.

Zobacz Documentation/*.txt w źródłach Linuksa aby zdobyć szczegółowe informacje.


7.2.1 PCMCIA

/etc/modules musi zawierać następujące wpisy, aby urządzenia PCMCIA mogły działać:

     # sterownik ISA PnP
     isa-pnp
     # Niskopoziomowy sterownik PCMCIA
     # yenta_socket # w moim przypadku nie jest potrzebny

O resztę zadbają skrypty PCMCIA (z pakietu pcmcia-cs), depmod i kmod. Wydaje mi się, że potrzebowałem isa-pnp ponieważ mój laptop jest starym ISA-PCMCIA. Nowsze laptopy z CardBus/PCMCIA być może tego nie wymagają.

Zdanie wspaniałomyślnego Miquela van Smoorenburga miquels@cistron.nl:

„Po prostu wyrzuciłem całość pcmcia z laptopa w pracy, włącznie z cardmgr itd. Następnie zainstalowałem jądro 2.4 ze wsparciem dla cardbus, i nowy pakiet hotplug z woody'ego.

Jeśli masz 32-bitowe karty, nie potrzebujesz pakietu pcmcia ; 2.4 ma wbudowaną obsługę tych kart. Zwykły sterownik tulip powinien pracować dobrze z Twoją kartą dlink.

—Mike.”

Zobacz: Linux PCMCIA HOWTO oraz Konfiguracja sieci i PCMCIA, Rozdział 10.9.5.


7.2.2 SCSI

[NIE SPRAWDZANE] /etc/modules musi zawierać następujące wpisy, aby urządzenia SCSI mogły działać:

     # rdzeń SCSI
     scsi_mod
     # ogólny sterownik SCSI
     sg
     # dysk SCSI
     sd_mod
     # wszystkie inne niezbędne moduły
     ...

depmod zajmie się niektórymi z powyższych modułów.


7.2.3 Obsługa sieci

/etc/modules musi zawierać nastepujące wpisy dla działania dodatkowych funkcji sieciowych:

     # net/ipv-4
     ip_gre
     ipip
     
     # net/ipv-4/netfilter
     # iptable (in order)
     ip_tables
     ip_conntrack
     ip_conntrack_ftp
     iptable_nat
     iptable_filter
     iptable_mangle
     #
     ip_nat_ftp
     ip_queue
     #
     ipt_LOG
     ipt_MARK
     ipt_MASQUERADE
     ipt_MIRROR
     ipt_REDIRECT
     ipt_REJECT
     ipt_TCPMSS
     ipt_TOS
     ipt_limit
     ipt_mac
     ipt_mark
     ipt_multiport
     ipt_owner
     ipt_state
     ipt_tcpmss
     ipt_tos
     ipt_unclean
     #
     #ipchains
     #ipfwadm

Powyższe wpisy mogą nie być zoptymalizowane. depmod zajmie się cześcią z wyżej wymienionych modułów.


7.2.4 System plików EXT3 ( > 2.4.17)

Umożliwienie księgowania systemu plików z EXT3 FS przy użyciu Debianowego pakietu prekompilowanego obrazu jądra ( > 2.4.17) wymaga następujących kroków:

     # cd /etc; mv fstab fstab.old
     # sed 's/ext2/ext3,ext2/g' <fstab.old >fstab
     # vi /etc/fstab
     ... ustaw typ głównego systemu plików na „auto” zamiast „ext3,ext2”
     # cd /etc/mkinitrd
     # echo jbd >>modules
     # echo ext3 >>modules
     # echo ext2 >>modules
     # cd /
     # apt-get update; apt-get install kernel-image-2.4.17-686-smp
     ... zainstaluj najnowsze jądro i ustaw bootowanie (uruchom tu lilo)
     # tune2fs -j -i 0 /dev/hda1
     # tune2fs -j -i 0 /dev/hda2
     ... i tak dla wszystkich systemów plików EXT2 konwertowanych na EXT3
     # shutdown -r now

Teraz księgowanie EXT3 już działa. Używając ext3,ext2 jako wpis „typ” w fstab zapewniasz bezpieczny powrót do EXT2, jeżeli jądro nie wspiera EXT3 dla partycji innych niż główna.

Jeżeli wcześniej zainstalowałeś sobie jądro 2.4 i nie chcesz go przeinstalowywać, wykonaj powyższe kroki aż do poleceń apt-get, następnie:

     # mkinitrd -o /boot/initrd.img-2.4.17-686-smp /lib/modules/2.4.17-686-smp
     # lilo
     # tune2fs -j -i 0 /dev/hda1
     # tune2fs -j -i 0 /dev/hda2
     ... dla wszystkich, którzy przekonwertowali EXT2 FS do EXT3
     # shutdown -r now

Teraz księgowanie EXT3 już działa.

Jeżeli /etc/mkinitrd/modules nie zostało ustawione, podczas uruchomienia mkinitrd i chciałbyś dodać jakieś moduły w czasie startu to :

     ... przy zgłoszeniu initrd, aby uzyskać powłokę (5 sek.), wciśnij RETURN
     # insmod jbd
     # insmod ext3 # modprobe ext3 zajmie się wszystkim
     # insmod ext2
     # ^D
     ... kontynuuj uruchamianie.

Na ekranie uruchamiania pojawia się (dmesg), „cramfs: wrong magic”, ale jest to uznawane za nieszkodliwe. Ten problem został rozwiązany w Sarge (2002/10). Zobacz http://bugs.debian.org/135537 i EXT3 File System mini-HOWTO lub /usr/share/doc/HOWTO/en-txt/mini/extra/ext3-mini-HOWTO.gz w celu uzyskania dalszych informacji.

W niektórych systemach donoszone jest o doświadczaniu poważnych blokad jądra, gdy używane jest EXT3, ale ja nie miałem problemów (przynajmniej z 2.4.17).


7.2.5 Wsparcie układu Realtek RTL-8139 w jądrze 2.4

Z nieznanych przyczyn, wsparcie dla modułu RTL-8139 nie nazywa się już rtl8139, tylko 8139too. Po prostu wyedytuj swój /etc/modules by uwzględnić tę zmianę przy zmianie jądra 2.2 na 2.4.


7.2.6 Wsparcie dla portów równoległych

Dla kernel-image-2.4.*, wsparcie portu równoległego jest udostępniane jako moduł. Uaktywniasz je przez:

     # modprobe lp
     # echo lp >> /etc/modules

Zobacz Documentation/parport.txt w źródłach Linuksa.


7.3 Dostrajanie jądra przy pomocy systemu plików proc

Zachowanie jądra systemu Linux może być zmieniane „w locie” przy pomocy systemu plików proc.

Podstawowych informacji o zmianach parametrów jądra przez system plików /proc szukaj w źródłach Linuksa w Documentation/sysctl/*.

Zobacz kilka przykładów dla modyfikacji parametrów jądra w /etc/init.d/networking i Dziwne kłopoty z dostępem do witryn WWW., Rozdział 3.7.5.

By dowiedzieć się jak ustawić konfigurację jądra poprzez system plików /proc podczas uruchamiania zobacz do sysctl.conf(5). Zazwyczaj wykorzystywany jest do tego skrypt /etc/init.d/procps.sh uruchamiany z /etc/rcS.d/S30procps.sh.


7.3.1 Za dużo otwartych plików

Jądro Linuksa może zgłaszać problem „Za dużo otwartych plików”. Spowodowane jest to małą domyślną wartością (8096) dla file-max. Aby naprawić ten problem, wywołaj następujące polecenie jako root:

     # echo "65536"  > /proc/sys/fs/file-max  # dla jąder 2.2 i 2.4
     # echo "131072" > /proc/sys/fs/inode-max # tylko dla jąder 2.2

lub by zmienić to na stałe umieść następujące wpisy w /etc/sysctl.conf:

     file-max=65536   # dla jąder 2.2 i 2.4
     inode-max=131072 # tylko dla jąder 2.2

7.3.2 Przedziały czasu między operacjami dyskowymi

Możesz zmienić przedziały czasu między operacjami dyskowymi przy pomocy systemu plików proc. Następująco skrócimy je z domyślnych pięciu sekund do sekundy.

     # echo "40 0 0 0 100 30000 60 0 0"  > /proc/sys/vm/bdflush

Może to trochę negatywnie wpływać na osiągi pliku wejścia/wyjścia. Ale zabezpiecza to zawartość pliku, z wyjątkiem ostatniej sekundy, co i tak jest krótszym czasem, niż domyślne pięć sekund. Działa to nawet dla systemu plików z księgowaniem.


7.3.3 Stare, powolne maszyny z małą ilością pamięci

Dla niektórych starych systemów z małą ilością pamięci, użyteczne wciąż może być uruchomienie, przy pomocy systemu plików proc, przydzielania nieosiągalnej w danym momencie pamięci:

     # echo 1 > /proc/sys/vm/overcommit_memory

[ powrót ] [ Spis treści ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ dalej ]


Debian Reference

CVS, czwartek, 18 styczeń 2007, 11:53:26 UTC

Osamu Aoki osamu#at#debian.org
Koordynator tłumaczenia: Bartosz Feński aka fEnIo fenio@o2.pl
Autorzy, Rozdział A.1