Jádro systému
Filip Slunečko, filip.slunecko@mail.muni.cz
Obsah
Linuxové jádro
Linuxové jádro je svobodný projekt s otevřeným zdrojovým kódem inspirované operačním systémem UNIX.
Na jeho tvorbě se podílí mnoho společností a jednotlivců z celého světa.
Jaderná statistika
- Poslední stabilní verze: 2.6.35.5
- Mezi největšími přispěvateli jsou stabilně společnosti: Red Hat, Intel, Novell a IBM.
- Počet řádků jádra: Jádro 2.6.32 má přibližně 12.6 milionu řádků zdrojového kódu ( SLOC: počítáno bez komentářů a prázdných řádků )
- Počet řádků v distribuci: Distribuce systému Debian 5.0 má přibližně 324 milionu SLOC a Windows Server 2003 50 milionu.
- Cena jádra: respektive na jeho znovu naprogramování bylo odhadnuto na 1.3 miliardy dolarů.
Odkud jádro získat
Hlavní zdroj pro získání zdrojových kódů jádra je http://kernel.org/.
Další zdroje pro získání jádra
Téměř každá distribuce GNU/Linux má své vlastní jádro upravené a odladěné tak, aby co nejlépe
fungovalo se všemi ostatními komponentami systému a poskytuje jej v rámci svého balíčkovacího systému.
Jaderné větve
- 2.4 stabilní jádro. Staré, ale dobré. (nejsou přidávány nové vlastnosti a tím i chyby).
- 2.6.x současná stabilní větev. Nová verze je vydávaná každé tři měsíce.
- 2.6.x-linux-next větev složená ze všech vývojových stromů.
Význam číslování
Verze jádra je uváděna ve tvaru A.B.C.D kde
- A - verze jádra (stejná or roku 1996)
- B - řada (stejná or roku 2004)
- C - verze jádra
- D - opravy chyb a bezpečnostních problémů popřípadě nové ovladače
Kompilace jádra
Pro správné fungování jádra je potřeba vědět několik věcí:
- přesnou specifikaci HW, kterou chceme podporovat.
- funkce, které od jádra požadujeme(frame buffer, direct rendering ...).
- souborový systém ze kterého budeme nahrávat systém.
Kompilace:
- Získáme zdrojové kódy jádra.
- Rozbalíme je. Standardní adresář bývá /usr/src/linux.verze a má simlink na /usr/src/linux.
- Uděláme si zálohu našeho zatím ještě funkčního jádra (jeho konfigurace) zcat /proc/config.gz > .config.
- Zjistíme HW konfiguraci (lspci, cat /proc/cpuinfo ...).
- Spustíme make + jeden z následujících příkazů.
- config (interaktivní konfigurace)
- menuconfig (ncurses menu)
- xconfig (GUI/GTK)
- gconfig (GUI/Qt)
- oldconfig (při kompilace se zkompilují pouze změny od předchozí verze)
- Vybereme vše nutné a potřebné. Zde je třeba si dát pozor na:
- Ovladače pro zařízení kde je uložen bootovací kernel nesmí být jako modul.
- Uložíme námi vytvořenou konfiguraci.
- Zkompilujeme jádro make && make modules_install. Toto nám zkompiluje i moduly a vytvoří bootovací obraz našeho kernelu.
- Zkopírujeme vytvořený obraz do adresáře /boot. Například takto: cp arch/x86_64/boot/bzImage /boot/kernel-2.6.34
- Někdy je ještě potřeba vygenerovat initramfs. Záleží na distribuci a HW.
Konfigurační volby
Jedny z nejdůležitějších voleb při konfiguraci jádra jsou:
- Device Drivers - ovladače pro HW
- Networking support - nastavení síťových protokolů atp.
- File systems - podporované souborové systémy
Moduly
Linux neručí za stabilní API a ABI mezi jedntilivými verzemi (Solaris a FreeBSD, Windows se snaží mít API a ABI stabilní).
- Moduly je možné přidávat a odebírat z a do jádra za běhu systému (od verze 2.6).
- Do jádra je takto možné propašovat i neotevřený kód.
- Moduly jsou uloženy v adresáři /lib/modules/`uname -r`/kernel/.
Příkazy pro práci s moduly jsou lsmod a modprobe.
Parametry jádra při startu
Parametr | Význam |
singl | spustí systém v singl user modu |
acpi=off | vypnutí ACPI |
selinux=0/1 | zapnutí/vynutí selinuxu |
memtest=0 | provede mem test při startu |
nfsroot | pro systémy bez disku při NFS instalaci |
Více na např:
kernel-parameters.txt
System.map
Při každém sestavení jádra se vytvoří i soubor System.map, který obsahuje tabulku symbolů.
Tabulka symbolů se skládá z názvu symbolu a jeho úmístění v paměti. Tato tabulka je důležitá pro ladění a zjišťování kde vznikla chyba. Tento soubor se většinou nalézá v adresáři se zdrojovými kódy jádra.
Literatura
- http://www.ibm.com/developerworks/linux/library/l-linuxboot/
- http://www.abclinuxu.cz/clanky/jaderne-noviny
- http://www.phoronix.com/scan.php?page=home
- http://lkml.org/
- http://www.h-online.com/open/features/What-s-new-in-Linux-2-6-32-872271.html?view=print
- http://www.linuxfordevices.com/c/a/Linux-For-Devices-Articles/Introducing-initramfs-a-new-model-for-initial-RAM-disks/
- http://en.wikipedia.org/wiki/Linux_kernel
- http://tldp.org/HOWTO/Module-HOWTO/
- http://www.fi.muni.cz/~kas/p090/referaty/
- http://en.wikipedia.org/wiki/System.map