Scroll to navigation

INSMOD(8) Wsparcie dla modułów INSMOD(8)

NAZWA

insmod - instaluje ładowalny moduł jądra

SKŁADNIA

insmod [-fhkLmnpqrsSvVxXyY] [-e nazwa_przechowalni] [-o nazwa_modułu] [-O nazwa_blob] [-P przedrostek] moduł [ symbol=wartość ... ]

OPIS

insmod instaluje ładowalny moduł do działającego jądrze.

insmod próbuje dołączyć moduł do uruchomionego jądra systemu przez rozwiązanie wszystkich symboli z tabeli udostępnianych symboli jądra.

Jeśli nazwa pliku modułu, podana jest bez katalogu i rozszerzenia, insmod będzie szukał modułu w kilku standardowych katalogach. Można użyć zmiennej środowiska MODPATH aby zmienić to standardowe zachowanie. Jeśli istnieje plik konfiguracyjny modułów taki, jak /etc/modules.conf (lub (przestarzały) /etc/conf.modules), ścieżki w nim zdefiniowane będą miały priorytet nad zdefiniowanymi w MODPATH.
Można również posłużyć się zmienną środowiska MODULECONF dla wybrania innego pliku konfiguracyjnego niż standardowy /etc/modules.conf (lub (przestarzały) /etc/conf.modules). Ta zmienna środowiska będzie miała priorytet nad wszystkimi powyższymi definicjami.

OPCJE

