Opis jądra Linux-a, jego instalacji itp.
Opis jądra Linux-a, jego instalacji itp.
Autor: Brian Ward,
bri@cs.uchicago.edu
v1.0, 5 Czerwca 1999
Wersja polska: Bartosz Maruszewski
B.Maruszewski@jtz.org.pl
v3.0, 7 Sierpnia 1999
Dokument ten jest szczegółowym przewodnikiem do konfiguracji, kompilacji
i odnawiania jądra.
Zawarte są tutaj także sposoby rozwiązywania problemów związanych z
jądrem dla
systemów na procesorach rodziny ix86.
Został napisany w standardzie ISO-8859-2.
Oryginał tego dokumentu znajduje się pod adresem
ftp.icm.edu.pl
w katalogu /pub/Linux/sunsite/docs/HOWTO.
Nowsza wersja zawiera uaktualnione wskazania na katalog zawierający jądra na
ftp.icm.edu.pl
1. Wprowadzenie.
Czy powinieneś to czytać? Hmm... zobaczmy czy masz następujące problemy:
"Ten wredny pakiet mówi, że potrzebuje jądra w wersji 2.8.193 a
ja ciągle mam 1.0.9!"
W jednym z nowszych wersji jądra jest nowy sterownik, który po
prostu MUSISZ mieć.
W ogóle nie masz pojęcia jak skompilować jądro
"Czy to w README to naprawdę wszystko?"
Usiadłeś, spróbowałeś i nie wyszło
Potrzebujesz czegoś, co mógłbyś dać tym wszystkim, którzy ciągle cię
proszą żebys im zainstalował jądro.
1.1 Przeczytaj to najpierw! (Nie żartuję)
Niektóre z przykładów zawartych tutaj zakładają, że masz
zainstalowane takie programy jak: GNU tar, find i xargs.
Są one właściwie standardowe; nie powinno być z tym problemów.
Zakłada się także, że znasz strukturę twojego systemu plików.
Jeśli nie znasz to koniecznie trzymaj w ręku wydruk tego co
pojawia się na ekranie po poleceniu mount, albo wydruk
zawartości pliku /etc/fstab jeśli umiesz go przeczytać.
Informacja ta jest ważna, i nie zmieni się dopóki nie zmienisz
układu partycji na twoim dysku.
Najnowszą wersją jądra, dostępną podczas pisania tego dokumentu,
była wersja 2.2.9. To znaczy, że wszystko w tym dokumencie odnosi
się do tej właśnie wersji. Chociaż staram się napisać ten dokument
tak niezależnym jak się tylko da, jądro jest ciągle rozwijane,
więc jeśli dostaniesz nowszą wersję, nieuniknionym jest, że będą
jakieś różnice. Ale to wciąż nie powinno stanowić dużego problemu,
co najwyżej mogą wystąpić jakieś drobne różnice.
Są dwie ogólne wersje źródeł jądra Linux-a, stabilne i testowe.
Stabilne wersje zaczynają się od wersji 1.0.x i są numerowane
liczbami parzystymi (chodzi o liczbę drugą); 1.0.x, 1.2.x, 2.0.x
jak również 2.2.x.
Wersje te są uważane za najbardziej stabilne, wolne od dziur i
błędów podczas ich dystrybucji. Jądra testowe (
2.1.x, 2.3.x) są jądrami przeznaczonymi dla tych, którzy chcą je
testować, wprowadzać jakieś zmiany, może nawet współpracować przy
tworzeniu go. W wersjach tych może byc pełno błędów, mogą się
zawieszać chociaż to wcale nie jest regułą i niekoniecznie musi
się dziać. Jakby co, to zostałeś ostrzeżony.
1.2 Słowo na temat wyglądu.
Tekst, który tak wygląda jest albo czymś co pojawi się na
ekranie, nazwą pliku, albo czymś co może być bezpośrednio wpisane
z klawiatury (np. polecenie, czy jego opcje). Jeśli czytasz ten
dokument jako zwykły plik tekstowy to tekst ten niczym się nie
różni.
2. Ważne pytania i odpowiedzi na nie.
2.1 Co to jądro w ogóle robi?
Jądro w systemach typu Unix odgrywa rolę pośrednika między twoimi
programami, a twoim sprzętem. Najpierw zajmuje się zarządzaniem
pamięci dla wszystkich uruchomionych programów (procesów), i dba o
to, aby wszystkie one dostały równą ilość czasu procesora. (albo
nierówną jeśli tak zażądasz). Dodatkowo, posiada miły interfejs
dla programów chcących "rozmawiać" z twoim sprzętem.
Jądro spełnia oczywiście o wiele więcej funkcji, ale to są
najważniejsze, które należy znać.
2.2 Dlaczego miałbym chcieć odnowić swoje jądro?
Nowsze jądra z reguły mają wiekszą ilość sterowników, czyli mogą
obsłużyć większą ilość urządzeń, mogą mieć ulepszone algorytmy
zarządzania procesami, mogą działać szybciej niż starsze wersje,
mogą być bardziej stabilne, mają także wiele poprawek błędów,
które zdarzyły się w wersjach wcześniejszych. Większość ludzi
odnawia swoje jądra ponieważ chcą większej ilości sterowników i
naprawionych błędów.
2.3 Jaki sprzęt obsługują nowsze wersje jądra?
Przeczytaj Hardware-HOWTO. Możesz także zajrzeć do pliku
config.in w źródłach jądra. Albo po prostu dowiedzieć się
samemu jak napiszesz make config. W poleceniu tym znajdą
się wszystkie obsługiwane przez dane jądro urządzenie. Ale nie będą
to wszystkie urządzenia, które obsługuje Linux. Wiele popularnych
sterowników (jak np. sterownik do PCMCIA i niektóre sterowniki do
taśm) są rozprowadzane osobno jako ładowalne moduły.
2.4 Jakiej wersji gcc i libc potrzebuję?
Aby zobaczyć jaką masz wersję napisz gcc -v.
Linus zaleca zawsze w pliku README wersję gcc, która
powinna być użyta do kompilacji danego jądra. Jeśli nie masz tej
wersji, dokumentacja w zalecanej wersji gcc powinna powiedzieć ci
czy musisz odnowić libc. Nie jest to trudne, ale ważne jest, aby
postępować zgodnie ze wskazówkami.
2.5 Co to jest ładowalny moduł?
Są to części jądra, które nie są zawarte bezpośrednio w nim.
Kompiluje się je osobno i można je umieścić a następnie usunąć z
uruchomionego jądra prawie zawsze. Z powodu tej elastyczności
jest to teraz preferowana metoda pisania niektórych fragmentów
jądra. Wiele popularnych sterowników urządzeń to ładowalne moduły.
2.6 Ile potrzebuję miejsca na dysku?
To zależy od twojej konkretnej konfiguracji. Skompresowane źródła
zajmują mniej więcej 14 MB. Po rozkompresowaniu, skonfigurowaniu i
kompilacji zajmuje kolejne 67 MB.
2.7 Jak długo zajmuje kompilacja?
Na nowszych maszynach zabiera to NAPRAWDĘ mniej czasu niż na
starych. Np. na AMD K6-2/300 z szybkim dyskiem kompilacja wersji
2.2.x może zająć około 4 minut podczas gdy kompilacja tego samego
jądra na starym Pentium, 486 czy 386 może trwać nawet godziny, czy
dni ...
Jeśli to cię martwi, a masz w pobliżu szybszy komputer, to
skompiluj jądra na nim (zakładając, że ustawisz poprawne parametry,
że twoje narzędzia systemowe są w odpowiednich wersjach itd), a
potem przesnieś skompilowane jądro (obraz) na wolniejszy komputer.
3. Jak właściwie skonfigurować to jądro?
3.1 Zdobywanie źródła.
Źródła możesz sciągnąć np. z
ftp.kernel.org:/pub/linux/kernel - jest to główny
serwer dla jądra Linux-a, albo z jakiejś bliższej ci kopii
tego serwera. W Polsce najlepszym miejscem jest
ftp.icm.edu.pl/pub/Linux/kernel. Z reguły nazwa
jądra to linux-x.y.z.tar.gz, gdzie x.y.z jest numerem
wersji. Tak jak już wspomniałem, wersje z nieparzystą drugą liczbą
to wersje rozwojowe i mogą być niestabilne. Obok wersji
.tar.gz są jeszcze wersje .bz2, które są mniejsze i
zabierają mniej czasu do ściągnięcia.
Najlepiej używać adresu ftp.xx.kernel.org, gdzie xx to kod
twojego kraju. Np. ftp.pl.kernel.org dla Polski.
Jeśli szukasz jakichś ogólnych informacji o Linux-ie, to zajrzyj
pod adres
www.linux.org. W
Polsce także jest
Polska Grupa Użytkowników Linux-a.
3.2 Rozpakowywanie źródła.
Zaloguj się jako root albo użyj polecenia su i
zmień katalog na /usr/src cd /usr/src.
Jeśli zainstalowałeś źródła do jądra podczas instalacji Linux-a w
katalogu tym znajdziesz dołączenie symboliczne linux,
które będzie wskazywało na katalog linux-x.y.z ze
źródłami, które wtedy zainstalowałeś. Jeśli chcesz zachować stare
źródła to usuń dołączenie linux poleceniem rm linux.
Jeśli takiego dołączenia nie ma, a jest katalog linux, to (jeśli
chcesz zachować źródła starej wersji jądra) zmień nazwę linux na
linux-x.y.z, gdzie x.y.z jest wersją tych źródeł. (zajrzyj do
pliku linux/Makefile - w pierwszych trzech linijkach
znajdziesz wersję źródeł znajdujących się w tym katalogu).
Jeśli chcesz możesz skasować cały katalog linux i pozbyć się
starych źródeł.
W każdym razie upewnij się, że nie ma katlogu linux przed
rozpakowanie źródeł.
Teraz w katalogu /usr/src rozpakuj źródła poleceniem
tar zxpvf linux-x.y.z.tar.gz, jeśli na końcu nazwy pliku
ze źródłami nie ma .gz to użyj polecenia tar xpvf
linux-x.y.z. Zawartość archiwum wyświetli się na ekranie.
Kiedy rozpakowywanie się skończy pojawi się nowy katalog linux.
Dobrym pomysłem byłoby w tym momencie zmienić jego nazwę na
linux-x.y.z i zrobić symboliczne dołączenie do tego
katalogu o nazwie linux. Aby to zrobić użyj polecenia
mv linux linux-x.y.z; ln -s linux-x.y.z linux. Teraz
zmień bieżący katalog na linux i przejrzyj plik
README. Znajdziesz tam sekcję o nazwie INSTALLING the
kernel. Przeczytaj ją uważnie i wypełnij wszystkie polecenia,
o których tam mowa.
Jeśli ściągnąłeś wersję .bz2 i masz program bzip2 (na jego
temat można przeczytać pod adresem
www.muraroa.demon.co.uk/), to zrób tak:
bzcat2 linux-x.y.z.tar.bz2 | tar xvf -
3.3 Konfiguracja jądra.
UWAGA: Niektóre z uwag zawartych tutaj są podobne do tych z pliku
Linusa README.
Polecenie make config wydane w katalogu
/usr/src/linux uruchamia skrypt konfiguracyjny, który
zadaje ci wiele pytań. Wymaga on zainstalowanego shella, więc
sprawdź czy go masz. (/bin/bash, /bin/sh lub $BASH)
W wersjach 2.0.x i nowszych istnieją jeszcze dwa sposoby na
konfigurację: make menuconfig jak sama nazwa wskazuje
jest to konfiguracja za pomocą menu tekstowego. Można też wydać
polecenie make xconfig co spowoduje uruchomienie miłej
konfiguracji pod Xwindow. Pierwszy sposób wymaga zainstalowanej
biblioteki (n)curses. Ta druga wymaga zainstalowanej biblioteki
Tcl/Tk. Obie są dostarczane wraz ze standardowymi dystrybucjami.
Te sposoby mają podstawową zaletę: jeśli się pomylisz, to łatwo
jest wrócić i poprawić błąd.
Można teraz odpowiadać na kolejne pytania ukazujące się na
ekranie. Odpowiada się zwykle literami "y" - tak i "n" - nie. Przy
sterownikach jest jeszcze dodatkowa opcja "m" - oznacza
skonfigurowanie go jako ładowalny moduł. Bardziej komicznym
sposobem wyjaśnienia tej litery jest "może". Niektóre z bardziej
oczywistych czy nie-krytycznych opcji nie zostały tutaj opisane;
zobacz w sekcji "Inne opcje konfiguracji." W make menuconfig
spacją zaznacza się daną opcję.
W wersjach 2.0.x i nowszych jest polecenie "?", która umożliwia
wyświetlenie krótkiej pomocy na temat bieżącej opcji. Informacja ta
jest prawdopodobnie najświeższa. Oto lista ważniejszych opcji, do
jakiej hierarchii należą i krótki opis.
Kernel math emulation (Processor type and features)
Pytanie to dotyczy emulacji koprocesora przez jądro.
Jeśli nie masz koprocesora matematycznego (masz czysty 386 albo
486SX), musisz tu odpowiedzieć "y". Jeśli masz koprocesor a
odpowiesz "y", nie martw się -- koprocesor będzie użyty, a
emulacja ignorowana. W połowie przypadków w tej chwili odpowiedzią
będzie nie, ale nie martw się jeśli przypadkowo odpowiesz tak;
jeśli nie trzeba, to nie będzie to użyte.
Enhanced (MFM/RLL) disk and IDE disk/cdrom support (Block Devices).
Przypuszczalnie potrzebujesz tej obsługi. Opcja ta oznacza, że
jądro będzie obsługiwać standardowe dyski do komputerów PC, które są
w posiadaniu większości ludzi. Sterownik ten nie zawiera obsługi
dla dysków SCSI, pytanie o to będzie później w konfiguracji.
Zostaniesz zapytany następnie o sterowniki "old disk-only" i "new
IDE". Wybierz jeden z nich; główna różnica pomiędzy nimi to taka,
że stary sterownik obsługuje tylko dwa dyski na pojedynczym
interfejsie, a nowy obsługuje drugi interfejs i napędy IDE/ATAPI
CD-ROM. Nowy sterownik jest o około 4 kB większy od starego i ma
być lepszy. To znaczy, że pomijając mniejszą ilość błędów może
działać bardziej wydajnie, szczególnie jeśli masz dysk typu EIDE.
Networking support (General Setup).
Ogólnie powinieneś odpowiedzieć "y" jeśli twój komputer jest w
sieci takiej jak Internet, albo jeśli chcesz używać protokołów
SLIP czy PPP, aby mieć dostęp do Internetu. Aczkolwiek wiele
pakietów (np. Xwindows) wymaga obsługi sieci nawet jeśli twój
komputer nie jest podłączony do żadnej sieci; powinieneś tu
odpowiedzieć "y". Później, zostaniesz zapytany czy chcesz obsługę
protokołu TCP/IP; znowu, odpowiedz "y" jeśli nie jesteś
absolutnie pewien.
System V IPC (General Setup).
Jedną z najlepszych definicji IPC (InterProcess Communication -
Komunikacja Pomiędzy Procesami) znajduje się w glosariuszu w książce
o Perlu. Nic więc dziwnego, że niektórzy programiści piszący w
Perlu wykorzystują go do komunikacji między procesami, tak samo
jak wiele innych pakietów (DOOM - z tych najbardziej znanych ;) ),
więc odpowiedź "n" nie jest mądrym wyborem, o ile wiesz dokładnie
co robisz.
Processor family (Processor type and features).(w starszych wersjach: Use -m486 flag for 486-specific optimizations)
Tradycyjnie, to wkompilowywało pewne optymalizacje dla konkretnego
procesora; jądra działały dobrze także na inncyh procesoarch, ale
były one troche większe. W nowszych wersjach się już tego nie
stosuje i powinieneś odpowiedzieć na jaki procesor rzeczywiście
kompilujesz jądro. Jądro skompilowane na 386 będzie działać na
wszystkich procesorach.
SCSI support.
Jeśli masz urządzenia SCSI odpowiedz "y". Zostaniesz następnie
zapytany o dalsze informacje, jak np.: obsługa CD-ROM-u,
dysków i twojego adaptera. Zajrzyj do SCSI-HOWTO po więcej
szczegółów.
Network device support.
Jeśli masz kartę sieciową, albo chciałbyś używać protokołów SLIP,
PPP, albo kontrolera portu równoległego aby połączyć się z Internetem
odpowiedz "y". Konfigurator spyta cię następnie o typ karty i
rodzaj protokołu.
Filesystems.
Skrypt konfiguracyjny pyta cię następnie o to, jakie systemy
plików chcesz obsługiwać:
Standard (minix) - Nowsze dystrybucje nie tworzą tego systemu
plików, a wielu ludzi go nie używa, ale jednak użycie go mogłoby
być dobrym pomysłem, ponieważ przydaje się on do odczytu dyskietek,
dla których system ten jest mniej bolesny niż ext2.
Second extended - To jest standardowy system plików Linuxa. Prawie
na pewno masz jeden z nich i musisz odpowiedzieć y.
msdos - Jeśli chcesz używać swej partycji dos-owej, albo montować
dyskietki sformatowane pod ten system, odpowiedz "y".
Dostępne są jeszcze różne inne systemy plików z innych systemów
operacyjnych.
/proc - (Pomysł jak mniemam z laboratorium Bella). Na
dysku nie tworzy się systemu plików proc. To jest system
plików, który służy do porozumiewania się z jądrem i procesami.
Wiele programów wyświetlających procesy, jak np. ps używa
tego systemu plików. Spróbuj czasami wykonać polecenie cat
/proc/meminfo albo cat /proc/devices.
Niektóre powłoki (w szczególności rc) używają /proc/self/fd
(znane jako /dev/fd na innych systemach) do funkcji I/O.
Powinieneś prawie na pewno odpowiedzieć tutaj "y". Wiele ważnych
narzędzi do Linux-a zależy od tego systemu plików.
NFS - Jeśli twój komputer jest w sieci i chcesz używać systemów
plików, które znajdują się na innych systemach z NFS, odpowiedz "y".
ISO9660 - Ten system plików jest na przeważającej ilości
CD-ROM-ów. Jeśli więc chcesz używać CD-ROM-u odpowiedz "y".
Ale ja nie wiem jakiego systemu plików potrzebuję!
No dobra, napisz mount. Powinno się wyświetlić coś jak:
blah# mount
/dev/hda1 on / type ext2 (defaults)
/dev/hda3 on /usr type ext2 (defaults)
none on /proc type proc (defaults)
/dev/fd0 on /mnt type msdos (defaults)
Spójrz na każdą linijkę; słowo obok type jest typem
systemu plików. W tym przypadku / i /usr są typu second extended,
używany jest także proc i jest także zamontowana dyskietka
z systemem plików msdos (tfu!).
Możesz spróbować też cat /proc/filesystems jeśli masz
system proc. Wyświetli ci to systemy plików wkompilowane
w aktulanie używane jądro.
Konfiguracja rzadko używanych i nie krytycznych systemów plików
może powodować niepotrzebne powiększanie się jądra; poczytaj
sekcję o modułach jak tego uniknąć i sekcję "Pułapki", aby
dowiedzieć się dlaczego powiększające się jądro nie jest pożądane.
Character devices.
Tutaj dołączasz sterowniki dla drukarki (równoległej, znaczy się),
myszy szeregowej, myszy PS/2 (wiele Notebooków używa protokołu
PS/2 dla swoich wbudowanych myszy), niektóre sterowniki do taśm, i
inne tego typu "znakowe" urządzenia. Odpowiedz "y" kiedy znajdziesz
urządzenie, którego używasz.
UWAGA: gpm to program, który pozwala na użycie myszy poza
Xwindow i na kopiowanie tekstu pomiędzy wirtualnymi konsolami.
Jest to całkiem przyjemne jeśli masz zwykłą myszkę szeregową,
ponieważ koegzystuje ona z Xwindows, ale musisz uciekać się do
specjalnych sztuczek dla innych.
Sound.
Jeśli czujesz wielką potrzebę usłyszenia dźwięków wydobywających
się z tej maszynerii to odpowiedz "y" i napisz wszystko co wiesz
na temat szczegółów twojej karty dźwiękowej i
skompiluje sterownik. (Uwaga o konfiguracji kart dźwiękowych:
jeśli zapyta cię czy chcesz zainstalować pełną wersję sterownika,
możesz odpowiedzieć "n" i zaoszczędzić trochę pamięci wybierając
tylko to co jest ci potrzebne.)
Jeśli myślisz poważnie o karcie dźwiękowej, to zajrzyj na dwie
strony darmowych sterowników:
www.linux.org.uk/OSS/
www.opensound.com/
Inne opcje konfiguracji.
Nie wszystkie opcje konfiguracyjne są tu wymienione ponieważ
zmieniają się zbyt często lub są oczywiste (na przykład: obsługa
3Com 3C509). Jest całkiem spora lista wszystkich opcji wraz ze
sposobem umieszczenia jej w skrypcie Configure. Zajmuje się tą
listą Axel Boldt (
boldt@math.ucsb.edu). Można go także zobaczyć jako jeden
duży plik w dystrybucji jądra Documentation/Configure.help
od wersji 2.0.
[Od tłumacza] Plik ten dla chyba dwóch wersji jądra jest
przetłumaczony na język Polski. Zajrzyj pod adres
www.jtz.org.pl/inne-polskie.html
Kernel hacking.
Wzięte z pliku README napisanego przez Linusa:
opcja "kernel hacking" daje w rezultacie większe i wolniejsze
jądro, może nawet uczynić je mniej stabilnym, przez konfigurowanie
niektórych procedur, tak aby aktywnie próbowały łamać złe algorytmy i
żeby można było znaleźć problemy jądra. (kmalloc()). Tak więc powinieneś
odpowiedzieć tutaj "n" jeśli chcesz mieć normalnie działające i
stabilne jądro.
3.4 I co teraz? (Makefile)
Jak już skończysz konfigurację pojawi
się na ekranie wiadomość, że jądro zostało skonfigurowane i że
należy sprawdzić top-level Makefile dla dodatkowej
konfiguracji.
Ten top-level Makefile to plik o nazwie Makefile w katalogu
/usr/src/linux. Zajrzyj tam. Przypuszczalnie nie będziesz
tam nic zmieniał, ale spojrzeć nie boli :). Jak już zainstalujesz
nowe jądro możesz zmienić jego opcje przy pomocy narzędzia
rdev. Jeśli czujesz się zagubiony patrząc na ten plik, to
nie przejmuj się nim.
4. Kompilacja jądra.
4.1 Czyszczenie i zależności.
Kiedy skrypt konfiguracyjny się skończy każe ci napisać make
dep i (przypuszczalnie) make clean. Tak więc
zaczynamy od make dep. Jest to pewne zabezpieczenie się,
które sprawdza różne zależności, jak na przykład: czy pliki
nagłówkowe są na swoich miejscach. Nie zajmuje to wiele czasu, no
chyba, że twój komputer jest naprawdę wolny.
W starszych wersjach powinieneś jeszcze wydać polecenie make
clean. To usuwa pozostałości po starej kompilacji jądra
(pliki objektowe itp). Nie zapomnij tego kroku !!!
4.2 Kompilacja główna.
Po czyszczeniu i sprawdzeniu zależności możesz wpisać make bzImage
lub make bzdisk (to jest ta część, która zabiera tyle
czasu). make bzImage skompiluje jądro i zostawi je w pliku
/usr/src/linux/arch/i386/boot/bzImage wśród innych rzeczy.
To jest nowe skompresowane jądro. make bzdisk robi to samo,
z tą różnicą, że umieszcza plik bzImage na dyskietce w
stacji A:, którą mam nadzieję włożysz na czas do stacji :). (ten
czas to sam koniec kompilacji, ale na wszelki wypadek radzę włożyć
od razu, bo potem można zapomnieć)
make bzdisk to dobry sposób na testowanie nowego jądra;
jeśli coś pójdzie nie tak, po prostu wyjmujesz dyskietkę ze stacji,
resetujesz i po krzyku. Może to być także pomocne jeśli
przypadkowo usuniesz jądro z dysku. (radzę uważać na to co się robi
w katalogu głównym a szczególnie w katalogu /boot). Możesz
jej także użyć do instalacji innych systemów, ponieważ wystarczy
przegrać zawartość tej dyskietki na inną.
Wszystkie, nawet te w połowie sensowne, jądra są skompresowane, z
powodu literek "bz" na początku. Skompresowane jądro odkompresowuje
się automatycznie w czasie wykonywania.
W starszych jądrach nie ma opcji bzImage. Było to po prostu
zImage. Opcja ta jest wciąż dostępna, jednak biorąc pod uwagę
obecne rozmiary jądra nie poleca się tego sposobu kompresji.
4.3 Inne parametry dla "make" przy kompilowaniu jądra.
make mrproper spowoduje dokładniejsze wyczyszczenie.
Czasem jest to potrzebne; możesz to robić przy instalacji
każdej łaty (patch). make mrproper skasuje także twój
plik z bieżącą konfiguracją, więc możesz sobie zrobić kopię
tego pliku (.config).
make oldconfig spróbuje skonfigurować jądro na podstawie
starego pliku konfiguracyjnego; przejdzie za ciebie przez proces
konfiguracji (make config). Jeśli jeszcze nigdy przedtem nie
kompilowałeś jądra lub nie masz starego pliku konfiguracyjnego
wtedy przypuszczalnie nie powinieneś tego robić, bo będziesz
chciał zmienić konfigurację domyślną.
Przeczytaj sekcję o modułach na temat szczegółów dotyczących
make modules.
4.4 Instalacja jądra.
Jeśli masz już nowe jądra i wydaje ci się, że ono działa tak jak
chciałeś, czas aby je zainstalować. Większość ludzi używa do tego
celu LILO (Linux Loader). make bzlilo zainstaluje jądro,
uruchomi lilo, aby odświeżyć informacje i przygotuje wszystko, aby
zresetować i załadować nowe jądro. ALE TYLKO w przypadku,
gdy LILO jest skonfigurowane następująco:
jądro to /vmlinuz, lilo jest w /sbin, a twój
plik konfiguracyjny od lilo to /etc/lilo.conf i zgadza
się z tym co jest powyżej.
W innym przypadku musisz użyć bezpośrednio polecenia lilo.
Jest to pakiet całkiem prosty do zainstalowania i używania, ale ma
tendencję do załamywania ludzi swoim plikiem konfiguracyjnym.
Zajrzyj do pliku /etc/lilo/config - w starszych wersjach;
lub /etc/lilo.conf - w nowszych wersjach, i sprawdź
bieżące ustawienia. Plik ten wygląda tak:
image = /vmlinuz
label = Linux
root = /dev/hda1
...
image = odnosi się do aktualnej wersji zainstalowanego
jądra. Większość używa nazwy /vmlinuz. Ale równie dobrze
może to być nazwa xxx, jądro, czy pliczek (nie jestem pewien co
do polskich liter, ale zawsze można poeksperymentować :) )
label = używane jest przez LILO, aby dowiedzieć się jaki
system lub jądro załadować, a root = jest katalogiem
głównym danego systemu. Zrób kopię jądra, którego teraz używasz i
skopiuj nowo zrobione jądro na miejsce starego (czyli napisz
cp bzImage /vmlinuz jeśli używasz nazwy vmlinuz i jesteś w
katalogu /usr/src/linux/arch/i386/boot. Potem uruchom
LILO - w nowszych wersjach po prostu uruchamiasz lilo; w
starszych może będziesz musiał uruchomić /etc/lilo/install
albo nawet /etc/lilo/lilo -C /etc/lilo/config.
Jeśli chcesz wiedzieć więcej na temat konfiguracji LILO, albo nie
masz LILO, zdobądź najnowszą wersję i poczytaj dokumentację.
Aby załadować jedną ze starszych wersji jądra, które mam nadzieję
zachowałeś :) skopiuj linie od image = xxx w pliku
konfiguracyjnym LILO na dół pliku, zmień xxx na nazwę twojego
zachowanego pliku (wraz z pełną ścieżką). Zmień label = zzz
na np. label = old-kernel i uruchom ponownie lilo.
Możesz też wstawić linię delay = x, gdzie x jest ilością
dziesiętnych części sekundy, do pliku konfiguracyjnego LILO, aby
zatrzymać ładowanie na określoną ilość sekund i przerwać je np.
klawiszem SHIFT, a potem wpisać nazwę którą nadałeś starszej
wersji jądra (tę label = z pliku konfiguracyjnego LILO, a
nie nazwę pliku jądra) w razie gdyby stało się coś nieprzyjemnego.
5. Łatanie jądra (patchowanie).
5.1 Zakładanie łaty.
Pakiety, które pozwalają na odnowienie jądra to łaty. Na przykład:
jeśli masz wersję 1.1.45 i znajdziesz plik o nazwie patch46.gz
to znaczy, że możesz odnowić swoje jądro do wersji 1.1.46. Możesz
zrobić kopię źródeł, które masz (make clean a potem
cd /usr/src; tar zcvf old-kernel.tar.gz linux)
Tak więc kontynuując powyższy przykład załóżmy, że masz plik
patch46.gz w katalogu /usr/src. Bedąc w katalogu
/usr/src wydaj polecenie zcat pacth46.gz | patch -p0
albo patch -p0 < patch46 jeśli łata nie jest
skompresowana. Zobaczysz teraz trochę ścieżek i nazw plików
oraz komunikatów przelatujących przez ekran, o tym co się udało a co
nie. Wszystko to przelatuje zbyt szybko, żeby nadążyć z
czytaniem, także właściwie nie wiesz czy się udało czy nie. Możesz
użyć parametru -s do polecenia patch, aby
poinformować je, żeby wyświetlało tylko komunikaty o błędach. Aby
zobaczyć czy coś poszło nie tak, poszukaj plików z rozszerzeniem
.rej w katalogu /usr/src/linux. Niektóre wersje
patch (starsze wersje, które mogły być skompilowane na gorszym
systemie plików) zostawiają błędy w plikach z rozszerzeniem
#. Możesz użyć polecenia find, aby znaleźć
te pliki:
cd /usr/src/linux; find ./ -name '*.rej' -print
Polecenie to wyświetli wszystkie pliki z rozszerzeniem rej
znajdujące się w bieżącym katalogu i jego podkatalogach.
Jeśli wszystko poszło dobrze, wydaj teraz po kolei polecenia
make clean, make config i make dep tak jak opisano w
sekcjach 3 i 4.
Do polecenia patch jest trochę opcji. Jak już wspomniałem,
patch -s spowoduje wyświetlenie na ekran tylko wiadomości
o błędach. Jeśli trzymasz źródła w innym katalogu niż
/usr/src/linux, polecenie patch -p1 wydane w tym
katalogu, gdzie trzymasz źródła zrobi wszystko bez błędów. Inne
opcje polcenia patch są dobrze opisane w podręczniku "man".
5.2 Jeśli coś pójdzie nie tak.
(Uwaga: ta sekcja odnosi się w głównej mierze do starszych wersji
jądra.)
Najczęstszym problemem było to, że kiedy polecenie patch
modyfikowało plik config.in nie wyglądał on tak jak
powinien, bo zmodyfikowałeś go, aby pasował do twojego komputera.
Zostało to już poprawione, ale w starszych wersjach błąd ten
pozostał. Aby to naprawić, przeczytaj plik config.in.rej
i zobacz co pozostało z oryginalnej łaty. Zmiany są zwykle
zaznaczane znakami + i - na początku linii. Spójrz na linie
otaczające tę zaznaczoną i przypomnij sobie, czy były one
ustawione na tak, czy na nie. Teraz w pliku config.in
zmień "y" na "n" i "n" na "y" tam gdzie trzeba. Wydaj polecenie
patch -p0 < config.in.rej a jeśli poinformuje cię, że
się powiodło, wtedy możesz kontynuować konfigurację i kompilację.
Plik config.in.rej pozostanie, ale możesz go skasować.
Jeśli odkryjesz dalsze problemy, mogłeś zainstalować jakąś łatę
nie w kolejności. Jeśli na ekranie pojawi się taka wiadomość:
previously applied patch detected: Assume -R? oznacza to,
że przypuszczalnie próbujesz nałożyć łatę o wersji mniejszej niż
źródła twojego jądra. Jeśli odpowiesz "y", polecenie patch
spróbuje zdegradować twoją wersję, i najprzypuszcalnie się to nie
powiedzie, przez co będziesz musiał zdobyć całkiem nowe źródła.
(co w sumie wcale nie jest takim złym pomysłem).
Aby odinstalować jakąś łatę użyj patch -R na oryginalnej.
Jak już się wszystko tak pomiesza, że nie będziesz mógł dojść do
ładu, to najlepszym sposobem jest zdobyć nowe źródła jądra i zacząć
od nowa.
5.3 Pozbywanie się plików ".orig".
Po zaledwie kilku łatach pliki .orig zaczynają niebezpiecznie
rosnąć. Na przykład: usunięcie plików .orig z wersji 1.1.51, która
była ostatnio czyszczona w wersji 1.1.48 spowodowało zwolnienie
ponad 500 kB dysku.
find . -name '*.orig' -exec rm -f {} ';'
Polecenie to spowoduje usunięcie wszystkich plików .orig z
bieżącego katalogu i jego podkatalogów.
Wersje patch, które używają plików .# zamiast plików .rej,
używają tyldy (~) zamiast plików .orig.
Są lepsze sposoby pozbycia się plików .orig, które zależą od
polecenia GNU xargs:
find . -name '*.orig' | xargs rm
lub metoda całkiem bezpieczna ale trochę "głośna" (dużo
komunikatówna ekranie):
find . -name '*.orig' -print0 | xargs --null rm --
5.4 Inne łaty.
Są jeszcze inne łaty (tzw. niestandardowe), niż te które
dystrybuuje Linus. Jeśli ich użyjesz łaty Linusa mogą nie działać
i będziesz musiał je albo odinstalować, dopasować źródła albo łatę,
zainstalować nowe źródła, albo jakaś kombinacja tego. Może to być
trochę frustrujące, więc jeśli nie chcesz grzebać w źródłach (z
możliwością narobienia niezłego bajzlu), odinstaluj niestandardowe
wersje łat zanim zainstalujesz łatę Linusa, albo po prostu
zainstaluj nowe źródła. Wtedy możesz zobaczyć czy łaty
niestandardowe wciąż działają. Jeśli nie to albo utknąłeś ze
starym jądrem i będziesz próbował zmusić jakoś źródło albo łatę,
żeby zaczęła działać, albo będziesz czekał (pewnie błagał) o nową
łatę.
Jak pospolite są te niestandardowe łaty?
Przypuszczalnie o nich usłyszysz. Ja używałem łaty "noblink" na
moich wirtualnych konsolach, bo nienawidzę mrugającego kursora. Ta
łata jest (a przynajmniej była) często odnawiana dla nowszych
wersji jądra. Z większością nowych sterowników jako ładowalne
moduły, chociaż częstotliwość niestandardowych łat znacznie spada.
6. Pakiety dodatkowe.
Jądro Linux-a ma wiele zalet, które nie znajdują się w źródłach. Są
one rozprowadzane jako osobne pakiety. Niektóre z tych najbardziej
popularnych są tu wymienione.
6.1 kbd
Konsola Linux-owa ma chyba więcej zalet niż na to zasługuje.
Pomiędzy nimi znajdują się takie jak: zmiana czcionek, zmiana
układu klawiszy, zmiana trybów wyświetlania (w nowszych wersjach).
Pakiet kbd to programy, które pozwalają użytkownikowi na
robienie tego wszystkiego plus wiele czcionek i układów klawiatur
dla prawie wszystkich klawiatur i jest on dostępny z tego samego
miejsca, gdzie znajdują się źródła jądra.
6.2 util-linux
Rik Faith (
faith@cs.unc.edu ) złożył razem obszerną
kolekcję narzędzi do Linux-a, które dziwnym trafem nazywają się
util-linux. Obecnie zajmuje się nimi Andries Brouwer
(
util-linux@math.uio.no ). Dostępne są one poprzez
anonimowe ftp z
ftp.icm.edu.pl w katalogu /pub/Linux/sunsite/system/misc.
Zawiera ona takie narzędzia jak: setterm, rdev, czy
ctrlaltdel, które są związane z jądrem. Jak Rik twierdzi,
Nie instaluj tego zestawu bez zastanowienia. Nie trzeba
instalować całej zawartości pakietu, mogłoby to nawet spowodować
poważne problemy.
6.3 hdparm
Jak więszkość pakietów, ten był łatą i dodatkiem dla jądra. Łaty
zostały z czasem związane na stałe z jądrem, a ten program stał
się osobnym pakietem. W rękach niedoświadczonego użytkownika jest
on bardzo niebezpieczny. Więc nie używaj go jeśli nie
wiesz co robisz.
6.4 gpm
gpm - general purpose mouse czyli, w dość wolnym tłumaczeniu :),
mysz o ogólnym zastosowaniu. Program ten pozwala na przenoszenie
zawartośći pomiędzy wirtualnymi konsolami i inne pożyteczne rzeczy
jak np. tłumaczenie protokołów pomiędzy różnymi typami myszek,
używanie wielu myszek...
7. Niektóre pułapki.
7.1 make clean
Jeśli twoje nowe jądro zaczyna robić dziwne rzeczy po rutynowym
odnowieniu, przypuszczalnie zapomniałeś wydać polecenie make clean
przed kompilacją nowego jądra. Oznaki takie to może być cokolwiek
od zawieszania się systemu bez powodu, przez dziwne problemy z
funkcajmi I/O, do ślimaczej szybkości. Nie zapomnij także wydać
polecenia make dep.
7.2 Wielkie albo wolne jądro.
Jeśli twoje jadro zżera ogromną ilość pamięci, jest zbyt duże,
albo po prostu kompiluje się w nieskończoność nawet jeśli masz
swoje nowiutkie Quadbazillium-III/4400, najprawdopodobniej skonfigurowałeś
niepotrzebnie pełno sterowników. Jeśli czegoś nie używasz, to nie
konfiguruj, bo to naprawdę zabiera niepotrzebnie pamięć.
Najbardziej oczywistym symptomem przy zbyt dużym jądrze jest
bardzo częste swapowanie (jeśli twój dysk ciągle rzęzi, a nie
jest jednym z tych starych orłów Fujitsu, które brzmią jak
lądujący odrzutowiec, przejrzyj konfigurację swojego jądra).
Możesz dowiedzieć się ile pamięci zabiera twoje jądro odejmując
wartość total mem z pliku /proc/meminfo albo z
polecenia free od całkowitej ilości pamięci w twoim
komputerze.
7.3 Port równoległy nie działa/moja drukarka nie działa.
Opcje które musisz włączyć na PC-cie to: Najpierw w sekcji
"General Setup" włącz "Parallel port
support" oraz "PC-style hardware". Następnie w
sekcji "Character devices" włącz "Parallel
printer support".
No i potem zostają nazwy. W wersji 2.2 zastosowano inne nazwy niż w
starszych wersjach. Powodem tego jest, to że w starym jądrze miałeś
lp1 a teraz jest to lp0. Spójrz do dmesg albo w
katalogu /var/log/.
7.4 Jądro się nie kompiluje.
Jeśli się rzeczywiście nie kompiluje, to pewnie jakaś łata się nie
zainstalowała poprawnie. Twoja wersja "gcc" może także być
nie w porządku. Albo pliki nagłówkowe są skopane. Upewnij się
także czy symboliczne dołączenie, o których Linus pisze w README,
są poprawnie zrobione. W ogólności jeśli standardowe jądro się nie
kompiluje, to coś poważnego jest z systemem i niezbędna jest
ponowna instalacja niektórych narzędzi.
W niektórych przypadkach "gcc" może się wysypać z powodu
problemów sprzętowych. Komunikaty w tym przypadku to: xxx
exited with signal 15 i w ogólności są one bardzo tajemnicze.
Pewnie bym o tym nie wspominał, gdyby nie to, że mi się to
zdażyło - miałem kiedyś wadliwą pamięć cache a kompilator wtedy
hulał sobie po pamięci gdzie chciał. Najpierw spróbuj
przeinstalwać gcc. Podejrzenia na sprzęt rzucaj dopiero jeśli
jądro się kompiluje przy wyłączonym zewnętrznym cache'u, albo przy
zmniejszonej ilości pamięci RAM itp.
Z reguły ludzi to trochę denerwuje jak im powiesz, że mają popsuty
sprzęt. Cóż, ja tego nie zmyślam. Jest FAQ na ten temat -
www.bitwizard.nl/sig11/.
7.5 Nowa wersja jądra nie chce się załadować.
Albo nie uruchomiłeś lilo po skopiowaniu jądra na miejsce
starego, albo źle skonfigurowałeś. Najczęściej spotykanym
problemem jest nie wkompilowanie obsługi twoejgo dysku lub systemu
ext2. Kiedyś miałem problem z plikiem konfiguracyjnym LILO; było
tam boot = /dev/hda1 a powinno być boot =
/dev/hda. Na początku to może byc naprawdę denerwujące, ale
potem jak już masz dobry plik konfiguracyjny nie powinieneś go
zmieniać.
7.6 Zapomniałeś uruchomić lilo, albo system się w ogóle nie ładuje.
Oooj! Najlepszą rzeczą jaką można zrobić to załadować system z
dyskietki lub CDROMu (no trzeba je oczywiście mieć :) ) i przygotować nową
dyskietkę startującą (np. make zdisk). Musisz wiedzieć,
gdzie jest twój główny system plików i jakiego jest typu. (ext2,
minix). W przykładzie poniżej musisz także wiedzieć gdzie i na
jakim systemie jest /usr/src/linux i gdzie jest zwykle
zamontowany.
W następującym przykładzie "/" to /dev/hda1, a partycja, na której
znajduje się katalog linux to /dev/hda3 normalnie montowana na
/usr. Działające jądro jest w katalogu
/usr/src/linux/arch/i386/boot i nazywa się bzImage.
Pomysł polega na tym, że jeśli masz działające bzImage, można tego
użyć dla nowej dyskietki. Inna alternatywa, która może, ale nie
musi działać (to zależy jak bardzo namieszałeś) opisana jest za
tym przykładem.
Najpierw, załaduj system z dyskietki, którą akurat masz i zamontuj
system plików, na którym znajduje się działające jądro:
mkdir /mnt
mount -t ext2 /dev/hda3 /mnt
Jeśli pojawi się komunikat, że katalog /mnt już jest - zignoruj
go. Przy mount na pewno pojawi się komunikat ostrzegający, że
montujesz niesprawdzony system plików - zignoruj go. Zmień katalog
na ten, w którym znajduje się działające jądro (pamiętaj, że teraz
masz dysk w katalogu /mnt). Umieść sformatowaną dyskietkę w stacji
A: (nie dyskietkę, z której startowałeś !!!), przerzuć jądro na
dyskietkę i skonfiguruj je dla twojego głównego systemu plików:
cd /mnt/src/linux/arch/i386/boot
dd if=bzImage of=/dev/fd0
rdev /dev/fd0 /dev/hda1
Zmień katalog na / (cd /) i odmontuj katalog /mnt (umount /mnt).
Powinieneś być teraz w stanie załadować system tak jak normalnie z
tej dyskietki. Nie zapomnij uruchomić lilo po restarcie (czy co
tam źle zrobiłeś).
Jak już wspomniałem jest jeszcze inna metoda. Jeśli masz
kopię działającego jądra, możesz jej użyć dla zrobienia dyskietki
startowej. Weźmy znów powyższe warunki i załóżmy, że działająca
kopia to /vmlinuz. Zrób to samo co powyżej z tymi zmianami:
/dev/hda3 zmień na /dev/hda1/ (gł. system plików)
/mnt/src/linux na /mnt
if=bzImage na if=vmlinuz
------------------------------------------------------------------
Od tłumacza:
Szczerze powiem/napiszę, że nie wiem po co ten człowiek tak
komplikuje sprawę. Podam tu sposób, ktorego ja używam:
Najpierw sprawdź czy masz takie linijki na początku
pliku /etc/lilo.conf:
prompt
timeout=50
Jeśli nie to je dopisz.
W swoim pliku /etc/lilo.conf mam zawsze dwie sekcje:
image=/boot/vmlinuz
label=linux
root=/dev/hda1
read-only
image=/boot/vmlinuz-old
label=linux-old
root=/dev/hda1
read-only
Ja nazywam jądra z wersją na końcu (/vmlinuz-2.0.18) i robię
symboliczne dołączenie ln -s /vmlinuz-2.0.18 /vmlinuz.
Jeśli kompiluję tę samą wersję jądra, to przed kompilacją/instalacją
ZAWSZE robię kopię jądra, które mi działa (powiedzmy
cp /vmlinuz-2.0.18 /vmlinuz.2.0.18.old);
Jak już skompiluję jądro to kopiuje je na /vmlinuz-wersja, przedtem
KOPIA !!! - tylko jeśli kompilujemy tę samą wersję jądra, którą
już używamy, bo nowsza wersja będzie miała inny numer na końcu. Po
skopiowaniu zmieniamy dołączenie symboliczne (jeśli instalujemy
nową wersję) - rm /vmlinuz; ln -s /vmlinuz-nowa_wersja /vmlinuz;
oraz ln -s /vmlinuz-2.0.18.old /vmlinuz-old;
potem uruchamiamy lilo i restartujemy komputer. Jeśli
nowe jądro nie działa, to startujemy stare jądro (wpisujemy po
pojawieniu się boot: lub LILO: na ekranie linux-old) i
po wciśnięciu ENETERa mamy znowu działający system.
Jeśli nie działające jądro było w tej samej wersji co poprzednie
(po prostu potrzebowałeś coś dodać), to trzeba uruchomić system w
trybie "single" (linux-old init single), odzyskać stare
moduły ze zrobionej poprzednio kopii katalogu
/lib/modules/x.y.z i zrestartować jeszcze raz system
pamiętając, żeby startować stare jądro. Albo po prostu zmień
odpowiednie dowiązanie /vmlinuz, żeby wskazywało też na starą
wersję jądra (ln -s /vmlinuz-x.y.z.old /vmlinuz) i NIE
ZAPOMNIJ po każdej takiej operacji uruchomić /sbin/lilo.
------------------------------------------------------------------
Używanie LILO z dużymi dyskami (z wiekszą ilością cylindrów niż
1023) może powodować problemy. Przeczytaj mini-HOWTO LILO i
Large-Drives, jeśli chcesz znać więcej szczegółów.
7.7 Pisze mi "warning: bdflush not running".
No i dobrze, że pisze, bo to może być poważny problem. Poczynając
od wersji jądra 1.0.0 (około 20 kwietnia 1994) program update,
który okresowo zapisuje zawartość bufora na dysk, został zmieniony.
Zdobądź źródła programu "bdflush" (powinieneś je znaleźć tam gdzie
jądro) i skompiluj. Dopóki nie uruchomisz tego programu radzę
używać wersji jądra starszej od 1.0.0 (Czy ta wersja jest jeszcze
do zdobycia !!!?). Instaluje się samo jako update, a po
restarcie nowe jądro nie powinno juz narzekać.
7.8 Nie mogę zmusić mojego CD-ROM-u IDE/ATAPI do współpracy.
Naprawdę dziwne. Bardzo dużo ludzi ma ten problem. Pewnie dlatego,
że jest dużo przypadków, w których to się może dziać.
Jeśli twój CD-ROM to jedyne urządzenie na konkretnym interfejsie
IDE, musi być skonfigurowany zworkami jako master lub single. To
jest najczęstszy problem.
Creative Labs umieszcza teraz interfejs IDE na swoich kartach
dźwiękowych. To prowadzi do ciekawego problemu, bo niektórzy mają
tylko jeden interfejs IDE, wielu ma dwa interfejsy IDE na swoich
płytach głównych (zwykle na IRQ15), więc najpopularniejszym
rozwiązaniem jest uczynić interfejs na karcie dźwiękowej trzecim
(IRQ11, a przynajmniej tak mi mówili).
To powoduje w Linux-ie problemy, ponieważ wersja 1.2.x nie obsługuje
trzeciego interfejsu IDE (obsługa jest w którejś z wersji 1.3.x,
ale pamiętaj - to jest wersja testowa, i nie wykrywa sama tego
interfejsu). Aby to obejść masz trzy możliwości:
Jeśli masz już drugi interfejs, to przełóż CD-ROM na ten drugi
interfejs jeśli jest wolny. Możesz wtedy wyłączyć interfejs z
karty dźwiękowej, co zachowa jedno IRQ.
Jeśli nie masz drugiego interfejsu, ustaw interfejs na karcie
dźwiękowej (ale nie ten od dźwięku, tylko IDE) na przerwanie IRQ15
za pomocą zworek. Powinno działać.
7.9 Pisze coś o przestarzałym rutingu.
Weź nową wersję programu route i wszelkie inne programy,
które się zajmuja rutingiem.
/usr/include/linux/route.h (który właściwie jest plikiem
w /usr/src/linux) sie zmienił.
7.10 Firewall mi nie działa w wersji 1.2.0
Weź wersję co najmniej 1.2.1.
7.11 "Not a compressed kernel Image file".
Nie używaj jako jądra pliku vmlinux w katalogu
/usr/src/linux stworzonego podczas kompilacji. Plik,
który powinieneś użyć to:
/usr/src/linux/arch/i386/boot/bzImage.
7.12 Problemy z konsolą po odnowieniu do wersji 1.3.x.
Zmień słowo dumb na linux w pliku /etc/termcap
w sekcji dotyczącej konsoli. Mozliwe też, że będziesz musiał
zrobić terminfo.
7.13 Nie mogę skompilować różnych rzeczy po odnowieniu jądra.
Źródła jądra zawierają pewną liczbę plików nagłówkowych (te co się
kończą na .h), do których odwołują się standardowe pliki
nagłówkowe w /usr/include. Przeważnie wygląda to tak:
#include <linux/xxyy.h>
Zwykle w katalogu /usr/include jest symboliczne
dołączenie linux wskazujące na /usr/src/linux/include/linux.
Jeśli dołączenia tego nie ma, albo wskazuje na złe miejsce, to
rzeczywiście większość programów się nie skompiluje. Jeśli
zdecydowałeś, że źródła zajmują za dużo miejsca na dysku i
skasowałeś je, to to jest właśnie twój problem. Razem z tymi
źródłami skasowałeś pliki nagłówkowe. Inny problem to problem z
dostępem do plików: Jeśli twój root ma umask ustawiony tak, że
użytkownicy nie mogą widzieć plików przez niego stworzonych, i
rozpakowałeś źródła bez opcji p (zachowaj oryginalne flagi
dostępu), użytkownicy nie będą mogli użyć kompilatora. Najprościej
naprawić to w ten sposób:
zaloguj się jako root
cd /usr/src/linux/
chmod -R go+r include/
7.14 Zwiększanie limitów.
Kilka następujących przykładowych poleceń może pomóc tym,
którzy zastanawiają się jak zwiększyć pewne programowe
ograniczenia wprowadzone przez jądro:
echo 4096 > /proc/sys/kernel/file-max
echo 12288 > /proc/sys/kernel/inode-max
echo 300 400 500 > /proc/sys/vm/freepages
8. Uwaga na temat uaktualnienia do wersji 2.0.x i 2.2.x.
Wersje jądra 2.0.x i 2.2.x wprowadziły trochę zmian w instalacji.
Plik Documentation/Changes zawiera informacje, które
powinieneś poznać, kiedy uaktualaniasz swoje jądro do którejś z
tych wersji.
Najprzypuszczalniej będziesz musiał odnowić także niektóre
kluczowe pakiety, takie jak: gcc, libc i SysVInit, i może
dostosować kilka plików systemowych. Ale nie panikuj !
9. Moduły.
Ładowalne moduły jądra mogą zaoszczędzić trochę pamięci i ułatwić
konfigurację. Obszar działania modułów urósł już do tego, że
zawierają one systemy plików, sterowniki do kart Ethernet, do
taśm, do drukarek i wiele innych.
9.1 Instalacja narzędzi modułowych.
Narzędzia te sa dostępne stamtąd, skąd masz źródła jądra. Nazywają
się modutils-x.y.z.tar.gz; wybierz najwyższą wersję równą,
albo mniejszą od wersji twojego jądra. Rozpakuj poleceniem tar
zxvf modutils-x.y.z. Wejdź do stworzonego katalogu i poczytaj
plik README. Wypełnij dokładnie instrukcje na temat instalacji
(jest ona z reguły bardzo prosta: make install lub coś
podobnego). Powinieneś mieć teraz programy: insmod, rmmod,
ksyms, lsmod, genksyms, modprobe i depmod w katalogu /sbin.
Jeśli chcesz przetestować narzędzia z przykładowym sterownikiem
"hw" w insmod; przejrzyj plik INSTALL w tym
katalogu.
insmod ładuje moduł do uruchomionego jądra. Moduły mają z
reguły roszerzenie .o; przykładowy moduł wspomniany wyżej nazywa
się drv_hello.o, a więc aby go załadować, napisz:
insmod drv_hello.o. Aby zobaczyć jakie moduły są
aktualnie używane przez jądro użyj lsmod. Powinien
wyświetlić coś takiego
blah# lsmod
Module: #pages: Usedby:
drv_hello 1
drv_hello jest nazwą modułu, używa jednej strony (4kB) pamięci i
żadne inne moduły nie zależą od niego w tej chwili. Aby usunąć ten
moduł z jądra użyj rmmod drv_hello. Zauważ, że
rmmod chce nazwy modułu a nie pliku. Weź ją z polecenia
lsmod. Inne narzędzia modułowe są opisane w podręczniku
man.
9.2 Moduły dystrybuowane z jądrem.
Jeśli chodzi o wersję 2.0.30 większość sterowników dostępna jest w
postaci modułów. Aby ich użyć, najpierw upewnij się czy nie
skonfigurowałeś ich jako stałe części jądra. To znaczy: nie
odpowiadaj "y" na pytania ich dotyczące podczas konfiguracji, ale
"m" jeśli jest taka możliwość. Po skompilowaniu jądra napisz
make modules i make modules_install. Pierwsze
polecenie skompiluje wszystkie sterowniki wyspecyfikowane jako
moduły, a drugie zainstaluje je w katalogu /lib/modules/x.y.z,
gdzie x.y.z jest wersją jądra. Po zainstalowaniu tych modułów
wejdź do katalogu /lib/modules/x.y.z i napisz modprobe -a,
jeśli masz ten program.
$lsqb;Od tłumacza] Jeśli kompilujesz jądro o wersji takie
samej jak to które używasz obecnie, to na wszleki wypadek przed
poleceniem make modules_install, zrób w katalogu
/lib/modules/ kopię katalogu o nazwie takiej samej jak wersja
obecnego jądra.
Moduły są szczególnie przydatne do systemów plików albo sterowników
urządzeń, których rzadko używasz. Np. jeśli chcesz użyć dyskietki
msdos, to najpierw piszesz insmod /lib/modules/x.y.z/fs/msdos.o
i używasz tej dyskietki. Po skończeniu piszesz rmmod msdos.
Operacja ta zaoszczędza jakieś 50 kB RAM-u - niby nic ale jak się
uzbiera kilka takich sterowników to docenisz tę zaletę. Co do
systemu plików minix to powinien on być zawsze
wkompilowany w jądro na stałe, w razie użycia dyskietki startowej.
Na dyskietkach jest właśnie minix.
------------------------------------------------------------------
Od tłumacza:
Znowu facet skomplikował sprawę.
Jest narzędzie, które zajmuje się za ciebie ładowaniem i usuwaniem
odpowiednich modułów do i z pamięci. Nazywa się kerneld
czyli kernel daemon. Jeśli użyjesz czegoś co wymaga sterownika w
module, kerneld załaduje za ciebie ten moduł, a potem go wyrzuci jak
już przestaniesz tego używać. Aby go użyć musisz odpowiedzieć na pytanie
konfiguracyjne dotyczące kerneld "Kernel daemon support"
"y". Przedtem jeszcze odpowiedz "y" na pytanie "Modules support"
czy jakoś tak, żeby móc w ogóle używać modułów. Po kompilacji
jądra wszystko idzie tak samo jak opisane powyżej. Jeszcze jedno:
jeśli masz dystrybucję RH to sprawdź czy w pliku
/etc/rc.d/rc.sysinit jest uruchamiany /sbin/kerneld.
Jeśli nie, to sprawdź czy uruchamia się tam program depmod.
jeśli też nie to dopisz te linijki:
/sbin/depmod -a
if [ -x /sbin/kerneld ]; then
/sbin/kerneld
fi
za linijką która wygląda mniej więcej tak:
mount -n -o remount,rw /
Jeśli masz Slackware sprawdź czy w pliku /etc/rc.d/rc.M
jest uruchamiany /sbin/kerneld. Jeśli nie, to sprawdź czy uruchamia
się tam program depmod. Jeśli też nie, to dopisz te linijki
/sbin/depmod -a
if [ -x /sbin/kerneld ]; then
/sbin/kerneld
fi
za linijką która wygląda mniej więcej tak:
mount -n -o remount,rw /
Jeśli masz dystrybucję Debian to:
1) sprawdź czy jest plik /etc/init.d/kerneld, jeśli tak to
2) sprawdź czy w /etc/rcX.d/ jest dowiązanie do tego pliku
(będzie to plik SYYkerneld), jeśli jest, to wszystko jest w
porządku. X - numer runlevel-u który standardowo uruchamiasz.
(sprawdź w pliku /etc/inittab linijkę initdefault)
Jeśli któryś z tych warunków jest niespełniony to:
ad 1) załóż plik /etc/init.d/kerneld o treści:
#!/bin/bash
# source function library
. /etc/rc.d/init.d/functions
case "$1" in
start)
echo -n "Starting kerneld "
if [ -f "/sbin/kerneld" ]; then
/sbin/kerneld
/sbin/depmod -a
fi
touch /var/lock/subsys/kerneld
;;
stop)
echo -n "Shutting down kerneld: "
killproc kerneld
rm -f /var/lock/subsys/kernled
echo
;;
*)
echo "Usage: kerneld {start|stop}"
exit 1
esac
exit 0
ad 2) napisz
cd /etc/rcX.d/
ln -s /etc/init.d/kerneld SYYkerneld
YY musi być numerem przed ładowaniem modułów; najlpiej jak
najwcześniej.
------------------------------------------------------------------
10. Sztuczki i wskazówki.
10.1 Przekierowywanie wyjścia z poleceń make i patch.
Jeśli chciałbyś mieć zapisane w pliku to co działo się podczas
wykonywania poleceń make i patch, możesz przekierować
wyjście tych komend do pliku. Najpierw dowiedz się w jakiej
powłoce pracujesz:
echo $shell
Jeśli jest to /bin/sh albo /bin/bash, wtedy przekierowywanie
wyjścia wygląda tak:
polecenie 2>&1 | tee nazwa_pliku_do_zapisania
Jeśli jest to /bin/csh albo /bin/tcsh, to wygląda to tak
polecenie |& tee nazwa_pliku_do_zapisania
Jeśli używasz rc (a raczej nie używasz), wtedy wygląda to tak:
polecenie >[2=1] | tee nazwa_pliku_do_zapisania
10.2 Instalacja warunkowa jądra.
Są jeszcze inne metody testowania nowego jądra bez ruszania starego,
oprócz tych z dyskietkami. LILO ma możliwość ładowania jądra z
jakiegokolwiek miejsca na dysku (jeśli twój dysk ma więcej niż
1023 cylindry [512 MB lub więcej], przeczytaj dokumentację LILO,
żeby dowiedzieć się jakie są z tym związane problemy). Tak więc
jeśli dodasz takie linie:
image = (tu wstaw katalog, w którym znajduje się nowe jądro)
label = new_kernel
na końcu pliku konfiguracyjnego LILO, możesz wybrać jakie jądro
chcesz ładować, bez ruszania starego jądra (po wykonaniu lilo
oczywiście). Najprostszym sposobem poinformowania LILO, które
jądro chcemy załadować jest wciśnięcie klawisz SHIFT podczas
startu (w momencie kiedy na ekranie pojawi się "LILO"). Wtedy
pojawi się znak zachęty. Wpisując tu new_kernel, lub
nazwę, którą nadałeś w pliku konfiguracyjnym LILO nowemu jądru,
poinformujesz LILO, żeby załadowało nowe jądro.
Jeśli chcesz trzymać kilka różnych źródeł jądra na dysku (to
zabiera DUŻO miejsca - ostrożnie) najprostszym sposobem
jest nazywanie ich linux-wersja_jądra. Musisz wtedy zrobić
symboliczne dołączenie ln -s linux-wersja linux żeby
używać wybranej wersji. Przed zrobieniem takiego dołączenie
upewnij się, że ostatni parametr do "ln" nie jest katalogiem, bo
wtedy nie będzie to to, czego się spodziewałeś.
10.3 Odnowienia jądra.
Russel Nelson (
nelson@crynwr.com ) umieszcza zmiany jakie
zaszły w bieżącej wersji jądra. Są one krótkie i możesz zajrzeć
tam zanim postanowisz odnowić jądro. Są one dostępne poprzez
anonimowe ftp z ftp.emlist.com w katalogu pub/kchanges
lub poprzez WWW -
http://www.crynwr.com/kchanges.
Spis zmian możesz znaleźć także w
ftp.icm.edu.pl w katalogu /pub/Linux/sunsite/kernel/changes.
11. Inne dokumenty HOWTO, które mogą się przydać to:
Sound-HOWTO: karty dźwiękowe i narzędzia do nich
SCSI-HOWTO: wszystko na temat kontrolerów i urządzeń SCSI
NET-3-HOWTO: wszystko o sieci
PPP-HOWTO: protokół PPP w Linux-ie
PCMCIA-HOWTO: o sterownikach do twojego Notebook-a
ELF-HOWTO: ELF: co to ELF
Hardware-HOWTO: przegląd obsługiwanego przez Linux-a sprzętu.
Module-HOWTO: więcej na temat modułów.
Kerneld mini-HOWTO: na temat kerneld.
BogoMips mini-HOWTO: w razie gdybyś chciał wiedzieć
12. Różności
12.1 Od autora.
Autorem i człowiekim opiekującym się tym dokumentem jest
Brian Ward
bri@cs.uchicago.edu
Proszę przysyłać mi wszelkie komentarze, dodatki, poprawki (te są
najważniejsze).
Jak chcesz możesz zajrzeć na moją stronę WWW:
<htmlurl url="http://www.math.psu.edu/bri/" name="www.math.psu.edu/bri/">
Pomimo, iż staram się odpowiadać na pocztę kiedy tylko mogę, to
musisz pamiętać, że dostaje dużo listów codziennie. Więc
odpowiedzenie na twój list może zająć trochę czasu. Szczególnie
jeśli wysłałeś mi jakieś pytanie, spróbuj być jak najbardziej
dokładny. Jeśli piszesz o niedziałającym sprzęcie (czy coś
podobnego) muszę wiedzieć jaka jest konfiguracja tego sprzętu.
Jeśli piszesz o błędzie, to nie pisz, że "próbowałem, ale nie
działa..." Muszę znać chociaż błąd jaki się pojawił. Chciałbym
także wiedzieć jaka była wersja jądra, gcc i libc. Jeśli powiesz
mi, że używasz tej-i-tej dystrybucji to mi wiele nie powie. Nie obchodzi
mnie to, że zadajesz proste pytania. Kto pyta, nie błądzi!
Chciałbym podziękować wszystkim, którzy wspierali mnie podzas
pisania tego dokumentu.
Jeśli twoje pytanie nie było związane z jądrem albo jest w jakimś
języku, którego nie znam, to mogę nie odpowiedzieć.
Jeśli wysłałeś do mnie list i nie otrzymałeś odpowiedzi w jakimś
sensownym czasie (3+ tygodni). To całkiem możliwe, że przypadkowo
skasowałem twój list (przepraszam). Napisz jeszcze raz.
Dostaję dużo poczty z pytaniami, które są właściwie problemami
sprzętowymi. W porządku, ale pamiętaj, że przecież nie znam
wszystkich urządzeń na świecie i nie wiem na ile mogę być pomocny.
Osobiście używam maszyn z procesorem AMD, kontrolery SCSI Adaptec
i Sybios oraz dyski SCSI IBM.
Wersja -0.1 została napisana 3 października 1994. Dokument ten
jest dostępny w formatach: SGML, PostScript, TeX, roff i jako
czysty tekst.
12.2 Co jest jeszcze do zrobienia.
Sekcja na temat sztuczek i wskazówek jest jeszcze trochę mała. Mam
nadzieję, że się rozrośnie wraz z przybywaniem sugestii.
To samo odnosi się do sekcji pakiety dodatkowe.
Potrzeba mi więcej informacji na temat śledzenia (debugging) i
odzyskiwania po padach systemu.
12.3 Oto ci, którzy się przyczynili do powstania tego HOWTO.
Dołączona jest mała część README Linusa na temat opcji rozgryzania
jądra.(kernel hacking) (Dzięki Ci Linus!)
uc@brian.lunetix.de (Ulrich Callmeier): polecenia patch -s, xargs.
quinlan@yggdrasil.com (Daniel Quinlan): poprawki i dodatki
do wielu sekcji.
nat@nataa.fr.eu.org (Nat Makarevitch): mrproper, tar -p i
wiele innych
boldt@math.ucsb.edu (Axel Boldt): uzbierany spis opcji
konfiguracyjnych jądra dotyczących sieci. Przesłane mi.
lembark@wrkhors.psyber.com (Steve Lembark): sugestie
odnośnie wyboru jądra przy starcie.
kbriggs@earwax.pd.uwa.edu.au (Keith Briggs): kilka
sugestii i poprawek.
rmcguire@freenet.columbus.oh.us (Ryan McGuire): dodatki
na temat "make"
dumas@excalibur.ibp.fr (Eric Dumas): tłumaczenie francuskie
simazaki@ab11.yamanashi.ac.jp (Yasutada Shimazaki):
tłumaczenie japońskie
jjamor@lml.ls.fi.upm.es (Juan Jose Amor Iglesias):
tłumaczenie hiszpańskie
mva@sbbs.se (Martin Wahlen): tłumaczenie szwedzkie
jzp1218@stud.u-szeged.hu (Zoltan Vamosi): tłumaczenie
węgierskie
B.Maruszewski@jtz.org.pl (Bartosz Maruszewski):
tłumaczenie polskie
donahue@tiber.nist.gov (Michael J Donahue): korekta
literówek, wygrał konkurs o kromkę chleba
rms@gnu.ai.mit.edu (Richard Stallman): pomysł na
bezpłatną dokumentację i dystrybucję
dak@Pool.Informatik.RWTH-Aachen.DE (David Kastrup): NFS
esr@snark.thyrsus.com (Eric Raymond): różności.
Ci, którzy przysyłali mi pytania z problemami także byli pomocni.
12.4 Prawa autorskie, licencja i takie inne.
Dokument chroniony prawami autorskimi © Briana Warda,
1994-1999.
Można rozprowadzać kopie tego dokumentu o ile na wszystkich będzie
zachowana uwaga o prawach autorskich i to pozwolenie.
Można kopiować i dystrybuwać ten dokument w wersji modyfikowanej
pod warunkiem dosłownego kopiowania zakładając, że praca pochodna jest
dystrybuowana z takimi samymi prawami jak ten dokument.
Tłumaczenia zaliczają się także do wersji modyfikowanych.
Gwarancja: Żadna.
Zalecenia:
Dystrybucja komercyjna jest dozwolona. Jednak zaleca się najpierw
kontakt z autorem, aby mieć najświeższe dane (możesz mi wysłać
kopię tego co chcesz dystrybuować). Tłumacze są także zobowiązani
najpierw się skontaktować ze mną. Wersja wydrukowana wygląda o
wiele ładniej.
12.5 Od tłumacza.
Tłumaczenie to jest chronione prawami autorskimi © Bartosza
Maruszewskiego.
Dozwolone jest rozprowadzanie i dystrybucja na prawach takich
samych jak dokument oryginalny.
Jeśli znalazłeś jakieś rażące błędy ortograficzne, gramatyczne,
składniowe, techniczne to pisz do mnie:
B.Maruszewski@jtz.org.plOficjalną stroną tłumaczeń HOWTO jest
http://www.jtz.org.pl/Aktualne wersje przetłumaczonych dokumentów znajdują się na
tejże stronie. Dostępne są także poprzez anonimowe ftp pod adresem
ftp.jtz.org.pl w katalogu /pub/Linux/JTZ/.
Przetłumaczone przeze mnie dokumenty znajdują się także na
mojej stronie WWW. Są tam też odwołania do Polskiej Strony
Tłumaczeniowej.
Kontakt z naszą grupą, grupą tłumaczy możesz uzyskać poprzez listę
dyskusyjną jtz@ippt.gov.pl. Jeśli chcesz sie na nią zapisać, to
wyślij list o treści subscribe jtz Imię Nazwisko na adres
majordomo@ippt.gov.pl
Zmiany w tym dokumencie wprowadzone przez tłumacza to:
- dodatkowy sposób na załadowanie dobrego jądra
- informacja o kerneld
- a także odnośniki do polskich serwerów ftp i WWW
Wyszukiwarka
Podobne podstrony:
Kernel HOWTO pl 12 (2)Kernel HOWTO pl 9 (2)Kernel HOWTO pl 6 (2)Kernel HOWTO pl 4 (2)Kernel HOWTO pl 7 (2)Kernel HOWTO pl 5 (2)Kernel HOWTO pl 2 (2)Kernel HOWTO plKernel HOWTO pl 11 (2)Kernel HOWTO pl 1 (2)Kernel HOWTO pl 10 (2)Kernel HOWTO pl 3 (2)Kernel HOWTO pl (3)Kernel HOWTO pl 8 (2)bootdisk howto pl 8PPP HOWTO pl 6 (2)NIS HOWTO pl 1 (2)kernel howto 3 clbigwpagydoy3epnkmic3ys7wlqwsg4rlwwgvq clbigwpagydoy3epnkmic3ys7wlqwsg4rlwwgvqcdrom howto pl 1więcej podobnych podstron