Linux kernel
Peter Marál, 365399@mail.muni.cz
Obsah
História
- 0.01 - plne funkčná verzia Linuxu napísana Linusom Torvaldsom (september 1991)
- 0.11 - možnosť kompilácie jadara (december 1991)
- 0.95 - je možné spustiť X Window System (marec 1992)
- 1.0.0 - začiatok trojčíselného označovania (14.3. 1994)
- 1.2.0 - podpora modulov (7.3. 1995)
- 2.0.0 - podpora SMP, podpora dalších procesorov (9.6. 1996)
- 2.2.0 - rozšírenie HW, multimediálne technológie (25.1. 1999)
- 2.4.0 - nové technológie USB, PCMCIA, LVM, ... (4.1. 2001)
- 2.6.0 - nový plánovač, možnosť preemptivného chovania, vlákna (NTPL), ALSA, podpora nového HW (17.12. 2003)
- 3.0.0 - nové značenie verzií spôsobené zmenou vývoja jadara (21.7. 2011)
- 3.0.4 - aktuálna verzia jadra
Čo je Linux ?
Linux je monolitické jadro operačného systému, ktoré je napísané v
programovacom jazyku C. Je šírené ako slobodný software pod licenciou
GNU GPL vo verzii 2. Spĺňa takmer dokonale štandart POSIX, systémové volania
tohoto štandartu trpia rôznymi nedlhmi, pridávajú sa nové systémové volania,
ktoré sú následne doporučené používať. V OS, kernel funguje ako služba,
ktorá sa nachádza medzi hardwarom počítača a užitateľskými aplikáciami.
Najnovšie zdrojové kódy jadra dostupné
na www.kernel.org (momentálne nedostupné),
vývoj sa dočasne presunul na
github.com/torvalds/linux.
- Flexibilný - podporované mnohé archytektúry počítačov
- Moderný - podporuje najnovšie zariadenia, protokoly a algoritmy
- Evolučný - návrch riadený požiadavkami uživateľov
- Slobodný - slobodná licencia
Číslovanie verzií
-
Štvorzložkové číslovanie verzií jadara
A.B.C.D
- používalo sa v minulosti, nové číslovanie zavedené od 2.6.40 -> 3.0.0
- major verzia: zmena čísla znamená zmenu architektury.
- minor verzia: zmena pri podstatnej zmene jadara. Párne čísla znamenali stabilné verzie jadra, nepárne vývojové verzie jadra.
- podverzia: zmena vo funkcionalite, pridanie funkcí, zmena chovania ...
- opravná verzia: Bez zmeny funkcionality iba oprava chýb, prvé jadro konkrétnej podverzie je bez tohoto označenia.
-
Nové označovanie verzií jadara
3.0.0
- dnes používané, iba zmena označovania verzií. Stabilné verzie jadra sa označujú trojmiestnym číslom napríklad 3.0.0, verzia ktorá bude označená ako dalšia stabilná sa označuje rcx. Kde x je číslo predverzie.
Jaderné moduly
Jaderné moduly sú spôsob, ako rozšíriť funkcionalitu Linuxového jadra bez
rekompilácie a následného reštartu. Tieto moduly majú príponu .ko,
najčastejšie sa nachádzajú v adresáry /lib/modules/<verzia_jadra>
Správa modulov
-
modinfo "nazov_modulu"
- informácie o každom module zvášť. (popis modulu, licencia,
parametre modulu)
-
lsmod
- vypíše načítané moduly v pamäti, a informáciu o používaní modulov.
-
insmod "cesta_ku_modulu/nazov_modulu.ko"
- zavedenie modulu do pamate, ide o ručné zavedenie.
-
rmmod "nazov_modulu"
- odoberie požadovaný modul
-
modprobe [-r] "názov_modulu"
- automatické zavádzanie a odoberianie (použítím prepínaču -r) modulov aj so závislostami
-
depmod
- generuje závislosti medzi modulmi
Konfigurácia a kompilácia
Linuxové jadro si môžeme stiahnuť buď distribučné alebo takzvané vanilla.
Vanilla jadro je oficiálne vydané jadro na www.kernel.org (hlavný strom).
Distribučné jadro získame najčastejšie z repozitárov danej distribúcie pomocou
balíčkovacieho systému. Takéto jadro obsahuje množstvo vylepšení,
vo forme pathe-ov, ktoré tvorci distribúcie uznali za vhodné.
Nasledujúce príkazy je nutné spúšťať v adresáry so zdrojovím kódom jadra
Patchovanie
- je nutné mať vždy patche pre konkrétnu verziu jadra
- bzcat meno_patche.bz2 | patch -p1 --dry-run opatchovanie jadra konkrétnym patchom so simuláciou.
Ak simulácia (prepínač --dry-run) aplikácie pathe prebehne bez problémov, pathe sa aplikuje.
Konfigurácia
Tento konfigurátor má u vačšiny položiek konfigurácie 3 konfiguračné možnosti:
- nepoužiť
- kompilovať priamo do jadra (neoddelitelná súčasť jadara)
- kompilovať ako modul
- make config -čisto v textovom móde
- make menuconfig -za použitia ncurses, okienkové textové rozhranie
- make xconfig -grafické rozhranie, vyžaduje qt
Kompilácia
- make clean -odstraní pozostatky po minulej kompilácii
- make bzImage -kompilácia jadara
- make modules -kompilácia modulov
Inštalácia
- make modules_install -naištaluje jaderné moduly do /lib/moules/<verzia_jadra>
- arch/<označení_architektury>/boot/bzImage -binárna podoba skompilovaného jadra, ktorá je volaná zavádzačom zväčša z /boot, do boot je nutné prekopírovat bzImage a nastaviť zavádzač
Kompilácia a balíčkovanie: Debian/Ubuntu
- rozbalené jadro sa nachádza v "/usr/src/", je nutné mať práva "root-a" inak je nutné použitie príkazu "fakeroot", a do adresára so zdrojovými kódmi mať prístup rw;
- sudo make-kpkg clean -príkaz odstraní všetko po predchádzajúcej kompilácii
- sudo make-kpkg --initrd --stem linux --revision=vlasna.1.0 kernel_image -kompilácia jadra a vytvorenie balíčku .deb s init ram diskom
- cd ..; sudo dpkg -i linux-image-2.6.X.Y_vlastne.1.0_i386.deb -inštalácia nového jadra
Nové jadro sa zavedie po reštarte. Nutné je mať nové jadro v konfiguračnom súbore zavádzača, alebo použítím kexec. Ak jadro pripravíme ako balíček
.deb nemusíme sa starať ani o generovanie initrd ani o konfiguráciu zavádzača, všetko sa nastaví automaticky.
Čo je System.map ?
Je to súbor, kde sú uložené mená symbolov a ich adresy v pamäti. Tento súbor je vždy vygenerovaný po kompilácii kernelu.
Nájdeme ho v adresáry so zdrojovými kódmi jadra, tiež v /boot. System.map je dôležitý pri ladení a zistovaní problémov.
Viac nám povie názov funkcie, ako len jej adresa v pamäti.
Parametre jadra
Pred štartom
- acpi=off -vypnutie acpi
- init=/sbin/init -cesta k initu, to je prvý proces ktorý jadro spustí. Tento proces je rodič všetkých
- selinux=0/1 -vypnutie/zapnutie selinuxu
- initrd=<cesta_k_initrd> -nastavi initrd subor, ktorý ma jadro použiť
- root=/dev/device -parameter hovorí jadru ktoré zariadenie má byť použité ako root filesystem pri zavádzaní
- mem=1024M -jadro bude používať iba 1024MiB ram
Viac napríklad v dokumentácii kernelu: <zdrojove_kody_jadra>/Documentation/kernel-parameters.txt
Počas behu
Niektoré parametre (nastavenia) jadra je možné meniť počas behu a to prostredníctvom súborov nachádzajúcich sa v "/proc/sys"(procfs); alebo nástrojom sysctl. Ide o nastavenie prvkov siete, kernelu, zariadení a ďalších, konfiguračným rozhraním jadra je aj sysfs(/sys)
Základné nástroje
- dmesg -vypíše message buffer kernelu
- lspci -vypíše zariadenia na pripojené na pci
- lsusb -vypíše zariadenia pripojené ku usb rozhraniu
- iptables -utilita na konfiguráciu iptables, linuxového firewallu
- sync -vyprázdnenie file systems bufferov
- mount -pripojenie súborového systému
- umount -odpojenie súborového systému
- lshw -zistuje prítomnosť hardwaru a poskytuje informácie o použitom ovládači
Literatura