Module HOWTO pl 2 (2)


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

Wyszukiwarka