Der Linux / Unix-Befehl insmod Installiert ein ladbares Modul im laufenden Kernel.insmod versucht, ein Modul mit dem laufenden Kernel zu verknüpfen, indem alle Symbole aus der exportierten Symboltabelle des Kernels aufgelöst werden.
Wenn der Moduldateiname ohne Verzeichnisse oder Erweiterung angegeben wird,insmod sucht in einigen gängigen Standardverzeichnissen nach dem Modul. Die UmgebungsvariableMODPATH kann verwendet werden, um diesen Standard zu überschreiben. Wenn eine Modulkonfigurationsdatei wie z/etc/modules.conf existiert, werden die in definierten Pfade überschriebenMODPATH.
Die UmgebungsvariableMODULKONF kann auch verwendet werden, um eine andere Konfigurationsdatei als die Standardeinstellung auszuwählen/etc/modules.conf (oder/etc/conf.modules (veraltet)). Diese Umgebungsvariable überschreibt alle obigen Definitionen.
Bei UmgebungsvariablenUNAME_MACHINE gesetzt ist, verwenden modutils seinen Wert anstelle des Maschinenfeldes aus dem uname () -Syscall. Dies ist vor allem beim Kompilieren von 64-Bit-Modulen im 32-Bit-User-Space oder umgekehrt hilfreichUNAME_MACHINE auf die Art der Module. Gegenwärtige Modutils unterstützen nicht den vollständigen Cross Build-Modus für Module. Es kann nur zwischen 32- und 64-Bit-Versionen der Hostarchitektur gewählt werden.
Optionen
-e persist_name , --fortdauern= persist_name
Gibt an, wo beim Laden persistente Daten für das Modul gelesen und in diese geschrieben werden, wenn diese Instantiierung des Moduls entladen wird. Diese Option wird automatisch ignoriert, wenn das Modul keine persistenten Daten enthält. Persistente Daten werden nur von geleseninsmod Ist diese Option standardmäßig vorhandeninsmod verarbeitet keine persistenten Daten.
Als Kurzform,-e "" (eine leere Zeichenfolge) wird von interpretiertinsmod als Wert vonpersistdir wie in definiertmodules.conf, gefolgt vom Dateinamen des Moduls relativ zum Suchpfad des Moduls, in dem es gefunden wurde, abzüglich aller nachfolgenden ".gz", ".o" oder ".mod". Obmodules.conf spezifiziert "persistdir ="(d.h.persistdir ist ein leeres Feld), dann wird diese Kurzschreibweise still ignoriert. (Sehenmodules.conf (5).)
-f, --Macht
Versuchen Sie, das Modul zu laden, auch wenn die Version des laufenden Kernels und die Version des Kernels, für die das Modul kompiliert wurde, nicht übereinstimmen. Dies überschreibt nur die Kernel-Versionsprüfung, sie hat keine Auswirkung auf die Überprüfung des Symbolnamens. Wenn die Symbolnamen im Modul nicht mit dem Kernel übereinstimmen, gibt es keine Möglichkeit zu erzwingeninsmod um das Modul zu laden.
-h, --Hilfe
Zeigen Sie eine Zusammenfassung der Optionen an und verlassen Sie sie sofort.
-k, --automatische Reinigung
Setzen Sie das Auto-Clean-Flag auf dem Modul. Dieses Flag wird von verwendetKernel(8) Entfernen von Modulen, die in einem bestimmten Zeitraum nicht verwendet wurden - in der Regel eine Minute.
-L, --sperren
BenutzenHerde(2) um gleichzeitige Belastungen desselben Moduls zu verhindern.
-m, --Karte
Gibt eine load map auf stdout aus, um das Debugging des Moduls im Falle einer Kernel-Panik zu erleichtern.
-n, --keine Belastung
Dummy Run, mach alles, außer das Modul in den Kernel zu laden. Wenn von einem angefragt-m oder-ODer Lauf erzeugt eine Map- oder Blob-Datei. Da das Modul nicht geladen ist, ist die tatsächliche Kernel-Ladeadresse unbekannt, sodass die Map- und Blob-Datei auf einer beliebigen Ladeadresse von 0x12340000 basieren.
-O Modulname , --Name= Modulname
Benennen Sie das Modul explizit, anstatt den Namen vom Basisnamen der Quellobjektdatei abzuleiten.
-O blob_name , --Klecks= blob_name
Speichern Sie das binäre Objekt in blob_name . Das Ergebnis ist ein binärer Blob (keine ELF-Header), der genau anzeigt, was nach Abschnittsmanipulation und -verlagerung in den Kernel geladen wird. Möglichkeit-m wird empfohlen, eine Karte des Objekts zu erhalten.
-p, --Sonde
Prüfen Sie, ob das Modul erfolgreich geladen werden konnte. Dies umfasst das Suchen der Objektdatei im Modulpfad, das Überprüfen von Versionsnummern und das Auflösen von Symbolen. Es prüft weder die Umzüge noch erzeugt es eine Map- oder Blob-Datei.
-P Präfix , --Präfix= Präfix
Diese Option kann mit versionierten Modulen für einen SMP- oder Bigmem-Kernel verwendet werden, da diesen Symbolen ein zusätzliches Präfix hinzugefügt wird. Wenn der Kernel dann mit Symbolversionen gebaut wurdeinsmod extrahiert das Präfix automatisch aus der Definition von "get_module_symbol" oder "inter_module_get", von denen eines in jedem Kernel vorhanden sein muss, der Module unterstützt. Wenn der Kernel keine Symbolversionen hat, das Modul jedoch mit Symbolversionen erstellt wurde, muss der Benutzer dies angeben-P.
-q, --ruhig
Drucken Sie keine Liste nicht aufgelöster Symbole. Beschweren Sie sich nicht über Versionskonflikte. Das Problem wird nur im Exit-Status von angezeigtinsmod.
-r, --Wurzel
Einige Benutzer kompilieren Module unter einer Nicht-Root-Benutzer-ID und installieren die Module dann als Root. Dieser Prozess kann dazu führen, dass die Module der Nicht-Root-Benutzer-ID gehören, auch wenn das Modulverzeichnis im Besitz von Root ist. Wenn die Nicht-Root-Benutzer-ID gefährdet ist, kann ein Eindringling vorhandene Module, die sich im Besitz dieser Benutzer-ID befinden, überschreiben.
Standardmäßig lehnen modutils Versuche ab, ein Modul zu verwenden, das nicht root gehört. Angeben -r schaltet die Prüfung um und erlaubt root, Module zu laden, die nicht im Besitz von root sind.
Hinweis: Der Standardwert für die Root-Prüfung kann geändert werden, wenn Modutils konfiguriert ist.Die Verwendung von -r zum Deaktivieren der Root-Prüfung oder das Festlegen der Standardeinstellung "Keine Root-Prüfung" zur Konfigurationszeit ist eine große Sicherheitslücke und wird nicht empfohlen.
-s, --syslog
Alles ausgebenSyslog(3) anstelle des Terminals.
-S, --kallsyms
Erzwinge das Laden des geladenen ModulsKallsyms Daten, auch wenn der Kernel dies nicht unterstützt. Diese Option gilt für kleine Systeme, bei denen der Kernel ohne geladen wirdKallsyms Daten, aber ausgewählte Module benötigenKallsyms zum debuggen. Diese Option ist der Standard unter Red Hat Linux.
-v, --verbose
Sei wortreich.
-V, --Ausführung
Zeigt die Version von aninsmod.
-X, --Export; -x, --noexport
Exportieren Sie nicht alle externen Symbole des Moduls. Standardmäßig werden die Symbole exportiert. Diese Option ist nur wirksam, wenn das Modul seine eigene gesteuerte Symboltabelle nicht explizit exportiert und daher veraltet ist.
-Y, --ksymoops; -y, --noksymoops
Tun und nicht hinzufügenksymoops Symbole zu ksyms. Diese Symbole werden von verwendetksymoops Besseres Debuggen, wenn sich in diesem Modul ein Oops befindet. Die Standardeinstellung ist fürksymoopszu definierende Symbole. Diese Option ist unabhängig von der-X/-x Optionen.
ksymoops Symbole addieren ungefähr 260 Bytes pro geladenem Modul. Wenn Sie nicht genügend Kernel-Speicherplatz haben und versuchen, Ksyms auf die minimale Größe zu reduzieren, nehmen Sie die Standardeinstellung und erhalten Sie ein genaueres Oops-Debugging.ksymoops Symbole werden benötigt, um persistente Moduldaten zu speichern.
-N, --nur numerisch
Überprüfen Sie nur den numerischen Teil der Modulversion mit der Kernelversion, d. H. Ignorieren Sie EXTRAVERSION, wenn Sie entscheiden, ob ein Modul zu einem Kernel gehört. Dieses Flag wird automatisch für Kernel 2.5 und höher gesetzt, für frühere Kernel ist es optional.
Modulparameter
Einige Module akzeptieren Ladezeitparameter, um ihren Betrieb anzupassen. Diese Parameter sind häufig E / A-Port- und IRQ-Nummern, die von Maschine zu Maschine variieren und nicht von der Hardware bestimmt werden können.
In Modulen, die für Kernels der 2.0-Serie erstellt wurden, kann jedes Integer- oder Zeichenzeiger-Symbol als Parameter behandelt und geändert werden. Beginnend bei den Kerneln der 2.1-Serie werden Symbole explizit als Parameter markiert, sodass nur bestimmte Werte geändert werden können. Darüber hinaus werden Typinformationen zur Überprüfung der zur Ladezeit bereitgestellten Werte bereitgestellt.
Bei Ganzzahlen können alle Werte dezimal, oktal oder hexadezimal aa C: 17, 021 oder 0x11 sein. Array-Elemente werden durch Kommas getrennt angegeben. Elemente können übersprungen werden, indem der Wert weggelassen wird.
In Modulen der Serie 2.0 werden Werte, die nicht mit einer Zahl beginnen, als Zeichenfolgen betrachtet. Ab 2.1 geben die Typinformationen des Parameters an, ob der Wert als Zeichenfolge interpretiert werden soll. Wenn der Wert mit Anführungszeichen beginnt (') wird die Zeichenfolge wie in C, Escape-Sequenzen und allen interpretiert. Beachten Sie, dass die Anführungszeichen an der Shell-Eingabeaufforderung möglicherweise vor der Shell-Interpretation geschützt werden müssen.
GPL-lizenzierte Module und Symbole
Ab dem Kernel 2.4.10 sollten Module eine Lizenzzeichenfolge haben, die mit definiert wirdMODULE_LICENSE (). Mehrere Zeichenketten werden als GPL-kompatibel erkannt. Jede andere Lizenzzeichenfolge oder überhaupt keine Lizenz bedeutet, dass das Modul als proprietär behandelt wird.
Wenn der Kernel das unterstützt/ proc / sys / kernel / befleckt Flagge danninsmod ODER wird die verfälschte Flagge mit '1' ODER laden, wenn ein Modul ohne GPL-Lizenz geladen wird. Eine Warnung wird ausgegeben, wenn der Kernel das Anschmutzen unterstützt und ein Modul ohne Lizenz geladen wird. Eine Warnung wird immer für Module ausgegeben, die über einMODULE_LICENSE () das ist nicht GPL-kompatibel, auch bei älteren Kerneln, die keine Verfälschung unterstützen. Dadurch werden Warnungen minimiert, wenn in älteren Kerneln neue Modutils verwendet werden.
insmod -f (force) -Modus ODER die befleckte Flagge mit '2' für Kernel, die eine Verschmutzung unterstützen. Es wird immer eine Warnung ausgegeben.
Einige Kernel-Entwickler verlangen, dass Symbole, die mit ihrem Code exportiert werden, nur von Modulen mit einer GPL-kompatiblen Lizenz verwendet werden dürfen. Diese Symbole werden von exportiertEXPORT_SYMBOL_GPL anstelle des normalenEXPORT_SYMBOL. Nur vom GPL exportierte GPL-Symbole, die vom Kernel und von anderen Modulen exportiert werden, sind nur für Module mit einer GPL-kompatiblen Lizenz sichtbar. Diese Symbole werden in angezeigt/ proc / ksyms mit einem Präfix von 'GPLONLY_'. insmod ignoriert dasGPLONLY_ Symbolen wird beim Laden eines GPL-lizenzierten Moduls ein Präfix vorangestellt, sodass das Modul nur auf den normalen Symbolnamen verweist, ohne das Präfix. Nur GPL-Symbole werden Modulen ohne GPL-kompatible Lizenz nicht zur Verfügung gestellt. Dazu gehören Module ohne jegliche Lizenz.
Ksymoops-Hilfe
Um das Debuggen von Kernel-Oops bei der Verwendung von Modulen zu unterstützen,insmod Standardmäßig werden einige Symbole zu ksyms hinzugefügt, siehe-Y Möglichkeit. Diese Symbole beginnen mit__insmod_ Modulname_ . Das Modulname ist erforderlich, um die Symbole eindeutig zu machen. Es ist zulässig, dasselbe Objekt mehrmals unter verschiedenen Modulnamen zu laden. Derzeit definierte Symbole sind:
__insmod_ Modulname _ Oobjectfile _ Mmtime _ Vversion
Objektdatei ist der Name der Datei, aus der das Objekt geladen wurde. Dadurch wird sichergestellt, dass ksymoops den Code dem richtigen Objekt zuordnen kann. mtime ist der letzte geänderte Zeitstempel für diese Datei in Hex, null, wenn stat fehlgeschlagen ist. Ausführung ist die Kernelversion, für die das Modul kompiliert wurde, -1, wenn keine Version verfügbar ist. Das_O Das Symbol hat dieselbe Startadresse wie der Modulkopf.
__insmod_ Modulname _ Abschnittsname _ Länge
Dieses Symbol erscheint am Anfang ausgewählter ELF-Abschnitte, derzeit .text, .rodata, .data, .bss und .sbss. Es wird nur angezeigt, wenn der Abschnitt eine andere Größe als 0 hat. Abteilungsname ist der Name der ELF-Sektion, Länge ist die Länge des Abschnitts in Dezimalzahl. Diese Symbole helfen ksymoops, Adressen zu Abschnitten zuzuordnen, wenn keine Symbole verfügbar sind.
__insmod_ Modulname _Persistent_ Dateiname
Nur von erstelltinsmod wenn das Modul über einen oder mehrere Parameter verfügt, die als persistente Daten markiert sind, und einen Dateinamen zum Speichern persistenter Daten (siehe-esteht oben) zur Verfügung.
Das andere Problem beim Debuggen von Kernel-Oops in Modulen ist der Inhalt von / proc / ksyms und / proc / modules kann zwischen den Oops und bei der Verarbeitung der Protokolldatei wechseln. Um dieses Problem zu beheben, ist das Verzeichnis / var / log / ksymoops vorhandeninsmod undrmmod kopiert automatisch / proc / ksyms und / proc / modules nach / var / log / ksymoops mit dem Präfix "Datum +% Y% m% d% H% M% S". Der Systemadministrator kann ksymoops mitteilen, welche Snapshot-Dateien beim Debuggen eines Oops verwendet werden sollen. Es gibt keine Option zum Deaktivieren dieser automatischen Kopie. Wenn Sie nicht möchten, dass dies geschieht, erstellen Sie nicht / var / log / ksymoops. Wenn dieses Verzeichnis vorhanden ist, sollte es im Besitz von root sein und im Modus 644 oder 600 sein, und Sie sollten dieses Skript jeden Tag ausführen. Das folgende Skript wird als insmod_ksymoops_clean installiert.
#! / bin / sh # Löschen Sie gespeicherte Ksyms und Module, auf die seit 2 Tagen nicht zugegriffen wird wenn -d / var / log / ksymoops dann Set -e # Stellen Sie sicher, dass immer mindestens eine Version vorhanden ist d = `Datum +% 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 NAME insmod - installierbares Kernelmodul installieren ZUSAMMENFASSUNG insmod -fhkLmnpqrsSvVxXyYN -e persist_name -o Modulname -O blob_name -P Präfix Modul Symbol= Wert … Grundlegende Informationen zu wissen




