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.config
make config
: interaktivní textová konfiguracemake menuconfig
: grafická terminálová konfigurace, vyžadujencurses
make xconfig
nebomake 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
make
zkompiluje zdrojáky, podle konfiguracemake modules
zkompiluje moduly, podmnožinamake
make cesta/k/modulu
-> kompilace: make -j 4
make modules_install
nainstaluje modulymake install
nainstaluje 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