Referát je o Linuxovém jádře.
Linux je monolitické modulární jádro, asi nejpoužívanější na světě.
Kde vzít jádro?
/boot/vmlinuz-$(uname -r)- kompilované komprimované jádro- distribuční kernel - zkompilovaný nebo i zdroj
- stáhnout z kernel.org
- naklonovat si repozitář
- stáhnout z ftp.linux.cz
Pokud nechcete dělat vývoj jádra, tak si stahujte atuální
stable verzi. Tato verze není typicky ta nejnovější. V gitu
tyto verze mají cedulku stable.
Konfigurace, kompilace a instalace jádra
- pomocí
make(1) make help- víceprocesorojaderné systémy:
-j X, X je celé kladné číslo
Konfigurace
- Vykopírování aktuální konfigurace
cp /boot/config-$(uname -r)* .config make oldconfig: vygeneruje konfiguraci z.configmake config: interaktivní textová konfiguracemake menuconfig: grafická terminálová konfigurace, vyžadujencursesmake xconfignebomake gconfig- grafické (Qt; GTK+)- a další, viz
make help:)
CONFIG_
- číselná hodnota
- textová hodnota
- 1 z N
- y/n
- y/m/n (is not set)
Textová konfigurace
- výběr z možností (velké písmeno default)
- [?] – help + závislosti
- v závorce CONFIG_
menuconfig
Prostředí:
--->- má submenu---- submenu nemá položky (třeba protože není povolené)*/M/- Y/M/N[ ]- možnosti Y/N, někdy jen zapíná submenu< >- možnosti Y/M/N{ }- možnosti Y/M- -- vynuceno (něčím)
Ovládání:
- ? - help pro dané menu, položku nebo menuconfig
- Y/N/M - výběr zakompilováno/modul/nevybráno
- ^v posun mezi položkami
- <> dolní akce
- mezerník - provede akci
- enter - vstup do podmenu
Závislosti, jejich splnění, umístění nastavení, … lze vyčíst z nápovědy. Vyhledávat v CONFIG_ je možno stiskem ‘/’. Z nalezených výsledků lze přejít na danou položku pomocí čísla v závorce. Vyhledávání se pak zanoří -> nemusíme se pořát vracet.
Sybsystémy
- Správa procesů - plánování, zdroje
- Správa paměti - virtuální adresace, stránkování, přidělování paměti, swap
- Meziprocesová komunikace
- Ovladače zařízení - hot-plug, rozpoznání zařízení a přiřazení ovladače, zpřístupnění zařízení
- VFS a souborové systémy
- Síť
- (Systémová volání, …)
HW a jiné informace o systému
lshw(1): vypíše podrobné informace o hw na daném strojilspci(8),lsusb(8),lscpu(1), …: informace o PCI sběrnici a připojených zařízeních, informace o USB a zařízeních, informace o CPU, …mount(8): vypíše informace o připojených fs (ale není primární účel programu)lsmod(8): dobré pro odhad toho, které moduly potřebujeme
Kompilace a instalace
makezkompiluje zdrojáky, podle konfiguracemake moduleszkompiluje moduly, podmnožinamakemake cesta/k/modulu
-> kompilace: make -j 4
make modules_installnainstaluje modulymake installnainstaluje jádro
-> instalace: make -j 4 modules_install install
modules_install je potřeba spustit před
install protože jinak nám vznikne systém s původními
moduly, ale novým jádrem.
Moduly
- kusy kódu, které můžeme načítat do kernelu za běhu
- typicky ovladače zařízení – můžeme kompilovat jako modul nebo zakompilovat do kernelu
- výhody: rozumně velké distribuční kernely, které nemusíme kompilovat; méně použité paměti; jádro modifikovatelné za běhu
Příkazy
lsmod: vypíše načtené modulyrmmod modul,modprobe -r modul: odstraní natčtený modul z jádra, pozor na závislostimodinfo modul: informace o modulu (verze, licence, …)modprobe modul,insmod cesta/k/modulu: načte modul
Spuštění
- Spouší se zavaděčem (např. EFI/BIOS -> GRUB -> Linux)
- Typicky možno vybírat z více verzí -> Je vhodné udržovat si alespoň jedno funkční jádro:)
Problémy a zkušenosti
- verzování .config
- vytuhlé ve Stratu ještě nic neznamená
- nefunkční síť ještě nic neznamená
- je dobré uložit si lshw funkčního jádra
Parametry příkazové řádky jádra
- pří bootu, v GRUB menu - ‘e’, řádek linux …
- trvale v grub configu
/etc/default/grub->/boot/grub2/grub.cfg- [příkaz na vygenerování distribučně závislý]
Initial RAM disk
- filesystémeček, který se může připojit při bootu
- řeší problém velkých distribučních kernelů
- při instalaci se nainstaluje jen co je potřeba
- nemusí být v systému všechny moduly
- rozšifrování kořenového svazku
- kernel logování před připojením (šifrovaného) kořene
- nastavení sítě
- může být komprimovaný
/boot/initramfs-$(uname -r).img- vygenerování např. pomocí
dracut(8)dracut -f -v image kernel-version
System.map
- Soubor se symboly jádra
- Dá se využít k dešifrování zpráv havarovaného jádra
/boot/System.map-$(uname -r)
Jiná jádra
- GNU Hurd
- FreeBSD
- Minix
Vývoj
Linux is evolution, not intelligent design! – Linus Torvalds, 2005
Zdroje
- man
make help- referáty: Roman Lacko, Jan Kardaš, Filip Škola, Jiří Novotný, Martin Páleník
- archív referátů
- kernelnewbies.org kernel build
- docs.redhat.com
- arch wiki
- kernelnewbies.org
- ldd3