LINUXZONE






 >> Hlavní stránka

(1751/28.09.2010)


 >> Administrace

(161/05.08.2010)


 >> Literatura

(312/14.09.2010)


 >> Bezpečnost

(347/17.09.2010)


 >> Programování

(307/19.04.2010)


 >> Distribuce

(98/16.09.2010)


 >> Síťování

(86/03.06.2010)


 >> Lokalizace

(10/15.09.2004)


 >> Aplikace

(176/12.08.2010)


 >> Multimedia

(32/31.03.2006)


 >> Hardware

(45/02.03.2007)


 >> Začínáme

(229/09.09.2010)


 >> Aktuálně

(564/20.09.2010)


 >> RELAX

(213/28.09.2010)


 >> Jinde vyšlo

přehled ostatních serverů




 Coolhousing




Coolhousing - Vas poskytovatel dedikovanych serveru




 Přihlášení




Login:
Heslo:
 uložit v prohlížeči


Nejste-li ješte zaregistrováni, můžete tak učinit zde.





 Vyhledávání




Hledaný výraz:
v klíčových slovech
v titulku
v anotaci
v textu








 Reklama









 Servis




*   Vaše náměty a připomínky
Máte k Linuxzone.cz nějaké připomínky nebo náměty? Našli jste na stránkách chybu? Dejte nám o tom vědět pomocí formuláře nebo v diskuzi.
Komentářů: 60
*   Podpořte Linuxzone.cz
Chcete podpořit náš server umístěním odkazu nebo zveřejněním backendu? Zde najdete vše potřebné.
*   Pište pro Linuxzone.cz
Máte zájem podílet se na obsahu Linuxzone.cz ať už jako redaktoři nebo i jinak? Dejte nám o sobě vědět!





 Aktuálně z bezpečnosti




-- 
6.12.2005, 19:01
Na serveru informit.com vyšla ukázková kapitola týkající se práce s řetězci z knihy Secure Coding in C and C++. (lz)

-- 
3.12.2005, 12:34
Bugtraq: Format String Vulnerabilities in Perl Programs. (lz)

-- 
3.12.2005, 12:32
Linux Advisory Watch December 2nd 2005. (lz)

-- 
23.10.2005, 13:28
Rozhovor na téma klasické zálohování versus CDP. (lz)

-- 
23.10.2005, 13:24
Linux Advisory Watch October 21st 2005. (lz)

další >>





 Aktuálně o software




-- 
6.12.2005, 19:07
Potřebujete-li pod linuxem rozchodit bezdrát založený na čipsetech Broadcom 43xx, konečně existuje linuxový ovladač. (lz)

-- 
6.12.2005, 19:04
Byla uvolněna verze Xen 3.0.0 virtualizační technologie XEN. (lz)

-- 
6.12.2005, 18:59
Byla uvolněna verze X11R6.9/X11R7 RC 3 grafickérho rozhraní X Window System. (lz)

-- 
3.12.2005, 12:45
Co je nového okolo projektu Amanda (open source zálohovací software)? Více na osnews.com. (lz)

-- 
3.12.2005, 12:40
Jak to akuálně v linuxu vypadá s podporou SATA.. (lz)

další >>





 Aktuálně z IT




-- 
3.12.2005, 12:51
Novellu se daří prodej linuxových produktů, oproti loňskému roku se Novell dočkal výrazného nárůstu. (lz)

-- 
3.12.2005, 12:48
Třetí verzi licence GPL by měla být publikována během jara 2007. (lz)

-- 
23.10.2005, 13:20
V Peru nyní mají zákon, který umožňuje nasazení open source software ve vládní správě. (lz)

-- 
23.10.2005, 13:14
Proč se Microsoft bojí Google? (lz)

-- 
27.9.2005, 22:01
Peru má zákon podporující free software. (lz)

další >>





 Nejčtenější články









 Nejlepší články









 Anketa




Používáte nějaké rozšíření bezpečnostního modelu linuxového jádra?

Openwall (17%)

LIDS (11%)

Pax/Grsecurity (3%)

SELinux (6%)

RSBAC (1%)

jiné (1%)

používám standardní jádro (62%)







Linuxzone.cz - server o Linuxu pro programátory, administrátory a fanoušky.
Provozuje společnost Impossible.
ISSN: 1213-8738





Bootujeme modulární jádro (1. část)