Usiłuje załadować moduł nawet jeśli wersja uruchomionego jądra i jądra dla którego moduł został skompilowany nie zgadzają się. Powoduje to jedynie wyłączenie kontroli zgodności wersji. Opcja ta nie ma wpływu na sprawdzanie nazw symboli. Jeśli nazwy symboli w module nie zgadzają się z kernelem, wymuszenie nie jest możliwe.
Wypisuje tekst pomocy.
Ustawia dla danego modułu atrybut automatycznego usuwania. kerneld(8) usunie każdy moduł z tym atrybutem, jeśli nie będzie on używany przez pewien okres czasu — zazwyczaj jedną minutę.
Za pomocą flock(2) zapobiega jednoczesnemu łądowaniu tego samego modułu.
Wypisuje odwzorowanie ładowanych symboli, które może pomóc w odszukaniu usterki w przypadku wystąpienia błędu jądra (kernel panic).
Symulacja pracy, wykonuje wszystko oprócz załadowania modułu do jądra. Jeśli wywołane z -m lub -O, w wyniku uruchomienia powstanie odwzorowanie symboli lub plik z kopią kodu modułu w jądrze (blob). Ze względu na fakt, że moduł nie zostanie załadowany, rzeczywisty adres jądra, pod którym moduł byłby załadowany pozostanie nieznany, więc zarówno odwzorowanie symboli, jak i plik blob zostaną oparte na z góry ustalonym adresie 0x12340000.
Sprawdza, czy moduł może zostać załadowany bez kłopotów. Obejmuje to znalezienie modułu w ścieżce wyszukiwania dla modułów, sprawdzanie numerów wersji i rozwiązanie symboli. nie są sprawdzane przesunięcia ani nie są tworzone odwzorowanie symboli i plik blob.
Nie wypisuje listy nierozwiązanych symboli. Nie narzeka na niezgodne wersje. Wystąpienie problemu zostanie jedynie uwidocznione w kodzie zakończenia programu insmod.
Niektórzy użytkownicy kompilują moduły jako użytkownik inny niż root, a następnie instalują je jako root. W wyniku tego właścicielem modułów nie będzie root, nawet jeśli jest on właścicielem katalogu modułów. Jeśli dopuści się innego użytkownika niż root jako właściciela modułów, umożliwi się nieproszonemu gościowi nadpisanie istniejących modułów będących własnością tego użytkownika i wykorzystanie załadowania go do uzyskania uprawnień roota.
Domyślnie, modutils odrzucą próbę załadowania modułu nie należącego do root-a. Podanie -r zniesie błąd i pozwoli root-owi załadować moduły, które nie są jego własnością. Uwaga: domyślne wartość opcji sprawdzania, czy właścicielem jest root może być zmieniona podczas konfiguracji modutils.
Używanie -r do wyłączenia sprawdzania, czy właścicielem jest root lub ustawienie wartości domyślnej na "nie sprawdzaj, czy właścicielem jest root" podczas konfiguracji stanowi poważne naruszenie bezpieczeństwa i nie jest zalecane.
Wyprowadza wszystko do syslog(3) zamiast na terminal.
Wymusza, aby ładowany moduł zawierał dane kallsyms, nawet gdy jądro ich nie obsługuje. Ta opcja jest przeznaczona dla małych systemów, gdzie jądro jest ładowane bez danych kallsyms, ale wybrane moduły potrzebują kallsyms dla poszukiwania usterek.
Włącza wyświetlanie dużej ilości informacji.
Odpowiednio, udostępnia lub nie wszystkie symbole zewnętrzne modułów. Standardowo, symbole są udostępniane. Ta opcja ma jedynie znaczenie, gdy moduł sam jawnie nie udostępnia swojej własnej tabeli symboli i dlatego jest w zaniku. -Y --ksymoops, -y --noksymoops Dodaje/nie dodaje do ksyms symboli dla ksymoops. Symbole te są używane przez ksymoops aby zapewnić większe możliwości poszukiwania usterek, gdy wystąpi w tym module Oops (błąd kernela). Standardowo, symbole dla ksymoops są zdefiniowane. Ta opcja jest niezależna od opcji -X/-x.
Symbole dla ksymoops zwiększają ładowany moduł o około 260 bajtów. O ile nie cierpi się na wyrażny brak przestrzeni adresowej kernela i nie próbuje się zminimalizować ksyms, należy przyjąć wartość domyślną i otrzymywać bardziej precyzyjne informacje o usterkach w razie Oops. Symbole dla ksymoops są niezbędne, aby w sposób trwały przechowywać dane modułów.
Podanie jawne nazwy modułu, zamiast wywodzenia jej z podstawowej części nazwy pliku z modułem.
Zachowuje obiekt binarny w nazwa_blob. Wynikiem jest binarny blob (bez nagłówków ELF) pokazujący, co dokładnie zostało załadowane do kernela po manipulacjach sekcjami i przesunięciach. Zaleca się opcję -m, aby otrzymać odwzorowanie symboli obiektu.
Ta opcja może być używana z wersjonowanymi modułami, przy jądrze SMP lub jądrze z obsługą wysokiej pamięci (bigmem), gdyż wówczas do nazw symboli modułów dodawany jest dodatkowy przedrostek. Jeśli jądro zostało zbudowane z wersjonowanymi symbolami, to insmod automatycznie wyciągnie przedrostek z definicji "get_module_symbol" lub "inter_module_get", z których jeden musi istnieć w dowolnym kernelu obsługującym moduły. Jeśli symbole jądra nie są wersjonowane, a moduł został zbudowany z wersjonowanymi symbolami, to użytkownik musi podać -P.
Określa, skąd powinny być odczytane jakiekolwiek trwałe dane dla modułu podczas jego ładowania i gdzie powinny one zostać zapisane, gdy ta kopia modułu będzie usuwana z jądra. Opcja ta jest milcząco ignorowana, gdy moduł nie posiada żadnych trwale przechowywanych danych. Trwałe dane są odczytywane przez insmod jedynie, gdy ta opcja zostanie podana. Domyślnie, insmod nie przetwarza żadnych trwałych danych. Skrócona forma: -e "" (pusty łańcuch) jest interpretowana przez insmod jako wartość persistdir (zobacz modules.conf(5)), po której występuje nazwa pliku modułu, względem ścieżki, w której moduł został znaleziony, z pominięciem końcowych ´.gz', ´.o' i ´.mod'. Jeśli zostanie podane persistdir= (tzn. persistdir jest pustym polem) wówczas ta forma skrócona zostanie milcząco zignorowana.

PARAMETRY MODUŁÓW

