Wst p do moduªów Marcin Milewski Instytut Informatyki Uniwersytetu Wrocªawskiego Wrocªaw, 28 pa¹dziernika 2009
Moduªy Ró»ne okre±lenia ªadowalne moduªy j dra, moduªy j dra, moduªy ang. Loadable Kernel Modules (LKM) w innych systemach operacyjnych tak»e rozszerzenia j dra (ang. kernel extensions) Rozszerzenia plików W j drze 2.6 pliki nazywaj si *.ko zawieraj sekcj.modinfo a nie *.o. Dodatkowo
Zalety i wady Zalety nie trzeba przebudowywa j dra lepiej pozostawi dziaªaj ce j dro nietkni tym mo»na wyª czy pewn funkcjonalno± (moduªy mog zatrzyma uruchamianie systemu) oszcz dno± pami ci brak spadku wydajno±ci dziaªaj podobnie jak programy, ale mog zatrzyma system
Zalety i wady Ewentualne kªopoty które moduªy ªadowa przy starcie systemu? zale»no±ci mi dzy moduªami specyczne dla j dra, /lib/modules/ nie mog drukowa niczego na ekranie (w sensie trybu gracznego)
Zastosowanie sterowniki urz dze«sterowniki s projektowane dla konkretnego sprz tu. J dro u»ywa ich do komunikacji ze sprz tem pomijaj c szczegóªy pracy sprz tu. Takie sterowniki mog by np. dla dysków ATA. eby skorzysta z urz dzenia, j dro musi zawiera odpowiedni dla niego sterownik. sterowniki systemu plików sterownik interpretuje zawarto± systemu plików (czyli zawarto± dysku twardego) jako pliki i katalogi. Jest wiele sposobów na przechowywanie plików, np. wspomniane dyski twarde czy serwery sieciowe. Dla ka»dego z nich potrzebny jest sterownik. Wi c mamy sterowniki dla ext3, msdos czy nfs. sterowniki sieciowe taki sterownik interpretuje protokóª sieciowy. Zarz dza danymi, które przepªywaj mi dzy ró»nymi warstwami sieciowymi.
Zastosowanie wywoªania systemowe programy w przestrzeni u»ytkownika u»ywaj mechanizmu wywoªa«systemowych, aby uzyska od j dra wykonanie jakiej± usªugi. Przykªadowe wywoªania systemowe to odczyt z pliku, utworzenie nowego procesu czy zamkni cie systemu. Wi kszo± z wywoªa«systemowych jest integraln cz ±ci systemu, wi c s w budowane w j dro. Mo»na jednak wymy±li swoje wywoªanie systemowe i obsªugiwa je przez moduª. Mo»na te» nadpisa zachowanie j dra i samemu obsªugiwa pewne wywoªania systemowe. interpretery, binfmt_java ich zadaniem jest ªadowanie i uruchamianie plików wykonywalnych. Linuks jest zaprojektowany, aby uruchamia pliki wykonywalne w ró»nych formatach. Ka»dy z nich musi mie swój interpreter. Posiadaja np. moduª interpretuj cy bytecode mo»emy uruchamia pliki Javy jak normalne pliki wykonywalne.
Niezb dne polecenia insmod insmod moduª.ko proste? nale»y poda peªn ±cie»k problemy z wersjami (ang. module/kernel version mismatch) problemy z symbolami (ang. unresolved symbols) modprobe modprobe [opcje] moduª [parametry] -n --dry-run uruchamia moduª, ale go nie wpina do j dra. U»yte z opcj -v jest dobre do debugowania -r --remove usu«moduª z j dra -f --force usuwa informacje o wersji,»eby przepchn ªadowanie -o --name zaªaduj moduª pod wskazan nazw
Niezb dne polecenia cd. rmmod rmmod moduª usuwa moduª z j dra -f --force usuwa nawet je»eli kto± z niego korzysta depmod -a Wygenerowanie zale»no±ci mi dzy moduªami. Zapis w pliku /lib/modules/`uname -r`/modules.dep
Pomocnicze polecenia modinfo Informacje o module, np. modinfo snd-pcm objdump -x Informacje dla plików linkowalnych (.o ). Nie tylko dla moduªów, ale moduª jest specjalnym przypadkiem. ELF (Executable and Linkable Format) pliki wykonywalne, linkowalne (.o ), biblioteki (.so ) oraz moduª (.ko ).
insmod/modprobe - dobra rada Wygodniej jest u»ywa modprobe zamiast insmod, gdy»: mo»na tworzy aliasy plik /etc/modprobe.conf szuka moduªów /lib/modules/`uname -r`/kernel/ wymaga tylko nazwy, nie wymaga ±cie»ki czy rozszerzenia rozwi zuje zale»no±ci
Wa»ne miejsca /lib/modules/`uname -r`/ moduªy dla konkretnej wersji j dra /usr/src/`uname -r`/include/ nagªówki j dra /proc/modules informacje o zaªadowanych moduªach (czyteln wersj dostarcza lsmod ) /proc/kallsyms symbole wyeksportowane do j dra (moduªy s plikami.o, symbole s potrzebne przy linkowaniu) /var/log/messages logi z uruchamiania (patrz dmesg )
Wymagania ±ci gni te nagªówki j dra przynajmniej dwie funkcje int init_module(void) void cleanup_module(void) nale»y doª czy plik linux/module.h narz dzie make
Najprostszy moduª / hello1 - najprostszy program / #include <linux/kernel.h> / makra KERN / #include <linux/module.h> int init module(void) { printk(kern INFO "witaj w hello1\n"); return 0; } void cleanup module(void) { printk(kern INFO "pa pa, hello1\n"); } linux/kernel.h potrzebne do printk(), KERN_INFO, KERN_ALERT, KERN_EMERG makra logowania priorytety s w pliku linux/kernel.h. Domy±lny to default_message_loglevel
Kompilacja hello1.c PWD=$ ( s h e l l pwd ) b u i l d D i r =/ l i b / modules /$ ( s h e l l uname r )/ b u i l d obj m += h e l l o 1. o a l l : c l e a n : make C $ b u i l d D i r M=$ (PWD) modules make C $ b u i l d D i r M=$ (PWD) c l e a n
Zmiana funkcji init i cleanup / hello2 - wªasne funkcje init i cleanup / #include <linux/module.h> #include <linux/kernel.h> / makra KERN / #include <linux/init.h> / makra do zmiany funkcji init i cleanup / const static int n=2; static int init myinit(void) { printk(kern INFO "Drugi moduª si rozpocz ª! n=%d \n", n); return 0; } static void exit mycleanup(void) { printk(kern INFO "Ko«czymy drugi moduª\n"); } module init(myinit); module exit(mycleanup);
Kompilacja z nowym moduªem PWD=$ ( s h e l l pwd ) b u i l d D i r =/ l i b / modules /$ ( s h e l l uname r )/ b u i l d obj m += h e l l o 1. o obj m += h e l l o 2. o a l l : c l e a n : make C $ b u i l d D i r M=$ (PWD) modules make C $ b u i l d D i r M=$ (PWD) c l e a n
Dokumentacja moduªu MODULE_AUTHOR("Marcin Milewski"); MODULE_DESCRIPTION("Szczegóªowy opis"); MODULE_VERSION("1.0-rc1"); MODULE_LICENSE("GPL"); MODULE_PARM_DESC(numerek, "szcz ±liwy numerek"); U»ycie: modinfo
Argumenty dla moduªu Mo»na przekazywa : liczby ci gi znaków tablice warto±ci Przykªad: modprobe hello3 luckyone=42 name=marcin msgs=hello,world
Kilka informacji do eksportowania funkcji/symboli sªu»y makro EXPORT_SYMBOL(symbol) Makele z prawdziwego zdarzenia: /usr/src/linux-headers-`uname -r`/drivers/char/makefile moduªy pracuj w przestrzeni j dra, a nie w przestrzeni u»ytkownika Fragmentation penalty j dro jest w ci gªym obszarze pami ci. Do czasu zaªadowania moduªów. Wydajno±
User-mode linux Linuks jako proces na prawach u»ytkownika - wirtualny system (host & guests) bezpieczne testowanie oprogramowania honeypot - puªapka do wykrywania prób nieautoryzowanego dost pu. Komputer + dane + sie + oprogramowanie
Bibliograa The Linux Kernel Module Programming Guide User-mode Linux @ Wikipedia, http://pl.wikipedia.org/wiki/user-mode_linux Instalacja UML, https://help.ubuntu.com/community/usermodelinux