Jádro Linuxu může být sestaveno dvěma způsoby: potřebné ovladače mohou být zakompilovány přímo do jádra anebo mohou být k dispozici formou tzv. modulů - tedy ovladačů, které mohou být do jádra zavedeny nebo naopak uvolněny kdykoliv podle potřeby. Nicméně minimální sada ovladačů musí být k dispozici již při startu systému, což se obvykle řeší za použití speciálního ramdisku "initrd". Podíváme se, jak to celé funguje a na co si dát pozor při sestavování modulárního jádra. První část se věnuje problematice zavádění modulů a popisu nástrojů pro práci s moduly.

  • 1) Monolitické nebo modulární jádro?
  • 2) Práce s moduly - balíček modutils
  • 3) Automatické zavádění/odstranění modulů jádrem - kerneld, kmod...
  • 4) Předávání parametrů ovladačů
  • 5) Závěrem

1) Monolitické nebo modulární jádro?

Linux podporuje značné množství periferií a tedy i množství ovladačů, které jsou zapotřebí k provozu běžných instalací Linuxu je velké. Ovladače mohou být přímou součástí jádra - takové jádro, které obsahuje pouze zabudované ovladače nazýváme jádrem monolitickým. Většina ovladačů však může být sestavana a používána jako moduly, které lze za běhu systému v případě potřeby natáhnout nebo je naopak kdyz už nejsou zapotřebí z jádra uvolnit. Pokud je jádro sestaveno s podporou modulů, hovoříme o modulárním jádře. Pochopitelně velikost jádra je omezená, takže mnohdy ani není možné sestavit monolitické jádro, které by obsahovalo všechny požadované ovladače, obvykle se tedy používají jádra modulární; jádra monolitická používají v opodstatněných případech zkušení uživatelé, kteří si je připravují podle svých potřeb.

Pokud používáme modulární jádro, neobejdeme se bez balíčku modutils, který obsahuje nástroje pro práci s moduly. Jednotlivé nástroje balíčku modutils si nyní představíme a na krátkých příkladech vysvětlíme práci s moduly. Ještě doplňme, že moduly pro danou verzi jádra jsou uložené v odpovídajícím podadresáři v adresáři /lib/modules. Moduly jsou pak ještě rozděleny do podadresářů podle funkce (ovladače blokových zařízení v adresáři drivers/block, ovladače znakových zařízení v adresáři drivers/char, ovladače souborových systémů v adresáři fs atd.). Celá stromová struktura pak může vypadat např. takto (v příkladu pro jádro 2.4.2-mod; mimochodem verzi běžícího jádra zjistíme příkazem uname s volbou -a, v případě jádra uloženého v souboru na disku si vypomůžeme příkazy strings a grep):

/
`-lib
  `-modules
    `-2.4.2-mod
      |-- build -> /usr/src/linux
      |-- kernel
      |   |-- drivers
      |   |   |-- block
      |   |   |   |-- loop.o
      |   |   |   `-- rd.o
      |   |   |-- cdrom
      |   |   |   `-- cdrom.o
      |   |   |-- char
      |   |   |   `-- lp.o
      |   |   |-- i2c
      |   |   |-- media
      |   |   |-- net
      |   |   |-- parport
      |   |   |   |-- parport.o
      |   |   |   `-- parport_pc.o
      |   |   |-- scsi
      |   |   `-- sound
      |   |-- fs
      |   |   |-- fat
      |   |   |   `-- fat.o
      |   |   |-- isofs
      |   |   |   `-- isofs.o
      |   |   `-- msdos
      |   |       `-- msdos.o
      |   `-- net
      `-- modules.dep

2) Práce s moduly - balíček modutils

Dříve než se začneme zabývat procesem bootování modulárního jádra a záležitostí s tím spojených, podívejme se v krátkosti jakým způsobem se s moduly pracuje.

Utilita depmod slouží k sestavení jakéhosi "inventáře" dostupných modulů. Obvykle je spuštěna automaticky při startu systému prostřednictvím startovacích skriptů (rc.sysinit v Red Hatu apod.) a vygeneruje soubor modules.dep - což je textový soubor, ve kterém jsou jednotlivé moduly vypsány spolu s jejich závislostmi. Depmod také použijeme případě, že dodatečně instalujeme nějaký modul - pokud by modul nebyl uveden v souboru modules.dep, bylo by sice možné jej zavést, ale s mnohem menším komfortem. Např. u modulu lp.o (podpora tiskáren připojených k paralelnímu portu) bude v souboru modules.dep poznamenáno, že ke své funkčnosti vyžaduje modul parport.o (což je obecný ovladač paralelního portu nezávislý na platformě) a ten ještě na platformě PC potřebuje modul parport_pc.o.

