Jak skompilovat FreeBSD jádro

03.06.2002 17:54 | blackhole

Co je jádro?
Jádro v operačních systémech unixového typu plní velice významnou úlohu. Ošetřuje správu paměti, ověřuje uživatelská práva, stará se o obsluhu HW a v neposlední řadě obstarává multitasking. Jak vidno celkem užitečný kousek softu.

GENERIC jádra
Pokud si nainstalujete FreeBSD (obecně to platí o všech BSD, ale já budu mluvit jen o FreeBSD) máte k dispozici a používáté tzv. GENERIC jádro. Je to jádro, které má podporu všeho možného hardwaru a je koncipováno jak všeobecně použitelné. Potud samé kladné vlastnosti. Ovšem musíme si uvědomit, že vše něco stojí - v tomto případě je to výkon. Při bootu se musí kontrolovat existence a případná konfigurace všeho toho balastu, jádro má myslím kolem 3MB (jádro nelze odswapovat na disk!) a celé je to optimalizované pro mírně archaický procesor
řady 386. Proto se většina lidí rozhodne skompilovat jádro vlastní – obrovská to výhoda open-source softwaru

Jak na to?
Nutným předpokladem je mít nainstalovány zdrojové soubory, nějaký ten kompilátor (nejspíše GCC) a pár dalších prográmků. Pokud tohle všechno máte tak stačí jen zadat v příkazové řádce cd /usr/src/sys. Těd je nutno si uvědomit jakouže to používáme architekturu. Dovolím si předpokládat, že se jedná o platformu PC - tj. procesor 386 kompatibilni. Takže skočíme do adresáře i386 (název architektury) a zde poté do conf. Tady nalezneme minimálně dva soubory. GENERIC a LINT. GENERIC je konfigurační soubor pro všudespustitelné jádro, LINT
je popis všech možných konfigurací.

Konfigurace I
Jádro je nutno zkonfigurovat. Ve FreeBSD nenaleznete žádné blbosti typu make config/menuconfig/xconfig, které stejně jen zdržují. Navíc původní myšlenka unixu byla v textových konfiguračních souborech, ne? Takže se do toho vrhneme. Principielně můžeme konfiguraci napsat celou znova nebo jen upravit nějakou existující, k tomu se výborně hodí zde přítomný soubor GENERIC. Zkopírujeme si jej tedy cp GENERIC NEWKERNEL a spustíme svůj oblíbený editor (tedy Vim). Vzhledem k lidské paměti je extrémně výhodné mít otevřeny buď dva editory ve
dvou různých konsolích, nebo v editoru dva soubory. V jednom budeme editovat náš konfigurák a v druhém bude LINT. Pokud používáte Vim tak je vhodné si nastavit syntax-highlighting na sh (set syntax=sh).

Konfigurace II
Teď zkonfigurujeme soubor. Vzhledem k různorodosti hardwaru nebudu popisovat všechno, jen bych poznamenal několik vychytávek, které by mohly člověka zmást. * maxuser - to není maximální počet uživatelů, kteří se mohou logovat do systému! Toto číslo jen ovlivňuje několik maker, která udávají velikost různých struktur apod. Pokud byste měli problémy tak se radši mrkněte do FAQ či jiné dokumentace. * FFS - i když FreeBSD podporuje moduly nahrávatelné do jádra rozhodně vám nenabootuje pokud nebude znát FS kořenového adresáře!! Taky bych doporučoval
skompilovat SOFTUPDATES. Ty poté zapnete pomocí tunefs.
* sc0 - bez konsole se také nehnete :-)
* pcm - pokud chcete zvukovku...
* Pseudo devices - pokud hodláte např. experimentovat s IPv6 tak zde máte
příležitost nastavit tunelování apod.
* síťové karty - BSD nepoužívá rozhraní eth ale název karty, takže např.
3c509 se nebude konfigurovat \"ifconfig eth0 ....\" ale \"ifconfig vx ...\" vx jako Vortex

Pro normální použití bych doporučoval kernel zkonfigurovat pouze pro vaše CPU a bez debugovacích informací, také ddb se mi zdá zbytečné. Ostatní věci jsou okomentovány, takže se stačí podívat, popř. použít soubor LINT.

Kompilace
Konfiguraci jsme snad nějak zvládly, teď je na řadě samotná kompilace. Existují sice dvě možné varianty, ale mně vyhovuje ta starší. Takže spustíme (jako root) program config - config NEWKERNEL. Poslechneme hlášku a nadatlíme cd ../../compile/NEWKERNEL a spustíme make depend. Následuje make a za ním v rychlém (záleží na stroji) sledu make install. A hotovo. Jen bych podotknul, že v FreeBSD se všechno co nezkompilujete do jádra zkompiluje jako modul, takže je to k použití kdykoliv později.

Závěr
Jádro je zkompilováno, takže stačí ho už jen přesunout na správné místo (/kernel) nebo přepsat boot-loader. Celkem bych doporučil staré a funkční jádro nemazat. Poté jen reboot a voila!

info:
handbook, FAQ, LINT

rekapitulace:
cp GENERIC NEWKERNEL
vi NEWKERNEL
config NEWKERNEL
cd ../../compile/NEWKERNEL
make depend
make
make install
cp /kernel /kernel.old
cp kernel /
rebootneologism