
Gibt es Unterschiede zwischen insmod und modprobe?
Antwort1
modprobe
liest die Module aus /lib/modules/$(uname -r)/modules.dep.bin
(oder ohne .bin
Suffix, wenn die andere Datei nicht verfügbar ist). Aus derselben Datei werden Abhängigkeiten geladen.
modprobe
akzeptiert den Namen einer .ko
Datei in /lib/modules/$(uname -r)
(z. B. nvidia-current
für die Datei dkms/nvidia-current.ko
) und Aliase ( modules.alias.bin
). Builtins ( modules.alias.bin
) werden ebenfalls erkannt, aber da diese Module standardmäßig geladen werden, ist es nicht sinnvoll, diese Art von Modulen zu modprobieren.
insmod
akzeptiert dagegen Pfade zu Dateien. Das Modul muss nicht in liegen /lib/modules/$(uname -r)
, aber Abhängigkeiten werden nicht automatisch geladen. Dies ist das untergeordnete Programm, das modprobe
zum Laden von Modulen verwendet wird.
Andere mit Modulen verbundene Programme sind rmmod
und modinfo
.
rmmod
entfernt einen Kernelnamen basierend auf dem Namen aus /proc/modules
. Dieser Name muss nicht notwendigerweise derselbe sein wie der an übergebene modprobe
(für die nvidia-current
Datei ist dies nvidia
beispielsweise der Fall).
modinfo
akzeptiert einen Dateinamen oder den Dateinamen ohne .ko
Suffix in /lib/modules/$(uname -r)
.
Antwort2
Pro man insmod
:
Die meisten Benutzer werden stattdessen modprobe verwenden wollen, das intelligenter ist und Modulabhängigkeiten verarbeiten kann.
Antwort3
modprobe
ist ein intelligenter Befehl, der beim Laden eines Moduls nach Abhängigkeiten sucht. Angenommen, ich habe ein Modul geladen, das Symbole hat, die in einem anderen Modul definiert sind (dieser Modulpfad ist im Hauptmodul angegeben). Also modprobe
werden das Hauptmodul und das abhängige Modul geladen.
Wenn jedoch insmod
verwendet wird, wird die Abhängigkeit nicht geladen und es treten Kompilierungsfehler wie auf Unresolved symbols
. In diesem Fall müssen wir manuell nach abhängigen Modulen suchen und diese laden, um die Fehler zu beheben.
Antwort4
Der Befehl modprobe bietet mehr Funktionen als die grundlegenderen Dienstprogramme insmod und rmmod. modprobe fügt dem Linux-Kernel auf intelligente Weise ein Modul hinzu oder entfernt es daraus. Beachten Sie, dass es aus praktischen Gründen keinen Unterschied zwischen _ und - in Modulnamen gibt (es wird eine automatische Unterstrichkonvertierung durchgeführt). modprobe sucht im Modulverzeichnis /lib/modules/ uname -r
nach allen Modulen und anderen Dateien, mit Ausnahme der optionalen Konfigurationsdateien im Verzeichnis /etc/modprobe.d (einige Distributionen verwenden stattdessen die Datei /etc/modprobe.conf).