Linuxové noviny | Prosinec 1997 | ||||
| |||||
Úvodem si řekněme několik důvodů, proč se vůbec jádra překládají. Drtivá většina distribucí v současné době obsahuje modulární jádro, které se skládá ze základního jádra, jehož možnosti se rozšiřují nahráváním modulů. Prvním důvodem pro překlad je přeložení základních ovladačů, které jádro potřebuje pro náš hardware, přímo do jádra. To má jednak výhodu v jednodušší konfiguraci systému, protože není nutné natahovat moduly ručně, resp. ze startovacích skriptů a navíc některé ovladače umí v nemodulární verzi najít svůj hardware bez nutnosti zadávat další konfigurační parametry při startu jádra. Zvláště u serverů bych překlad ovladačů do jádra velmi doporučoval. Má to i další výhodu, takové jádro je možné nahrát na jednu disketu a pokud nám nejde namountovat hlavní disk, můžeme nastartovat z této diskety a máme všechno přístupné. Dalším důvodem pro překlad je zavedení podpory pro specifické zařízení. Poměrně typickým zástupcem této skupiny je řadič pevného disku s obvodem UMC, u kterého je možné po překladu jádra s podporou pro UMC dosáhnout několikanásobného zvýšení rychlosti čtení z disku. U karet NE* je možné nastavovat adresy, na kterých se karta hledá a ovladač lze potom použít i na noname PCI karty kompatibilní např. s NE2500 bez dalších parametrů při startu jádra. Další skupinou důvodů jsou různé upgrady jádra. Ty jsou nutné buď pro zacelení bezpečnostních děr nebo pro odstranění chyb. Případně pro rozšíření možností jádra. Tady jmenujme např. patche pro možnost čtení dat z CD ve formátu joliet nebo podporu tzv. FAT32. Dalším důvodem pro kompilaci může být optimalizace jádra z hlediska velikosti nebo výkonu. Optimalizací na výkon se vůbec nebudeme zabývat, není to nic jednoduchého. Jediné co lze snadno ovlivnit je optimalizace jádra pro konkrétní procesor. Všechna jádra používaná pro prvotní instalaci jsou přeložena pro 386. Pokud máme Pentium Pro, je škoda jeho možností nevyužít a nepoužívat vylepšené instrukce. Z hlediska velikosti se jádro optimalizuje tím, že se přeloží jen skutečně potřebné věci, ale v dnešní době dimenzování počítačů na produkty firmy Microsoft je ušetření několika desítek kilobytů paměti zanedbatelné, zvláště u systému, který nemá omezení 640 kilobytů paměti na běh programů. Je třeba upozornit na to, že jádro optimalizované pro Pentium nemusí běžet na intelských klonech od AMD nebo Cyrix, ty potřebují jádro přeložené pro 386. Pokud jsem Vás přesvědčil, že byste měli s Vaším jádrem něco udělat, čtěte dále, neboť se konečně dostáváme k tomu jak to udělat.
Získání a příprava jádraPrimárním server, odkud je možné jádro získat je ftp://ftp.kernel.org. Jádro se nachází v adresáři /pub/linux/kernel a dále podle verze buď v adesáři v2.0 nebo v2.1. Verze, které mají na druhé pozici liché číslo jsou vývojové a sudé jsou tzv. stabilní. Výhodou vývojových verzí je obvykle širší podpora speciálního hardware, ale nejsou tolik vyzkoušené a proto se nehodí pro kritické aplikace a pro začátečníky také ne. Sice zřídka, ale přece se občas dostane do světa vývojová verze, která nejde přeložit bez oprav přímo ve zdrojových textech. V adresáři s jádrem se vždy vyskytuje soubor LATEST-IS-2.0.32, kde číslo v názvu udává poslední verzi jádra. Jádro si musíme stáhnout na náš počítač. Vhodný postup je následující.
cd /usr/src ftp ftp.kernel.org ftp Login@Pocitac.Domena.cz cd /pub/linux/kernel/v2.0 binary get linux-2.0.32.tar.gz bye Potom jádro rozbalíme
tar xvzf linux-2.0.32.tar.gz Parametry příkaru tar znamenají eXtract=rozbal, Verbose=piš co se děje, gunZip=dekomprimuj, File=načti archív ze souboru. Tip: Pokud používáte distribuce Red Hat nebo Debian, nainstalujte si balík kernel source, pomocí tzv. dependencies (závislostí) se zároveň instalují všechny programy pro překlad potřebné. Jádro, které již pravděpodobně bude poněkud zastaralé, můžete potom smazat. Aby mohlo být jádro přeloženo musí existovat následující odkazy. To se ověří např. následujícími příkazy:
cd /usr/include ls -l linux asm scsikteré musí zobrazit příslušné symbolické odkazy
asm -> /usr/src/linux/include/asm/ linux -> /usr/src/linux/include/linux/ scsi -> /usr/src/linux/include/scsi/Pokud tyto odkazy neexistují, je nutné je vytvořit, a to následovně:
cd /usr/include rm -rf asm linux scsi ln -s /usr/src/linux/include/asm asm ln -s /usr/src/linux/include/linux linux ln -s /usr/src/linux/include/scsi scsi Dále je nutné mít v záloze kernel starý. Je to sice nepopulární, ale zálohovat je nutné. Je lepší dělat zálohy hned dvě. První na disketu, to je velmi snadné, nejdříve je ale nutné vědět, kde se kernel v naší distribuci nachází, bude to buď v /vmlinuz nebo /boot/vmlinuz, efektivní metoda jak to zjistit je použití příkazu
more /etc/lilo.confa najít řádek na kterém je napsáno image=.... Jádro překopírujeme na disketu, která neobsahuje žádná podstatná data (v průběhu akce bude smazána) příkazem
dd if=/boot/vmlinuz of=/dev/fd0přičemž první parametr nahradíme skutečnou cestou k jádru a druhý reprezentuje disketu v mechanice. Tímto je vytvořena bootovací disketa. Dále je vhodné zkopírovat jádro do zálohy, např. takto:
cp /boot/vmlinuz /boot/vmlinuz.olda opravit konfigurační soubor /etc/lilo.conf. Pro úpravu je vhodné použít např. textový editor joe, který má ovládání obdobné jako textový editor Word Star, z nehož vychází ovládání většiny dosových programů. Editor je nutné instalovat zvlášť, distribuce jej obvykle nemají ve standardních volbách. Výsledný soubor by měl vypadat přibližně tak, jak je uvedeno na výpisu Soubor lilo.conf. Pokud je v originále v sekci image nějaký další parametr, jako např. initrd=, musí být také v sekci old.
Nyní je bezpodmínečně nutné zadat příkaz lilo. To je nutné po každé změně jádra nebo konfiguračního souboru /etc/lilo.conf. Nyní je příprava k překladu hotová.
Konfigurace jádraJádro lze konfigurovat v zásadě třemi způsoby. První funguje téměř vždy, ale není tak komfortní jako další dvě varianty. Vyvolá se příkazemmake configv adresáři /usr/src/linux. Postupně se dotazuje na různé parametry a požadavky uživatele. Mnohem lepší jsou další dvě varianty. Nejkomfortnější z nich je příkaz make xconfigkterý je nutné spouštět z běžícího X-serveru, tedy nejlépe z xtermu. Po chviličce překladu se objeví okno, ve kterém lze postupně vybrat všechny parametry a požadavky. V případě potřeby se ke každé volbě dá zobrazit nápověda. Tam kde uživatel neví co vybrat, lze doporučit nechat původní nastavení. U některých položek je možné kliknout do sloupce M a ovladač nebo něco jiného se přeloží jako modul.
Poslední variantou je
make menuconfig Opět pomocí systému menu umožňuje vybrat vše potřebné. Při konfiguraci jádra je nutné znát velice přesně konfiguraci počítače. Pokud počítač obsahuje noname karty, je vhodné vědět, jaké obsahují čipy. Není vyloučeno, že čip má v jádře podporu. Jemné doladění lze provést ještě přímo ve zdrojových textech jednotlivých ovladačů. Drtivá většina z nich je rozdělena na dvě části, první je určena k editaci a druhá ne. Co je možné editovat se pozná snadno, obvykle je to bohatě popsané a okomentované. Např. u síťových karet je možné nastavit vlastní adresy, na kterých se má karta hledat. Je potřeba dát pozor na to, že adresy, které píše počítač při startu jsou v hexadecimálním tvaru a musí se zadávat ve tvaru 0x000, třeba pro síťovou kartu sídlící na typické adrese 300 je nutné zadat 0x300. Pokud je vše nastaveno, lze spustit překlad příkazem
make Pro vyzkoušení jádra se překlad spustí příkazem
make bzdisks vloženou novou disketou v mechanice a:. To zajistí, že se nové jádro po překladu nakopíruje na disketu a z ní je možné pokusně nabootovat. Hlášky, které systém při startu vypsal si lze prohlédnout stiskem kláves SHIFT a PGUP případně PGDOWN. (Tato kombinace nefunguje, pokud v průběhu startu natahujete obrazovkové fonty, např. češtinu. Natažení totiž maže buffer videokarty.) Pokud je vše v pořádku a počítač se rozběhne, je možné přeložit jádro přímo na disk, to se dělá příkazem
make bzlilo Pokud byl některý ovladač vybrán jako modul, je nutné přeložit moduly. Tady mohou nastat dvě situace. Buď překládáte jádro stejné verze jako provozujete, nebo se jedná o jádro novější. V prvním případě přejmenujte adresář /lib/modules/verze_jádra na /lib/modules/verze_jádra.old, moduly tam uložené by jinak nesouhlasily s verzí jádra a nebyly by splněny všechny závislosti. V obou případech je možné po vyzkoušení jádra adresář definitivně smazat. Potom je již možné přeložit moduly. K tomu slouží příkaz
make modulesPokud proběhne úspěšně, je možné moduly instalovat příkazem
make modules_install
Jak se moduly používajíModul lze do jádra vložit dvěma způsoby - manuálně, nebo si jej jádro pomocí démona, který se jmenuje kerneld, natáhne samo. Druhá metoda není všemocná, ale pro natažení podpory PPP protokolu při startu pppd ji lze použít. Chování kerneld se řídí jeho konfiguračním souborem /etc/conf.modules. Příklad takového souboru je na výpisu Soubor /etc/conf.modules.
Pokud nejsou uvedeny aliasy pro net-pf-?, hlásí kernel při startu např.
cannot locate net-pf-4 modulecož není žádná zásadní závada. Pro úplnost budiž uvedeno, že soubor conf.modules se může jmenovat i modules.conf, protože kerneld hledá obě varianty. Alias zpřístupňuje jádru modul pod dalším jménem. Jádro při potřebě ovladače síťové karty natahuje modul eth0, který neexistuje a proto je nutné pomocí aliasu "označit" ten správný. Řádek obsahující options definuje standardní parametry pro start modulu. Pokud je modul natahován z příkazové řádky, mají na ní uvedené parametry přednost. Druhou možností je vložit modul do jádra ručně. K tomu lze použít dva příkazy, vhodnější je
modprobe název_modulu případné_parametryTento příkaz také využívá parametry nastavené v konfiguračním souboru /etc/conf.modules. Umí si sám najít, které další moduly jsou případně pro činnost požadovaného modulu nutné a natáhne je. Pokud má korektně fungovat, je nutné před prvním použitím vytvořit zadáním příkazu
/sbin/depmod -aseznam závislostí mezi moduly. Většina distribucí tento příkaz spouští při každém startu. Další možností je příkaz insmod, který dokáže vložit modul o něco "agresivněji" než modprobe. Modprobe tento příkaz volá pro natažení modulu po kontrole verze a závislostí. Pro začátečníka nemá tento příkaz, podle mého názoru, žádný význam. Pokud není modul po nějakou dobu používán a byl natažen přes kerneld, je automaticky z jádra vyjmut. Většinou se tak stane po 1 minutě. Ručně natažený modul zůstává v jádře trvale. Odstraní se příkazem
rmmod jméno_modulu Pokud jméno není známé, nebo chceme vědět jaké moduly jádro aktuálně používá, zadáme příkaz
lsmod Informace o modulech v jádře lze získat také příkazem
cat /proc/modules
ZávěremNakonec bych ocitoval několik rad, které lze najít v dokumentaci k jádru, která je uložena v adresáři /usr/src/linux/Documentation. Obsahuje mnoho pokynů ke konfiguraci konkrétních periferií, nastavení jednotlivých karet, kompatibilitě jednotlivých výrobků a podobně.Nejdůležitější jsou dva soubory - README, ve kterém je popsána instalace jádra a Changes, který obsahuje popis novinek a požadavků pro překlad jádra. Speciálně v případě vývojové řady je často nutné upgradovat některé programy, jako gcc, linker apod. Jak na to, a kde se nové verze nachází je popsáno právě v tomto souboru. Vývojáři radí nepoužívat zbytečně ovladače, které nejsou potřeba. Některé karty se totiž mohou při hledání zařízení cizím ovladačem zaseknout a potom není možné kartu ovládat ani korektním ovladačem. Dále není vhodné zapínat ladící parametry jádra (Kernel Profiling), protože takové jádro je pomalejší a potenciálně méně stabilní. Tyto volby jsou určeny především pro vyhledávání chyb a ladění jádra. Přeji vám mnoho štěstí při kompilaci jádra. |