Autor jádra linuxu, Linus Torvalds, se setkal s Unixovým prstředím poprvé na univerzitě. Zjistil že toto prostředí mu tak vyhovuje, že by jej chtěl mít i doma, na svém domácím PC. Opravdový Unix si nemohl dovolit a opensource varianta Minix (v uvozovkách protože Minix bylo nutné zakoupit, na médiu jste však měli i zdrojové kódy) mu přišla příliš omezená.
(Proč si Linus v té době nemohl zakoupit unix popřípadě si stáhnout zdrojové kódy jak je to běžné dnes, to už je trošku jiná pohádka. Doporučuji knihu: Umění programováni v Unixu (The Art Of UNIX Programming) od Eric S. Raimond. Popřípadě google a heslo: unix wars)
Původně jsem to vlastně ani neplánoval operační systém Linux vznikl na základě jiného projektu , kdy jsem testoval vlastnosti procesoru 386.
Tento systém navrhl tak, aby byl blízký systému UNIX (a to jak System V od AT&T tak i BSD z kalifornské univerzity v Berkeley).
Pozn.: zde se pozná jedna z výhod existence norem a jejich dodržování (nevyznamější jsou POSIX - Portable Operating system Interface Unix a SUS - Single Unix Specification).
Příběh ze života
V roce 1998 upravila firma Oracle svůj špičkový databázový produkt rovněž pro systém Linux. Byl to krok, jenž znamenal zásadní průlom ve způsobu vnímání tohoto systému u široké veřejnosti. Inženýr odpovědný za zmiňovanou úpravu při dotazu na technické překážky, které bylo třeba při úpravách překonat, nabídl rozhodující důkaz, že standardy pro rozhraní API splnily účel. Inženýrova odpověď zněla takto: Zadali jsme příkaz make.
/* * Yeah, yeah, it's ugly, but I cannot find how to do this correctly * and this seems to work. I anybody has more info on the real-time * clock I'd be interested. Most of this was trial and error, and some * bios-listing reading. Urghh. */
Vyčerpávající historie nejen Unixu: http://www.levenez.com/
Linuxové jádro je považováno za monolitické. Díky své modularitě a některým prvkům micro kernelu (např. kernel threads) ho lze nazvat i hybridním.
Interně je jádro rozděleno do subsystémů.
Například: diskový, síťový, ...
Centrem dění: http://kernel.org/
Umístěny jsou zde: git repozitáře, historické verze, věci úzce spojené z jádrem
Co stáhnout aneb číslování verzí
Dnešní číslování je čtyřsložkové:
Konvencí je, jádro rozbalit do adresáře /usr/src/linux
. Pro testování více verzí jádra je možné vytvořit symbolický link: /usr/src/linux == /usr/src/linux-2.6.26.2.
Ještě před samotnou kompilací je vhodné si zjístit HW konfiguraci stroje.
Triky z praxe:
dmesg
, popř.: /var/log/dmesg
)lsmod
)lspci
výpis PCI/AGP zařízení asi nejdůležitější zdroj informacílsusb
výpis připojených USB zařízenílshw
user-friendly výpis zařízení/proc/cpuinfo
informace o procesoru/procesorech/jádrech/sys/devices/system/cpu/cpu?/topology/*
- informace o topologii zapojení procesorů (lze zjístit zda-li systém například NUMA)Za každého počasí make help je váš kamarád.
Konfigurace:
config
- command line interface, velice strohé, nepřehlednémenuconfig
- ncurses interface, "přehledné", vyčítána přílišná klikavostmake xconfig
- QT interface, velmi klikavémake gconfig
GTK, platí to samé pro GTKmake oldconfig
- CLI, nepřehlednéPozn.: například FreeBSD takovéto konfigurátory nemá. Celé jádro lze nakonfigurovat z pohodlí svého oblíbeného editoru.
Samotná kompilace se pak běžné provádí příkazem (u 2.6 jader): make && make modules_install
Samotný příkaz make
se postará o kompilaci jádra a přikaz make modules_install
o instalaci popřípadě kompilaci a instalaci modulů.
Zkompilované jádro lze najít: /usr/src/linux/arch/x86/bzImage
Trento soubor je vhodné nakopírovat do adresáře /boot
pod výstižným názvem. Např.: kernel-2.6.26.5-grsecurity
Nainstalované moduly lze pak najít v adresáři /lib/modules/$(uname -r)/
Jédná se o mrtvou tabulku všech symbolů jádra. Tato tabulka umožňuje převod adresy na symbolické jméno a opačně. Velmi užitečné pro ladění jádra nebo dekóvaní tzv. Kernel OOPS.
Jádro máme tedy nakonfigurováno a zkompilováno... co dál?
Zde přichází na řadu tzv. bootloader. Jedná se o někdy jednoduchý a někdy velmi komplexní program.
Dnes je ve světě Linuxu asi nejpoužívanější zavaděč GRUB. Jeho slavným předchůdcem je bootloader LILO (Linux Loader - mate názvem, lze přez něj zavádět i jiné OS).
Jedny z úloh bootloaderu (GRUB):
Alternativně může bootloader předat řízení jinému bootloaderu.