Nástroj insmod slouží k manuálnímu zavádění modulů do jádra. Obvykle je k dispozici ve dvou verzích - jednak dynamicky linkované a také ve verzi staticky linkované (např. v distribucích Red Hat insmod.static), což je z toho důvodu, aby bylo možné tento nástroj použít i v případě, kdy nejsou dostupné knihovny (anebo jsou poškozené). Pokud bychom chtěli zavést modul parport, spustíme insmod parport. V případě, že chceme pouze ujistit, že daný modul natáhnout lze, můžeme použít volby -p nebo -n. Pokud použijeme pro zavedení modulu utilitu insmod, je na nás, abychom v patřičném pořadí zavedli i případné další moduly, které modul vyžaduje, v opačném případě se setkáme chybovým hlášením, že nelze modul nelze zavést neboť nelze mapovat některé symboly. Např. pokusíme-li se ručně zavést modul lp, aniž bychom předtím zavedli modul parport, pokus o zavedení skončí s následující chybovou hláškou:

vanvancito /usr/src/linux 48$ insmod lp
Using /lib/modules/2.4.2-mod/kernel/drivers/char/lp.o
/lib/modules/2.4.2-mod/kernel/drivers/char/lp.o: \
                    unresolved symbol parport_write_R5279b323
/lib/modules/2.4.2-mod/kernel/drivers/char/lp.o: \
                    unresolved symbol parport_read_R806760f9
[ ... zkráceno]
    

Utilita rmmod služí k uvolnění modulu z jádra. Samozřejmě je možné se zbavit pouze těch modulů, které nejsou dalšími moduly používány, pokud se pokusíme takový modul odstranit, obdržíme následující hlášení:

vanvancito /usr/src/linux 59$ rmmod parport
parport: Device or resource busy
    

Utilita lsmod slouží k vypsání zavedených modulů, u každého modulu je vyznačeno, jestli je používán dalšími moduly a pokud ano, tak kterými. Např. následující výpis ukazuje, že modul parport je používán moduly parport_pc a lp, naopak modul lp žádným modulem používán není. Pokud bychom tedy chtěli tyto moduly odstranit, zavoláme rmmod nejprve na modul lp, pak na modul parport_pc a na závěr na modul parport. O významu příznaku "autoclean" se zmíníme později v části věnované automatickému zavádění a odstraňování modulů:

vanvancito /usr/src/linux 12$ lsmod
Module                  Size  Used by
parport_pc             19056   1  (autoclean)
lp                      5200   0  (unused)
parport                28960   1  [parport_pc lp]
    

K pohodlnější manipulaci s moduly je určena utilita modprobe. Ta používá výše zmíněný soubor modules.dep, ve kterém jsou popsány závislosti mezi moduly, takže není nutné zavádět jednotlivé moduly postupně, pokud bychom např. chtěli zavést ovladač bttv (ovladač pro televizní/radio tunery), postačí zadat příkaz modprobe bttv. Chceme-li pouze zjistit, jaké moduly budou v daném případě zavedeny, můžeme modprobe spustit s volbou -n:

vanvancito /usr/src/linux 140$ modprobe -n -v bttv
/sbin/insmod /lib/modules/2.4.2-mod/kernel/drivers/i2c/i2c-core.o
/sbin/insmod /lib/modules/2.4.2-mod/kernel/drivers/i2c/i2c-algo-bit.o
/sbin/insmod /lib/modules/2.4.2-mod/kernel/drivers/media/video/bttv.o
    

3) Automatické zavádění/odstranění modulů jádrem - kerneld, kmod...

Kromě manuálního zavádění ovladačů nástroji z balíčku modutils je také možno jádro sestavit s podporou automatického zavádění modulů. Moduly pak mohou být natahovány aktuálně podle potřeby. Záležitosti týkající se podpory modulů nalezneme při konfiguraci jádra v sekci "Loadable module support", volba "Kernel module loader" se týká právě podpory automatického zavádění modulů, viz. obrázek:


Ve starších jádrech (řada 2.0) se setkáme s démonem kerneld (což byl samostatný proces běžící mimo jádro), v novějších jádrech má toto na starostí vlákno jádra kmod. Kmod nabízí oproti kerneld omezenou funkčnost - v podstatě pouze v případě potřeby spustí modprobe - což se ovšem běžného uživatele nijak nedotkne. Jediná pro běžného uživatele pozorovatelná změna je ta, že kerneld sám odstraňoval po uplynutí určité doby nepoužívané moduly, zatímco na systémech používajících pro správu modulů kmod se nepužívaných modulů zbavíme pomocí periodického spuštění rmmod s příslušnými parametry z cronu - cron tabulka pak obvykle obsahuje např. následující záznam:

# každých 10 minut se zbavíme nepoužívaných modulů
# s příznakem autoclean
*/10 * * * *    root    /sbin/rmmod -as
    

Ještě doplňme, že při zavádění modulu máme možnost u modulu nastavit příznak "autoclean" (volba -k). Pokud je tento příznak nastaven, může být modul odstraněn právě spuštěním rmmod s volbou -a; máme tedy možnost zavést modul i takovým způsobem, aby nebyl po určité době automaticky odstraněn i když není používán.

Protože kmod pro zavádění modulů používá modprobe, uplatní se i při automatickém zavádění modulu jádrem konfigurace uložená v konfiguračním souboru /etc/modules.conf (viz následující odstavec věnovaný předávání parametrů ovladačů).

4) Předávání parametrů ovladačů

Řada ovladačů umožňuje nastavení různých parametrů, jako jsou např. I/O adresy či přerušení atd. Nástroj modinfo umožňuje prohlížet informace o modulu jako je popis modulu nebo zejména možné parametry (volba -p):

vanvancito /usr/src/linux 109$ modinfo --p parport_pc
io int array (min=1,max=8), description "Base I/O address (SPP regs)"
io_hi int array (min=1,max=8), description "Base I/O address (ECR)"
irq string array (min=1,max=8), description "IRQ line"
dma string array (min=1, max=8), description "DMA channel"
    

Příslušné parametry pak můžeme zadat utilitě insmod či modprobe při zavádění modulu, např. následující příkaz zavede modul parport_pc a požaduje inicializaci dvou paraleních portů, první na adrese 0x378 bude používat číslo přerušení 7, druhý na adrese 0x278 a číslo přerušení (IRQ) bude autodetekováno ovladačem:

insmod parport_pc.o io=0x378,0x278 irq=7,auto
    

Naopak pokud by byl ovladač zakompilován v jádře přímo, potřebné nastavení bychom předali jádru při startu jako parametr. Např. pokud pro zavadení jádra používáme LILO, v konfiguračním souboru lilo.conf bychom uvedli následující řádek:

append "parport=0x378,7 parport=0x278,auto"
    

Pokud používáme pro zavádění modulů utlitu modprobe anebo máme v jádře zapnutou podporu automatického zavádění modulů (ať už starší kerneld či novější kmod), což je způsob který používá drtivá většina instalací Linuxu, pak patřičné parametry ovladačů můžeme uvést v konfiguračním souboru /etc/modules.conf (dříve také /etc/conf.modules). Pak bychom do konfiguračního souboru uvedli třeba následující:

alias parport_lowlevel parport_pc
options parport_pc io=0x378,0x278 irq=7,auto
    

5) Závěrem

Nástroje balíčku modutils podporují řadu dalších voleb, které tady nejsou zmíněny, stejně tak zde není detailně rozebrána syntaxe a možnosti konfiguračního souboru modules.conf. Pokud bychom zde ale chtěli probrat všechny možnosti, článek by se tím redukoval na výtah manuálových stránek a ztratil na přehlednosti. Zájemce o detailnější popis tedy odkáži na příslušné manuálové stránky balíčku modutils a dokumentaci jádra. Ve druhé části tohoto miniseriálu se už podíváme na proces bootování modulárního jádra.

Další části seriálu:

Autor: David Häring, 28. 03. 2002, 12:30
Sekce Administrace, Komentářů: 1
Průměrné hodnocení: 0,22

o Poslat e-mailem
o Tisk článku
o Uložit do profilu


 Přispějte nám




Líbil se Vám tento článek? Můžete ho ocenit zavoláním na tel. číslo 906 460 134.
Cena hovoru za 1 minutu je 46 Kč.





 Hodnocení článku




Článek hodnotím jako:  [1] výborný   [2] dobrý   [3] průměr   [4] špatný   [5] hrůza  





 Komentáře




--

pajout, 28. 03. 2002 13:03
skvelej clanek, diky















PŘIDAT KOMENTÁŘ ZOBRAZ VŠE >>










2002 © Impossible, s.r.o.   >> Kontaktujte redakci >> Právní upozornění >> Reklama