Niektóre z modułów akceptują podawanie im parametrów w czasie ładowania w celu dostosowania ich do określonych warunków pracy. Tymi parametrami najczęściej są adresy portów I/O i numery przerwań, które zmieniają się w zależności od sprzętu, a których detekcja nie jest możliwa.

W modułach zbudowanych dla jąder seri 2.0, jakikolwiek symbol będący wskaźnikiem do typu całkowitego lub znakowego może być potraktowany jako parametr i zmodyfikowany. Poczynając od jąder 2.1, symbole stanowiące parametry są jawnie zaznaczone, aby tylko określone parametry mogły być modyfikowane. Co więcej, podawana jest informacja o typie parametru aby przy ładowaniu można było ją skontrolować.

W przypadku wartości całkowitych, wszystkie wartości mogą zostać podane dziesiętnie, ósemkowo lub szenastkowo np.: 17, 021 lub 0x11. Tablice wartości podajemy jako ciąg elementów rozdzielonych przecinkami; elementy mogą być pominięte przez ominięcie ich wartości.

W modułach serii 2.0, wartości które nie zaczynają się od cyfry traktowane są jako łańcuchy. Poczynając od jąder 2.1, informacja o typie parametru wskazuje czy wartość ma być interpretowana jako łańcuch. Jeśli wartość zaczyna się od cudzysłowu ("), łańcuch jest interpretowany jak w C, sekwencje ucieczkowe i in. Należy zauważyć, że przy podawaniu parametrów z linii poleceń powłoki, może istnieć potrzeba zabezpieczenia samych cudzysłowów przed interpretacją przez powłokę.

MODUŁY I SYMBOLE NA LICENCJI GPL

Począwszy od jądra 2.4.10, moduły powinny zawierać łańcuch będący nazwą licencji, zdefiniowany za pomocą MODULE_LICENSE(). Niektóre łańcuchy są rozpoznawane jako zgodne z GPL, wszelkie inne łańcuchy licencji, lub brak licencji oznaczają, że moduł jest traktowany jako zastrzeżony. Zajrzyj do include/linux/module.h po listę zgodnych z GPL łańcuchów licencji.

Jeśli jądro obsługuje znacznik /proc/sys/kernel/tainted to insmod podczas ładowania modułu nie na licencji GPL, wykona operację OR dla znacznika tainted (skażony) i '1'. Jeśli kernel obsługuje skażenia, to podczas ładowania modułu bez licencji wypisane zostanie ostrzeżenie; ostrzeżenie będzie wypisywane zawsze, nawet przy starszych, nieobsługujących skażeń, jądrach, dla modułów posiadających MODULE_LICENSE() niezgodne z GPL. Minimalizuje to liczbę ostrzeżeń podczas używania nowych modutils ze starymi jądrami.

Tryb insmod -f (wymuszenie) przy jądrach obsługujących skażenia, będzie zawsze powodować wykonanie OR dla znacznika tainted i '2', zawsze też będzie wypisywane ostrzeżenie.

Niektórzy autorzy kodu jądra wymagają, aby symbole udostępniane przez ich kod mogły być wykorzystywane wyłącznie przez moduły na licencji zgodnej z GPL. Symbole te są udostępniane przez EXPORT_SYMBOL_GPL zamiast zwykłego EXPORT_SYMBOL. Symbole "tylko dla GPL" udostępniane przez kernel i inne moduły są widziane wyłącznie przez moduły na licencji zgodnej z GPL. Symbole te pojawią się w /proc/ksyms z przedrostkiem 'GPLONLY_'. Podczas ładowania modułu na licencji GPL insmod ignoruje przedrostek GPLONLY_ dla symboli, więc ładowany moduł odwołuje się po prostu do zwykłej nazwy symbolu, bez przedrostka. Symbole "tylko dla GPL" stały się niedostępne dla modułów o licencji niezgodnej z GPL, włączając w to moduły bez jakiejkolwiek licencji.

POMOC KSYMOOPS

Aby pomóc w analizie Oopsów (błędów) jądra podczas używania modułów, insmod domyślnie dodaje kilka symboli do ksyms, zobacz opcja -Y. Symbole te zaczynają się od __insmod_nazwamodułu_. nazwamodułu jest niezbędna, aby symbol był unikalny, dozwolone jest ładowanie tego samego obiektu więcej niż raz podając różne nazwy modułu. Obecnie zdefiniowane są symbole

__insmod_nazwamodułu_Oplikobiektu_Mczas_Vwersja

plikobiektu jest nazwą pliku z którego moduł został załadowany. Zapewnia to, że ksymoops dopasuje kod do właściwego obiektu. czas jest podanym szesnastkowo znacznikiem czasu ostatniej modyfikacji dla tego pliku, zero gdy stat zakończy się niepomyślnie. wersja jest wersją jądra, dla której moduł skompilowano, -1, gdy numer wersji jest niedostpny. Symbol _O posiada taki sam adres początkowy, jak nagłowek modułu.

__insmod_nazwamodułu_Snazwasekcji_Ldługość

Symbol ten pojawia się na początku wybranych sekcji ELF, obecnie rozmiarze. nazwasekcji jest nazwą sekcji ELF, długość jest jej podanym dziesiętnie rozmiarem. Symbole te pomagają programowi ksymoops odwzorować adresy w sekcjach, w których nie są dostępne żadne symbole.

__insmod_nazwamodułu_Pnazwa_przechowalni

Tworzone przez insmod jedynie gdy moduł posiada jeden lub więcej parametrów oznaczonych jako trwałe dane i jest dostępny plik przechowujący te trwałe dane (patrz -e powyżej).

Inny problem przy analizie Oops jądra polega na tym, że zawartość /proc/ksyms i /proc/modules cmoże się zmienić pomiędzy Oopsami i podczas przetwarzania pliku logu. Aby pomóc pokonać ten problem, insmod i rmmod będą automatycznie kopiować /proc/ksyms i /proc/modules do /var/log/ksymoops o ile katalog /var/log/ksymoops istnieje. Będzie stosowany przedrostek `date +%Y%m%d%H%M%S`. Administrator systemu może podać ksymoops, który zrzut plików ma być użyty podczas analizy Oopsa. Nie ma przełącznika wyłączającego to automatyczne kopiowanie, więc jeśli nie powinno ono występować, nie należy tworzyć katalogu /var/log/ksymoops. Jeśli ten katalog istnieje, powinien on być własnością roota, mieć prawa dostępu 644 lub 600 i należy uruchamiać codziennie, lub w podobnych odstępach czasu, poniższy skrypt. Jest on zainstalowany jako insmod_ksymoops_clean.


#!/bin/sh
# Usuwa zachowane zawartości ksyms i modules nie używane przez 2 dni
if [ -d /var/log/ksymoops ]
then set -e # Upewnia się, że zawsze zostanie co najmniej jedna wersja d=`date +%Y%m%d%H%M%S` cp -a /proc/ksyms /var/log/ksymoops/${d}.ksyms cp -a /proc/modules /var/log/ksymoops/${d}.modules find /var/log/ksymoops -type f -atime +2 -exec rm {} \;
fi

ZOBACZ TAKŻE

rmmod(8), modprobe(8), depmod(8), lsmod(8), ksyms(8), modules(2), genksyms(8), kerneld(8), ksymoops(kernel).

HISTORIA

Wsparcie dla modułów zostało zapoczątkowane przez Anonima
Pierwsza wersja Linuksowa przygotowana przez Basa Laarhovena <bas@vimec.nl>
Wersja 0.99.14 przygotowana przez Jona Tombsa <jon@gtex02.us.es>
Rozbudowana przez Bjorna Ekwalla <bj0rn@blox.se>
Pierwotna pomoc dla ELF od Erica Youngdale'a <eric@aib.com>
Aktualizowna do 2.1.17 przez Richarda Hendersona <rth@tamu.edu>
Rozszerzona przez Bjorna Ekwalla <bj0rn@blox.se> dla modutils-2.2.* w marcu 1999
Pomocy przy ksymoops udzielił Keith Owens <kaos@ocs.com.au> w maju 1999
Zarządza: Keith Owens <kaos@ocs.com.au>.

2 paźdxiernika 2001 Linux