Komenda Linux / Unix insmod instaluje ładowalny moduł w uruchomionym jądrze.insmod próbuje połączyć moduł z uruchomionym jądrem, usuwając wszystkie symbole z eksportowanej tablicy symboli jądra.
Jeśli nazwa pliku modułu jest podana bez katalogów lub rozszerzenia,insmod wyszuka moduł w niektórych wspólnych domyślnych katalogach. Zmienna środowiskowaMODPATH może być użyte do zastąpienia tej wartości domyślnej. Jeśli plik konfiguracyjny modułu, taki jak/etc/modules.conf istnieje, zastąpi ścieżki zdefiniowane wMODPATH.
Zmienna środowiskowaMODULECONF można również użyć do wybrania innego pliku konfiguracyjnego niż domyślny/etc/modules.conf (lub/etc/conf.modules (przestarzałe)). Ta zmienna środowiskowa zastąpi wszystkie powyższe definicje.
Gdy zmienna środowiskowaUNAME_MACHINE jest ustawione, modutils użyje swojej wartości zamiast pola maszyny z funkcji uname () syscall. Jest to głównie przydatne podczas kompilowania 64-bitowych modułów w 32-bitowej przestrzeni użytkownika lub odwrotnie, ustawionychUNAME_MACHINE do rodzaju modułów. Obecnie modutils nie obsługują pełnego trybu budowania krzyżowego dla modułów, jest on ograniczony do wyboru między 32 a 64-bitowymi wersjami architektury hosta.
Opcje
-mi nazwa_ustawienia , --trwać= nazwa_ustawienia
Określa miejsce, w którym odczytywane są dane trwałe dla modułu podczas ładowania i zapisywane do momentu zwolnienia tej instancji modułu. Ta opcja jest cicho ignorowana, jeśli moduł nie ma trwałych danych. Trwałe dane są odczytywane tylko przezinsmod jeśli ta opcja jest obecna, domyślnieinsmod nie przetwarza trwałych danych.
W formie skróconej,-e "" (pusty ciąg) jest interpretowany przezinsmod jako wartośćpersistdir jak określono wmodules.conf, a następnie nazwa pliku modułu w odniesieniu do ścieżki wyszukiwania modułu, w której została znaleziona, minus wszelkie końcowe znaki ".gz", ".o" lub ".mod". Jeślimodules.conf określa "persistdir ="(tj.persistdir jest pustym polem), wtedy ta skrócona forma jest milcząco ignorowana. (Widziećmodules.conf (5).)
-fa, --siła
Spróbuj załadować moduł, nawet jeśli wersja uruchomionego jądra i wersja jądra, dla którego moduł został skompilowany, nie pasują do siebie. To tylko zastępuje kontrolę wersji jądra, nie ma wpływu na sprawdzanie nazw symboli. Jeśli nazwy symboli w module nie pasują do jądra, nie ma sposobu na wymuszenieinsmod załadować moduł.
-h, --Wsparcie
Wyświetl podsumowanie opcji i natychmiast zakończ.
-k, --Automatyczne oczyszczanie
Ustaw flagę automatycznego czyszczenia na module. Ta flaga będzie używana przezkerneld(8) aby usunąć moduły, które nie były używane przez jakiś czas - zwykle jedną minutę.
-L, --zamek
Posługiwać siętrzoda(2), aby zapobiec jednoczesnym ładowaniom tego samego modułu.
-m, --mapa
Wyprowadź mapę obciążenia na standardowe wyjście, ułatwiając debugowanie modułu w przypadku paniki jądra.
-n, --bez obciążenia
Dummy run, rób wszystko poza załadowaniem modułu do jądra. Na prośbę użytkownika-m lub-O, run wygeneruje mapę lub plik blob. Ponieważ moduł nie jest załadowany, prawdziwy adres ładowania jądra jest nieznany, więc mapa i plik blob są oparte na arbitralnym adresie obciążenia 0x12340000.
-o Nazwa modułu , --imię= Nazwa modułu
Jawnie nazwę modułu, a nie wyprowadzanie nazwy z podstawowej nazwy pliku źródłowego.
-O blob_name , --kropelka= blob_name
Zapisz obiekt binarny w blob_name . Wynikiem jest binarny blob (bez nagłówków ELF) pokazujący dokładnie to, co jest ładowane do jądra po manipulowaniu sekcją i relokacji. Opcja-m jest zalecane, aby uzyskać mapę obiektu.
-p, --sonda
Zbadaj moduł, aby sprawdzić, czy można go pomyślnie załadować. Obejmuje to lokalizowanie pliku obiektu w ścieżce modułu, sprawdzanie numerów wersji i rozwiązywanie symboli. Nie sprawdza delokalizacji ani nie tworzy mapy lub pliku blob.
-P prefiks , --prefiks= prefiks
Ta opcja może być używana z wersjonowanymi modułami dla kernela SMP lub bigmem, ponieważ takie moduły mają dodatkowy prefiks dodany w ich nazwach symboli. Jeśli jądro zostało zbudowane z wersjami symboli wtedyinsmod automatycznie wyodrębni prefiks z definicji "get_module_symbol" lub "inter_module_get", z których jeden musi istnieć w każdym jądrze obsługującym moduły. Jeśli jądro nie ma wersji symboli, ale moduł został zbudowany z wersjami symboli, wówczas użytkownik musi je dostarczyć-P.
-q, --cichy
Nie drukuj listy nierozwiązanych symboli. Nie narzekaj na niezgodność wersji. Problem zostanie odzwierciedlony tylko w statusie wyjściainsmod.
-r, --korzeń
Niektórzy użytkownicy kompilują moduły na podstawie identyfikatora użytkownika innego niż root, a następnie instalują moduły jako root. Ten proces może pozostawić moduły należące do użytkownika innego niż root, mimo że katalog modułów jest własnością root. Jeśli użytkownik inny niż root zostanie złamany, intruz może nadpisać istniejące moduły należące do tego identyfikatora użytkownika i wykorzystać tę ekspozycję do ładowania początkowego do uzyskania uprawnień roota.
Domyślnie modutils odrzuca próby użycia modułu, który nie jest własnością root. Określanie -r przełączy kontrolę i pozwoli rootowi ładować moduły, które nie są własnością root'a.
Uwaga: Domyślna wartość sprawdzania root może zostać zmieniona, gdy skonfigurowany jest modutils.Użycie -r do wyłączenia sprawdzania root'a lub ustawienie domyślnego "no root check" w czasie konfiguracji jest poważną ekspozycją na bezpieczeństwo i nie jest zalecane.
-s, --syslog
Wypisz wszystkosyslog(3) zamiast terminala.
-S, --kallsyms
Wymuś załadowany modułkallsyms danych, nawet jeśli jądro ich nie obsługuje. Ta opcja jest przeznaczona dla małych systemów, w których jądro jest załadowane bezkallsyms dane, ale potrzebne są wybrane modułykallsyms do debugowania. Ta opcja jest domyślna w systemie Red Hat Linux.
-v, --gadatliwy
Bądź gburowaty.
-V, --wersja
Wyświetl wersjęinsmod.
-X, --eksport; -x, --noexport
Wykonaj i nie eksportuj wszystkich zewnętrznych symboli modułu, odpowiednio. Wartością domyślną jest eksportowanie symboli. Ta opcja jest skuteczna tylko wtedy, gdy moduł nie eksportuje bezpośrednio własnej kontrolowanej tabeli symboli i dlatego jest przestarzały.
-Y, --ksymoops; -y, --noksymoops
Zrób i nie dodawajksymoops symbole do ksymów. Te symbole są używane przezksymoops zapewnić lepsze debugowanie, jeśli w tym module jest Oops. Wartością domyślną jest dlaksymoopssymbole do zdefiniowania. Ta opcja jest niezależna od-X/-x opcje.
ksymoops symbole dodają około 260 bajtów na jeden załadowany moduł. Jeśli nie masz zbyt mało miejsca na jądro i starasz się zredukować ksyms do jego minimalnego rozmiaru, wybierz ustawienie domyślne i uzyskaj dokładniejsze debugowanie Oops.ksymoops symbole są wymagane, aby zachować trwałe dane modułu.
-N, - tylko numeryczne
Sprawdź tylko numeryczną część wersji modułu względem wersji jądra, to znaczy zignoruj EXTRAVERSION, decydując, czy moduł należy do jądra. Ta flaga jest automatycznie ustawiana dla jądra 2.5 i jest opcjonalna dla wcześniejszych jąder.
Parametry modułu
Niektóre moduły akceptują parametry czasu ładowania, aby dostosować ich działanie. Te parametry to często port I / O i numery IRQ, które różnią się w zależności od komputera i nie można ich określić na podstawie sprzętu.
W modułach zbudowanych dla jąderek serii 2.0 każdy symbol liczby całkowitej lub znaku może być traktowany jako parametr i zmodyfikowany. Począwszy od jądra serii 2.1 symbole są jawnie oznaczane jako parametry, dzięki czemu można zmieniać tylko określone wartości. Ponadto dostarczane są informacje o typie do sprawdzania wartości dostarczonych w czasie ładowania.
W przypadku liczb całkowitych, wszystkie wartości mogą być dziesiętne, ósemkowe lub szesnastkowe a la C: 17, 021 lub 0x11. Elementy tablicy są określone sekwencją oddzieloną przecinkami. Elementy można ominąć, pomijając wartość.
W modułach serii 2.0 wartości, które nie rozpoczynają się liczbą, są traktowane jako ciągi. Począwszy od wersji 2.1, informacja o typie parametru wskazuje, czy interpretować wartość jako łańcuch znaków. Jeśli wartość zaczyna się od podwójnych cudzysłowów ('), ciąg jest interpretowany jak w C, sekwencje specjalne i wszystkie. Zwróć uwagę, że z podpowiedzi powłoki, same cytaty mogą wymagać ochrony przed interpretacją powłoki.
Licencjonowane moduły i symbole GPL
Począwszy od jądra 2.4.10, moduły powinny mieć łańcuch licencji, zdefiniowany przy użyciuMODULE_LICENSE (). Kilka łańcuchów jest uznanych za kompatybilne z GPL; jakikolwiek inny ciąg licencji lub żadna licencja w ogóle nie oznacza, że moduł jest traktowany jako zastrzeżony.
Jeśli jądro obsługuje/ proc / sys / kernel / tainted flaga następnieinsmod OR lub skażoną flagę z "1" podczas ładowania modułu bez licencji GPL. Ostrzeżenie jest generowane, gdy jądro obsługuje skażenie i moduł jest ładowany bez licencji. Ostrzeżenie jest zawsze wydawane dla modułów, które mająMODULE_LICENSE () to nie jest zgodne z GPL, nawet w starszych jądrach, które nie obsługują skażenia. Minimalizuje to ostrzeżenia, gdy nowy modutils jest używany na starszych jądrach.
insmod -f (force) mode OR wyświetli flagę z "2" na jądrze obsługującym skażenie. Zawsze wyświetla ostrzeżenie.
Niektórzy twórcy jądra wymagają, aby symbole wyeksportowane przez ich kod mogły być używane tylko przez moduły z licencją zgodną z GPL. Te symbole są eksportowane przezEXPORT_SYMBOL_GPL zamiast normalnegoEXPORT_SYMBOL. Symbole tylko GPL eksportowane przez jądro i inne moduły są widoczne tylko dla modułów z licencją zgodną z GPL, symbole te pojawiają się w/ proc / ksyms z przedrostkiem "GPLONLY_'. insmod ignorujeGPLONLY_ prefix na symbolach podczas ładowania modułu licencjonowanego GPL, więc moduł po prostu odwołuje się do normalnej nazwy symbolu, bez prefiksu. Symbole tylko GPL nie są udostępniane modułom bez licencji zgodnej z GPL, w tym moduły bez licencji.
Pomoc Ksymoops
Aby pomóc w debugowaniu jądra Ups podczas korzystania z modułów,insmod domyślnie dodaje kilka symboli do ksymów, zobacz-Y opcja. Te symbole zaczynają się od__insmod_ Nazwa modułu_ . The Nazwa modułu jest wymagane, aby symbole były unikalne. Prawidłowe jest ładowanie tego samego obiektu więcej niż raz pod różnymi nazwami modułów. Obecnie zdefiniowane symbole to:
__insmod_ Nazwa modułu _ Oobjectfile _ Mmtime _ Vversion
plik obiektowy to nazwa pliku, z którego obiekt został załadowany. Dzięki temu ksymoops może dopasować kod do poprawnego obiektu. mtime jest ostatnim zmodyfikowanym znacznikiem czasowym tego pliku w hexie, zero, jeśli stat nie powiodło się. wersja jest wersją jądra, do której moduł został skompilowany, -1 jeśli żadna wersja nie jest dostępna. The_O symbol ma ten sam adres początkowy, co nagłówek modułu.
__insmod_ Nazwa modułu _ Ssectionname _ Length
Ten symbol pojawia się na początku wybranych sekcji ELF, obecnie .text, .rodata, .data, .bss i .sbss. Pojawia się tylko wtedy, gdy sekcja ma niezerowy rozmiar. nazwa sekcji to nazwa sekcji ELF, długość to długość sekcji w systemie dziesiętnym. Symbole te pomagają ksymoops zamapować adresy na sekcje, gdy nie są dostępne żadne symbole.
__insmod_ Nazwa modułu _Ppersistent_ Nazwa pliku
Tylko stworzony przezinsmod jeśli moduł ma jeden lub więcej parametrów, które są oznaczone jako trwałe dane, a nazwa pliku pozwala zachować trwałe dane (patrz-mi, powyżej) jest dostępny.
Innym problemem z debugowaniem jądra Oops w modułach jest zawartość / proc / ksyms i / proc / modules może zmieniać się pomiędzy Oops i kiedy przetwarzasz plik logu. Aby pomóc w rozwiązaniu tego problemu, jeśli istnieje katalog / var / log / ksymoopsinsmod irmmod automatycznie skopiuje / proc / ksyms i / proc / modules do / var / log / ksymoops z prefiksem `date +% Y% m% d% H% M% S`. Administrator systemu może poinformować ksymoops, które pliki migawek będą używane podczas debugowania Ups. Nie ma przełącznika, który wyłączałby tę automatyczną kopię. Jeśli nie chcesz, aby się pojawił, nie twórz / var / log / ksymoops. Jeśli ten katalog istnieje, powinien należeć do root i być w trybie 644 lub 600 i powinien uruchamiać ten skrypt codziennie. Poniższy skrypt jest instalowany jako insmod_ksymoops_clean.
#! / bin / sh # Usuń zapisane ksymy i moduły, do których nie można uzyskać dostępu w ciągu 2 dni jeśli -d / var / log / ksymoops następnie ustaw -e # Upewnij się, że zawsze jest co najmniej jedna wersja d = `data +% Y% m% d% H% M% S` cp -a / proc / ksyms /var/log/ksymoops/${d}.ksyms cp -a / proc / modules /var/log/ksymoops/${d}.modules znajdź / var / log / ksymoops -type f -atime +2 -exm rm {} ; fi IMIĘ insmod - zainstaluj ładowalny moduł jądra STRESZCZENIE insmod -fhkLmnpqrsSvVxXyYN -e nazwa_ustawienia -o Nazwa modułu -O blob_name -P prefiks moduł symbol= wartość … Podstawowe informacje do zaznajomienia




