Terminologická poznámka:
Hoci Linux je pôvodne a správne názvom pre konkrétne jadro operačného systému, často sa spája
s operačným systémom ako takým. Aby sme sa vyhnuli terminologickým problémom, v ďalšom
texte budeme namiesto Linux používať jadro Linuxu, prípadne jadro.
Jadro Linuxu je používané v tzv. UNIX-like operačných systémoch.
Distribuované je pod licenciou GNU GPLv2 a na jeho vývoji sa podiela komunita vývojárov
po celom svete. Kód je takmer výhradne písaný v jazyku C až na úseky
assembleru, hoci nepriamo sú využité i rôzne skriptovacie jazyky a Fortran či
C++. V súčasnosti je toto jadro jedným z najviac portovaných vôbec - od
Apple iPod, cez PDA a PC až po väčšinu superpočítačov z Top 500.
Z architektonického hľadiska sa
jedná o monolitické jadro s podporou modulov (od verzie 1.2),
tj. napr. ovládače zariadení je možné zavádzať do systému za behu v podobe
modulov. Zmyslom jadra je veľmi zjednodušene povedané abstrahovať všetok hardvér do
podoby istého konzistentného virtuálneho rozhrania.
Jadro Linuxu podporuje preemptívny multitasking, virtuálnu pamäť ale napr. i vlákna.
Správcovia dvoch najhlavnejších vývojových stromov sú pôvodný autor Linus
Torvalds a Andrew Morton, pričom primárnym zdrojom jadier na internete je
"The Linux Kernel Archives"
(kernel.org) (ftp,http,rsync). Posledná stabilná verzia
2.6.26.5 je na adrese:
V súčasnosti tvoria verziu jadra Linuxu štyri čísla písané v tvare A.B.C[.D], kde význam jednotlivých čísel je nasledujúci:
Moduly reprezentujú funkcionalitu zavádzanú a odoberanú z jadra podľa potreby
bez nutnosti reštartovať systém. Práve moduly odlišujú jadro Linuxu od
tradičných monolitických jadier. Minimalizujú pamäť potrebnú pre jadro, čo má
význam predovšetkým v embedded systémoch.
Moduly Linuxu a pomocné súbory sú umistnené v adresári /lib/modules/kernel-version
, majú
príponu .ko
(od verzie 2.6), čo je skratka pre "kernel
object" (teda modul je prostý objektový kód najčastejšie asi ELF). S príslušnou konfiguráciou
(kmod) dokáže jadro moduly zavádzať i bez zásahu užívateľa. Princíp vo verzii
2.6 sa dá veľmi stručne popísať nasledovne (a v prípade užívateľskej práce s
modulmi je spôsob takmer rovnaký):
modprobe(8)
, s požiadavkom na chýbajúci modul, meno modulu je buď
priamo parametrom, alebo ho modprobe
zisťuje v súbore /etc/modprobe.conf
modprobe
zistí prípadne závislosti spojene s požadovaným modulom
prostredníctvom súboru modules.dep
modprobe
napokon volá insmod(8)
pre všetky
potrebné modulyinsmod
vyvolá v user-space init_module
, ktorý
prakticky len skopíruje binárny kód modulu do kernel-space, čím je prakticky
funkcionalita modulu dostupná jadrulinux/kernel/kmod.c
, linux/include/linux/module.h
a linux/include/linux/module.c
.
Konfigurácia jadra je netriviálna úloha, ktorá vyžaduje jednak znalosti o
hardvéri obecne a druhak o hardvéri daného počítača. Zistiť informácie o
hardvéri počítača, na ktorom práve pracujeme, umožnuje hneď niekoľko systémových
utilít: lspci(8)
, lsscsi(8)
, lsusb(8)
,
lshal(1)
či dmidecode(8)
.
Informacie o CPU a pamäti je možné zistiť i
pomocou súborov /proc/cpuinfo
a /proc/meminfo
.
V prípade vyššie zmieňovaných utilít je často problém orientovať sa v ich
výstupoch, veľmi zaujimavá sa v porovnaní s nimi preto javí utilita lshw
(vid
http://sourceforge.net/project/showfiles.php?group_id=32683). Jej výstup
je pomerne ľahko zrozumiteľný a môže vyzerať napr. nasledovne:
*-memory description: System Memory physical id: 2b slot: System board or motherboard size: 1280MB *-bank:0 description: SODIMM DDR Synchronous physical id: 0 slot: DIMM 1 size: 256MB width: 64 bits *-bank:1 description: SODIMM DDR Synchronous physical id: 1 slot: DIMM 2 size: 1GB width: 64 bitsDokonca i so znalosťou hardvéru daného počítača, stále zostáva otázka, ako určiť tie správne ovládače resp. konfiguračné voľby jadra? Bohužial neexistuje univerzálna odpoveď ... východiskom môže byť napr. projekt "LKDDb (Linux Kernel Driver DataBase)" (vid http://cateee.net/lkddb/). Ide o databázu rôzneho hardvéru spolu s príslušnými konfiguračnými voľbami a ovládačmi, napr.:
lkddb acpi "IBM0068" :: CONFIG_THINKPAD_ACPI :: drivers/misc/thinkpad_acpi.cV spojení s "AutoKernConf" (vid http://cateee.net/autokernconf/) je tak možné v určitej miere automatizovať správnu konfiguráciu jadra. Princpíp je jednoduchý - skript pomocou systémových utilít a súborového systému
/sys
(ide nám jadrá verzie 2.6) zistí
hardvér počítača a pomocou databázy nastaví správne voľby.
.config
, vhodné pri priamych zásahoch do tohoto súborumake
xconfig
. Výstupom konfigurácie je súbor .config
.
Nasleduje veľmi stručný prehľad hlavných konfiguračných volieb vo verzii
jadra 2.6:
sysctl(8)
, podpora pre uchovanie .config
priamo v jadre, ...Preklad a nasadenie jadra pozostáva z niekoľkých krokov:
EXTRAVERSION
v
hlavnom súbore Makefile
, neprídeme tak o súčasnú verziu modulov.config
make
mrproper
make dep
)make clean
make bzImage
, zostavené
jadro sa v prípade hladkého priebehu nachádza v adresári kernel-sources/arch/$ARCH/boot
make modules
a následne ich nainštalovať
príkazom v privilegovanom režime make modules_install
, moduly
sa skopírujú do
adresára /lib/modules/$VERSION.$PATCHLEVEL.$SUBLEVEL-$EXTRAVERSION
bzImage
a
súbor System.map
do adresára /boot
System.map
. Obsahuje
totiž adresy a mená symbolov preloženého jadra a používa ho
utilita ksymoops
pri preklade tzv. "kernel oops"
(odchýlky od korektného chovania linuxu) do zrozumiteľnejšej podoby. Je
zaujímavé, že napr. vo verzii 2.5 nebol tento súbor vobec potrebný, pretože funkcionalita
utility ksymoops
bola implementovaná priamo v jadre. Tradičné
umiestnenie súboru je v /boot
alebo /usr/src/linux
.
bootparam(7)
. Najpoužívanejšie parametre sú napr.:
/sbin/init
bootparam(7)