Linux E X P R E S

Facebook

Jak se pracuje s moduly jádra?

Jak se zavádějí jaderné moduly do paměti? Tato otázka může trápit mnohé uživatele, my se ji pokusíme zodpovědět.


V první řadě je nutné upozornit, že zavádět moduly může pouze uživatel root, který vlastně může cokoliv. Proč tomu tak je? Root se stará o to, aby celý systém v pořádku běžel, je to administrátor. Běžný uživatel má systém pouze používat, nikoliv zasahovat do jeho běhu či funkčnosti. Samozřejmě může ovlivňovat programy, které používá, jejich nastavení se ale ukládá právě a pouze v adresáři tohoto uživatele. Říká se tomu uživatelský prostor, user space.

Oproti tomu kernel space je prostor, kde panuje jádro. Jedná se samozřejmě o správu služeb a prostředků, jež ovlivňují celý systém, tedy i konkrétní user spaces. Zavedením modulu se mění podmínky pro jednotlivé uživatelské programy. Proto je může ovlivnit pouze kvalifikovaný uživatel - správce čili root. Tolik teoretická úvaha. Jako root tedy modul načtete příkazem insmod jméno_modulu. Může se však stát, že se vložení modulu do paměti nezdaří a příkaz ohlásí chybu. V mnoha skriptech by to byla obtížně řešitelná situace, a proto existuje příkaz modprobe, který se pokusí načíst modul do paměti. Pokud se to zdaří, vrací interně kladnou hodnotu, pokud ne, vrací hodnotu zápornou a vypíše chybové hlášení. Taková můžeme mnohdy vídat při startu systému (což svědčí o lenosti roota tyto příčiny odstranit). Ve skriptu lze však tento stav snadno ošetřit a pokračovat. Moduly jádra jsou uloženy v adresáři /lib/modules/verze-jádra/.

# modprobe linuxexpres
FATAL: Module linuxexpres not found.

Stejně jako lze moduly do paměti načíst, lze je i vyjmout. Problém nastává, je-li zařízení, které modul obsluhuje, používáno. Moduly jsou také mnohdy závislé jeden na druhém. V takovém případě je nutné hledat modul, který stojí na začátku závislostní řady, nebo přestat používat zařízení (obvykle neřešitelné).

# lsmod |grep usb
usbserial              26088  2 visor,pl2303
usblp                  10752  0 

Jak tyto závislosti zjistíme? Stačí použít příkaz lsmod neboli "list modules". Zobrazí název modulu, jeho velikost a "vlastníka", resp. modul, který jej využívá. Je tedy nutné najít ten modul, který nemá žádného vlastníka a začít s odstraňováním.

# rmmod usblp
# lsmod |grep usb usbserial              26088  2 visor,pl2303

Další zajímavý příkaz je ještě modinfo. Vypisuje parametry, které ovlivňují chování modulu a také informace o autorech. Mnohdy je to klíč k pochopení správných parametrů. Více informací poskytují jednotlivé manuálové stránky.

# modinfo usbserial
author:         Greg Kroah-Hartman, greg@kroah_com,
http://www.kroah.com/linux/
description:    USB Serial Driver core
version:        v2.0
license:        GPL
parm:           debug:Debug enabled or not
parm:           vendor:User specified USB idVendor
parm:           product:User specified USB idProduct
vermagic:       2.6.10 486 gcc-3.3
depends:        
srcversion:     F93DD337E70663249DF3E0D

Diskuze (0) Nahoru