Jadro systému GNU/Linux
Martin Páleník, xpalenik@fi.muni.cz
Obsah
Definícia
Jadro systému linux je
- vrstva medzi aplikáciami a hardware
- vytvára prostredie pre beh a komunikáciu procesov
- správa systémových zdrojov
- bezpečnosť
Krátka história opensource operačných systémov
- (september 1969) vzniká Unics, multiužívateľský, multitaskingový mixed-source operačý systém
- programovaný v assembleri, neskôr prepísaný do C
- (1987) pod opensource licenciou uvoľnený Minix
- autor Andrew Tanenbaum
- unixový operačný systém
- používaný na študijné účely
- (25.8.1991) uvoľnený unixový operačný systém Linux
- inšpirovaný minixom, ale neobsahuje jeho kód
- 386 závislý
- C a assembler
- vývoj pokračuje
- Minix 3.0
- Berkeley Software Distribution
- OpenSolaris
Subject: LINUX is obsolete [6][7]
29.1.1992
mikrokernel
- funkcionalita rozdelená do diskrétnych procesov zvaných server
- iba servery ktoré nevyhnutne potrebujú privilegovaný prístup ho dostanú
- servery v odlišných pamäťových miestach, nemožnosť volať funkcie priamo
- potreba výmeny správ (IPC), avšak context switching prináša určitú záťaž
- preto väčšina serverov do kernel-space čo podkopáva princípy systému
monolitický kernel
- Linus zvolil túto metódu práve kvôli výkonu
- jeden proces bežiaci v jednom adresnom priestore
- ako kompenzácia existujú moduly
Verzovací systém jadra a vývojový model[6][8]
Pred rokom 2004 a medzi jadrami 1.0 a 2.6.?
X.Y.Z
- if(odd(Y)) developement else stable
- masívne zmeny v development verziách
- Z sa menilo pri bug fixoch, security fixoch, nových vlastnostiach a ovládačoch
Medzi rokmi 2004 a 2011 a medzi jadrami 2.6.0 a 2.6.39-rc7
2.6.A[.B][-rcC]
- A je revision, obsahuje bugfixy, nové vlastnosti, nie až tak významné
- B obsahuje opravy kritických chýb a bezpečnostných chýb, backport z A+1
- C je číslo vývojovej verzie, ak je to vývojová verzia
Po roku 2011 a v jadrách 3.?
3.A[.B][-rcC]
- A hlavné zmeny
- B kritické chyby a bezpečnostné chyby
- C je číslo vývojovej verzie, ak je to vývojová verzia
- minimálne zmeny pri prechode na verziu 3.?
- jedna z najvýynamnejších zmien je podpora brtfs (SSD)
Špecifické verzie jadra
- namiesto suffixu [-rcC] môžu byť iné - značia buď osobu vývojára, alebo oblasť vývoja (napr. wireless)
- niektoré distribúcie (spravidla RedHat, OpenSuSe a Ubuntu) sa odtrhnú od hlavného vývoja a konkrétnu verziu jadra spravujú sami
- značí sa často pomlčkou, napr. 3.5.4-1.fc17.x86_64
- často pri LTS verziách konzervatívny vývoj
- niektoré verzie jadra sú označené LTS - s predĺženou podporou
Kompilácia jadra - motivácia
- podpora pre nový hardvér
- vyriešenie existujúcich hardvérových problémov
- využitie vlastností ktoré neposkytovaných predkompilovaným jadrom
- odstránenie nepotrebných súčastí (ovládače) a urýchlenie štartu systému
- voľby pre optimalizáciu výkonu
- debug mód
- bezpečnosť
- dozvedieť sa niečo nové (Gentoo, Funtoo)
Kompilácia jadra - postup[10][11]
Detekcia hardvéru
Použijeme nástroj lshw. Jedná sa o linuxovú obdobu nástroja Everest/Aida pre Windows. Výpis je veľmi rozsiahly, buď cez lshw|more alebo cez lshw -class disk|memory|network získame konkrétnu skupinu informácií. Celkom osemnásť skupín. Krátku správu získame cez lshw -short a generovať report môžme pomocou lshw -html > hwinfo.html.
Získanie zdrojových kódov a rozbalenie
- vanilla (tiež "mainline") priamo z kernel.org
- upravená verzia pre konkrétnu distribúciu
- lokálny adresár /usr/src
tar xvf linux.tar.gz
Aplikácia patchov
Buď na inkrementálny presun medzi verziami alebo na rozšírenú funkcionalitu (napr. packet injection v BackTrack).
patch -p1 < patchfile
Nutné vykonať vovnútri adresára so zdrojákmi !
Vývojárske nástroje a knižnice potrebné pre kompiláciu
- build-essentials
- yum groupinstall 'Development Tools'
- yum groupinstall 'Development Libraries'
Konfigurácia jadra
- make config
- make menuconfig (grafická varianta; potrebná knižnica ncurses)
funkcia (ANO/NIE/MODUL)
Preklad
make
Výsledkom prekladu je binárny súbor s jadrom v adresári arch/$ARCH/.
Skopírovanie modulov jadra
- make modules_install
- všetky moduly (označené v konfiguračnom kroku ako modul) budú skopírované do /lib/modules/$VERZIA/kernel
Inštalácia kernelu
- make install
- skopíruje binárny súbor s jadrom do /boot
- ďalej súbor s konfiguráciou .config do /boot/config-$VERZIA
Vytvorenie súboru initramfs[13]
- obsahuje rutiny na inicializáciu a mountovanie root filesystému (ten s /boot)
- jedná sa o náhradu pôvodného initrd (initial ram disk)
- Fedora 17
- dracut initramfs_name kernel_version
- dracut "initramfs-$(uname -r).img" $(uname -r)
- Debian-based
- update-initramfs -c -k $NEW_KERNEL_VERSION
Inštalácia zavádzača GRUB 2[12]
Štruktúra konfiguračných súborov GRUBu
- /boot/grub/grub.cfg (needitovať)
- /etc/grub.d/
- /etc/default/grub
(vi)tvoríme nový súbor XX_foo s nasledujúcim obsahom (čím nižšie je XX tým vyššie bude položka v boot menu)
#!/bin/sh -e
echo "Adding my custom Linux to GRUB 2"
cat << EOF
menuentry "My custom Linux" {
set root=(hd0,5)
linux /boot/vmlinuz
initrd /boot/initrd.img
}
EOF
Debian
Fedora 17
- grub2-mkconfig -o /boot/grub2/grub.cfg
- inštalácia zavádzača do MBR v prípade potreby grub2-install /dev/sda
Nastavíme root=UUID v XX_foo [13]
- UUID získame pomocou blkid
Výsledok
- kompilácia trvala 60 minút
- jadro stabilné, až na bug s kurzorom
Literatura