Linux Module-HOWTO: Programy narzędziowe do obsługi modułów
Następna strona
Poprzednia strona
Spis treści
2. Programy narzędziowe do obsługi modułów
Jest to zestaw programów niezbędnych do obsługiwania modułów. W czasie, gdy to
piszę, najświeższa wersja narzędzi do obsługi modułów to
modules-2.0.0.tar.gz. Informacje na temat bieżącej wersji można znaleźć pod
adresem http://www.pi.se/blox
Pierwszą informację o modułach udostępnili panowie Jacques Gelinas
jacques@solucorp.qc.ca oraz Björn Ekwall bj0rn@blox.se za
pośrednictwem pliku /usr/src/linux/Documentation/modules.txt.
2.1 Tworzenie modułów
W pierwszym kroku powinieneś skompilować jądro, tak jak jest to opisane w pliku
linux/README. Ogólnie rzecz biorąc robi się to tak:
make config
make dep
make clean
make zImage lub make zlilo
Przy make config, wybierasz, które elementy chcesz włączyć do
rezydentnej części jądra, a które chcesz używać w postaci ładowalnych
modułów. Zazwyczaj do części rezydentnej włączasz minimum składników koniecznych do
załadowania systemu:
System plików twojej partycji root
Sterownik SCSI
Obsługa zwykłych twardych dysków
Obsługa sieci (CONFIG_NET)
Obsługa protokołu TCP/IP (CONFIG_INET), ale bez sterowników!
oraz wszystkie rzeczy, bez których po prostu nie da się żyć...
Liczba modułów nieustannie się zwiększa i dla wszystkich elementów, które można w
danym jądrze skompilować do postaci modułów, będziesz mógł wybrać opcję m w
make config .
Masz również możliwość stworzenia modułów, które są w mniejszym stopniu zależne od
wersji jądra. Można tę opcję ustawić w trakcie make config, przez włączenie
CONFIG_MODVERSIONS. Jest ona najbardziej przydatna w przypadku
stabilnych wersji jądra, takich jak na przykład jądra serii 1.2 i 2.0.
Jeśli masz moduły, które oparte są na kodach nie dołączonych do
oficjalnych kodów źródłowych jądra, ta opcja z pewnością ci się spodoba...
Po skompilowaniu jądra, generujesz moduły poleceniem:
make modules
Nastąpi kompilacja wszystkich modułów i uaktualnienie katalogu
linux/modules. W tymże katalogu znajdziesz masę dołączeń symbolicznych,
wskazujących rozmaite pliki obiektowe w katalogach źródłowych jądra.
Teraz, gdy już stworzyłeś wszystkie moduły, powinieneś również wydać polecenie:
make modules_install
Skopiuje ono wszystkie nowo stworzone moduły do katalogów
/lib/modules/wersja_jądra/, gdzie wersja_jądra to coś w rodzaju
2.0.1, zależnie od obecnie posiadanej przez ciebie wersji jądra.
Jak tylko przeładujesz nowo stworzone jądro, możesz instalować i usuwać moduły
za pomocą programów narzędziowych insmod i rmmod. Jeśli przeczytasz
stronę podręcznika systemowego man na temat insmod, dowiesz się również, jak
łatwo jest skonfigurować moduł przy użyciu insmod (wskazówka:
symbol=wartość).
2.2 Rozszerzone programy narzędziowe, modprobe i depmod.
Masz również dostęp do dwóch programów narzędziowych: modprobe i
depmod. modprobe jest to wrapper lub rozszerzenie do insmod. Owe
narzędzia wykorzystują (i utrzymują) zestaw plików, umieszczonych w katalogu
/lib/modules, opisujących wszystkie dostępne dla danej wersji jądra
moduły wraz z ich wzajemnymi zależnościami.
Przy użyciu programu modprobe, możesz załadować każdy moduł w następujący sposób:
/sbin/modprobe module
bez zwracania szczególnej uwagi na wersję jądra, które aktualnie pracuje, lub
na fakt, od jakich innych modułów dany moduł zależy.
Z pomocą pliku konfiguracyjnego programu modprobe: /etc/conf.modules,
możesz na rozmaite sposoby decydować o zachowaniu tego programu, w tym również o
automatycznym ustawianiu opcji programu insmod dla poszczególnych modułów. Tak,
tak, wszystko to jest również udokumentowane na stronach podręcznika systemowego
"man"...
Aby z skutecznie używać programu modprobe, ogólnie rzecz biorąc, należy umieścić
następujące polecenie w skrypcie /etc/rc.d/rc.S. (Na ten temat możesz
przeczytać więcej w pliku rc.hints z pakietu programów narzędziowych do
obsługi modułów, modules-x.y.z.tar.gz.)
/sbin/depmod -a
Zostaną znalezione zależności pomiędzy różnymi modułami.
Wówczas, jeśli na przykład wpiszesz:
/sbin/modprobe umsdos
automatycznie załadujesz zarówno moduł msdos, jak i umsdos,
ponieważ umsdos jeździ na baranach msdos.
2.3 Optymalne narzędzie, kerneld.
No dobra, przeczytałeś wszystko powyższe i jesteś bardzo zachwycony... Teraz
mówimy ci, abyś zapomniał wszystko o tym, jak ładować i usuwać moduły ładowalne.
Z pomocą demona kerneld, wszystkie te rutynowe czynności będą wykonywane
automatycznie. Wystarczy, że zaznaczysz "Y" przy opcji CONFIG_KERNELD w make
config, oraz upewnisz się, że /sbin/kerneld jest uruchamiany możliwie
jak najszybciej po załadowaniu systemu i że /sbin/depmod -a był już
uruchamiany dla bieżącego jądra. (Więcej informacji na ten temat znajdziesz w
pakiecie narzędziowym do obsługi modułów).
Ilekroć jakiś program zażyczy sobie, aby jądro wykonało funkcję, która
jest dostępna jedynie w obrębie ładowalnego modułu, a moduł ów nie jest jeszcze
zainstalowany w jądrze, jądro poprosi demona kerneld o zajęcie się tą
sytuacją.
Oto, co się dzieje:
Jądro spostrzega się, że żądany element nie jest rezydentny w jądrze.
Jądro wysyła wiadomość do kerneld, wraz z symbolicznym opisem żądanej
funkcji.
Demon kerneld zleca programowi modprobe załadowanie modułu odpowiadającego
temu symbolicznemu opisowi.
Modprobe zerka w swoją wewnętrzną tablicę translacji oznaczeń (alias),
aby sprawdzić, czy jest jakieś pasujące. Tablicę te można przekonfigurować i
rozszerzyć wstawiając wiersze alias do pliku /etc/conf.modules.
Następnie programowi insmod zlecane jest wstawienie modułu (modułów), które na
podstawie ustaleń modprobe potrzebne są w jądrze. Każdy moduł zostanie
skonfigurowany zgodnie z opcjami zawartymi w wierszach options pliku
/etc/conf.modules.
Modprobe kończy działanie i kerneld informuje jądro, że żądanie zostało wykonane
(lub skończyło się niepowodzeniem...)
Jądro wykorzystuje świeżo zainstalowany element tak samo, jak gdyby był on
dołączony do rezydentnej części jądra.
Śmietanką na całym naszym torcie jest to, że jeśli automatycznie zainstalowany
moduł nie jest przez jakiś czas używany (zazwyczaj przez 1 minutę), jest on
również automatycznie usuwany.
Powoduje to, że jądro używa minimalnego niezbędnego w danym momencie obszaru
pamięci, umożliwiając jej bardziej efektywne wykorzystanie niż w charakterze
pojemnika na nie używany kod.
Tak naprawdę, jest to jedynie efekt uboczny prawdziwej zalety kerneld:
Musisz jedynie stworzyć jądro-minimum, mniej lub bardziej niezależne od faktycznej
konfiguracji sprzętowej. Ustawienia wirtualnego jądra są natomiast
nadzorowane w oparciu o plik konfiguracyjny, przy uwzlędnieniu bieżącego sposobu
użytkowania komputera i jądra systemu.
Powinna to być dobra wiadomość dla osób opiekujących się wieloma komputerami, jak
również dla tych, którzy opiekują się dystrybucjami.
Aby używać kerneld bez nadmiernych zmagań, będzie ci potrzebny modprobe z
wersji, którą można uznać za świeżą w stosunku do twojego jądra, jak również plik
konfiguracyjny dla modprobe (/etc/conf.modules).
Ponieważ modprobe zna większość modułów, najprostszy plik konfiguracyjny może
wyglądać tak:
alias scsi_hostadapter aha1542 # czy też jakikolwiek inny kontroler SCSI, jaki
posiadasz
alias eth0 3c509 # lub jakaś inna, używana przez ciebie karta ethernet
# dla niektórych kart sieciowych możesz potrzebować
# wiersza opcji - "options"
options 3c509 io=0x300 irq=10
# możesz też potrzebować wiersza opcji dla jakiegoś innego modułu
options cdu31a cdu31a_port=0x1f88 sony_pas_init=1
Mógłbyś również dodać poniższe linie, ale są to jedynie upiększenia:
alias net-pf-3 off # (nadal) brak modułu ax25
alias net-pf-4 off # jeśli nie używasz modułu ipx
alias net-pf-5 off # jeśli nie używasz modułu appletalk
Na koniec, dla pedantów: Możesz nazwać plik konfiguracyjny
/etc/conf.modules, albo /etc/modules.conf, gdyż modprobe wie,
jak postępować w każdym z tych przypadków.
Następna strona
Poprzednia strona
Spis treści