Jádro systému GNU/Linux
Jiří Novotný, xnovotn5@fi.muni.cz
Obsah
Co to je
Linux je jádro (základ) pro část unixových operačních systémů (OS). Tyto OS se označují jako linuxové.
Odbočka kolem názvu
Slovo Linux se používá ve více významech, což může v některých případech způsobit zmatek. Linux může znamenat:
- Jádro OS (tj. to, o čem je tento referát).
- Typ OS založený na tomto jádru. Lze korektněji vyjádřit pojmem "linuxový operační systém", v některých případech "linuxová distribuce" nebo "GNU/Linux".
- V některých zemích se jedná o ochrannou známku, hlavně kvůli možnému vydírání tvůrců/uživatelů jádra někým, kdo by si tuto ochr. známku za tímto účelem sám zaregistroval.
- Německý prací prášek. Jeho bližší rozbor není předmětem tohoto referátu.
Stručný popis
Jedná se o monolitické jádro, jehož některé součásti (označované jako moduly) je obvykle možné zavádět/odebírat za běhu. Proto se někdy označuje i jako jádro hybridní. Další základní vlastnosti jsou:
- Svobodný software - veškerý zdrojový kód jádra je veřejně přístupný pod licencí GPLv2.
- Tvořeno a spravováno rozsáhlou komunitou společností i jednotlivců.
- Napsáno převážně v C se špetkou assembleru.
- Podpora mnoha architektur - Linux lze najít mj. na mikrořadičích i superpočítačích.
- Mezi nejvýznamnější podporované architektury patří x86 (pro kterou Linux původně vznikl), x86_64, PowerPC, SPARC, různé mutace ARM a MIPS.
- Podporuje všechny možné staré i nové technologie/protokoly/alogritmy.
- POSIX kompatibilní (s nepatrnými odchylkami).
- Ale pro mnoho POSIXových systémových volání existuje v jádře lepší (ovšem nePOSIXová) alternativa.
Stručný souhrn zkrácené historie Linuxu v kostce
- 1991 - první funkční verze Linuxu (0.01, pro Intel 386+, autor Linus Benedict Torvalds)
- 1992 - změna licence na GPL
- 1994 - první "oficiálně stabilní" verze 1.0.0
- 1995 - verze 1.2.0 s podporou modulů
- 1996 - verze 2.0.0 s podporou SMP
- 1999 - verze 2.2.0
- 2001 - verze 2.4.0
- 2003 - verze 2.6.0 s podporou Posixových vláken
- 2011 - verze 3.0 = úprava v číslování verzí
Číslování verzí v letech 2003-2011
Označení verze má tvar 2.6.X[.Y] (např. 2.6.13 nebo 2.6.28.9).
Změna čísla X se považuje za novou verzi jádra (např. nové funkce, vylepšení, opravy, ale třeba i odstranění nějakého zastaralého ovladače nebo subsystému).
Změna čísla Y znamená opravu chyb ve verzi X, (pokud možno) beze změny funkcionality.
Číslování verzí od roku 2011
V červenci 2011 došlo ke změně v číslování. Čísla 2.6 byla nahrazena číslem 3 a číslo X se začalo počítat od nuly. Po jádru 2.6.39 tedy místo jader 2.6.40 a 2.6.41 následovala jádra 3.0 a 3.1.
Změna v číslování zde neoznačuje žádnou velkou změnu v konfiguraci jádra; důvodem byla pouze potřeba vynulování čísla X, které už začínalo být až příliš vysoké.
Vývojový cyklus
- Období pro příjem větších změn do jádra (tzv. merge window, trvá obvykle cca 2 týdny).
- Po uplynutí tohoto období se vydá první vývojová verze, označená -rc1 (release candidate 1, např. 3.3-rc1).
- Začne stabilizační období pro -rcX verzi.
- Po dobu cca 1 týdne se do jádra přijímají obvykle už pouze opravy a změny, které by neměly zhoršit jeho stabilitu.
- Po uplynutí tohoto období se jádro vyhodnotí a pokud je už považováno za dostatečně stabilní ("lepší to už nebude"), vydá se nová stabilní verze (např. 3.3). V opačném případě se vydá nová vývojová verze -rcX+1 (jdi zpět na bod 3).
Stabilní verze je nadále ještě nějakou dobu udržována (minimálně do té doby, než je vydána další stabilní verze a obvykle i déle). To znamená backportování důležitějších oprav z vyšších verzí jádra a následné vydávání opravných verzí.
Příklad: jádro 2.6.36 bylo udržováno cca 4 měsíce a poslední opravná verze byla 2.6.36.4.
Udržovaných stabilních verzí může tedy být i více (2, 3), ale ta nejstarší z nich se obvykle přestává udržovat s vydáním nové stabilní verze.
Některé verze jádra jsou označeny jako dlouhodobé (LTS=long term support). To znamená, že jsou udržovány výrazně déle oproti ostatním stabilním verzím, obvykle i 2 roky.
Aktuálně udržované stabilní verze (ke dni 28. února 2012) jsou 2.6.27.61 (LTS), 2.6.32.57 (LTS), 3.0.22 (LTS), 3.1.10 a 3.2.8.
Výše uvedené číslování verzí a vývojový cyklus se týká tzv. vanilla jádra - jedná se o jádro přímo "od zdroje" neboli přímo od jeho tvůrců. Mnozí tvůrci distribucí i jiní uživatelé si tato jádra ještě upravují podle vlastních potřeb, např. aplikují na něj ještě opravy chyb, které se dosud nedostaly do stabilní verze, backportují opravy a nové funkce do starších jader, apod. Takové jádro bývá udržováno ve vlastním stromě a může být i trochu jinak označováno.
Např. u dlouhodobě podporované distribuce Red Hat Enterprise Linux 5 v poslední verzi 5.8 je použito označení jádra 2.6.18-308. Z toho lze předpokládat, že bylo v základu použito již 6 let staré (a jadernými vývojáří dávno nepodporované) jádro, které však bylo značně pozměněno a je vývojáři z firmy Red Hat stále udržováno.
Jak zkompilovat jádro ze zdrojových kódů for dummies
- Sežeň si zmiňované zdrojové kódy.
- Např. si je stáhni z (nejlépe nějakého blízkého zrcadla) kernel.org. Nezapomeň příslušný soubor také rozbalit.
- Nebo si nainstaluj zdrojové kódy jádra z tvojí distribuce - obvykle se použije příkaz typu balíčkovač instaluj kernel-sources-verze.
- Podívej se do Documentation/Changes na programy, které jsou ke kompilaci potřeba. Doinstaluj, co není.
- Uprav si kódy (pokud chceš) podle potřeby. Tj. aplikuj patche. Pokud nevíš co je patch nebo jak ho aplikovat, tak tento bod přeskoč. Fakt.
- Spusť konfiguraci příkazem make + [něco]config (viz make help).
- Projdi stovky položek, u kterých obvykle nebudeš mít ani páru, co znamenají (a nápověda ti taky nepomůže). Obvykle se u položky nastavuje buď ANO (zahrnout do jádra) nebo NE (nezahrnout), u některých položek je možné i M jako modul.
- Pokud položka nastavit nejde, může se jednat o závislost na nějaké jiné položce (např. položka Group scheduling for SCHED_OTHER je nastavená napevno na ANO, pokud je nastavená na ANO i položka Automatic process group scheduling). Závislost na jiných položkách bývá uvedená v nápovědě.
- Spusť kompilaci příkazem make.
- Překlad určitě :) proběhl OK a vypsal, že zkompilované jádro je k dispozici někde v adresáři /arch/$ARCH/boot.
- Pokud jsi v kroku 5 zvolil některé položky přeložit jako modul, pak to chce ještě příkaz make modules_install.
- Přesuň zkompilované jádro do adresáře /boot a patřičně uprav nastavení zavaděče systému.
- Restartuj a pyšně nabootuj nové jádro.
- Sakra.
- Restartuj a nabootuj předchozí jádro. Přejdi na krok 3.
Jinak spousta moderních distribucí používá poněkud komplikovanější proces bootování s využitím ramdisku. V takovém případě je vhodnější použít raději jiný postup:
- Najdi si na internetu v on-line dokumentaci (je to moderní distribuce, určitě tu dokumentaci NĚKDE má) webovou stránku s popisem kompilace jádra pro tuto distribuci.
- Řiď se uvedenými instrukcemi.
Moduly
Jedná se o části jádra, které je možné při běhu zavádět do paměti (a zase odebírat). Obvykle se jedná o ovladače zařízení, ale může se jednat i o části některých subsystémů (např. podpora Bluetooth).
Výhodou použití modulů je:
- Nižší paměťové nároky (modul, který není v jádře zaveden, je jen další soubor na disku).
- Zrychlení při startu počítače (jde hlavně o inicializaci HW při načítání modulu).
- Je-li možné k běžícímu jádru dokompilovat nějaký modul, je ho možné ihned zavést, bez potřeby restartu.
Moduly jsou obvykle zaváděny na pokyn nějakého démona typu udev nebo samotného jádra, ale samozřejmě je možné moduly zavádět i odebírat ručně - viz utility module-init-tools/libkmod.
Literatura