Hinzufügen von Modul zum Kernel

Hinzufügen von Modul zum Kernel
Wir werden den Prozess oder die Schritte durchlaufen, die erforderlich sind, um ein Kernelmodul hinzuzufügen, während der Kernel ausgeführt wird. Wir werden auch die wenigen nützlichen Linux -Versorgungsunternehmen diskutieren. Diese Dienstprogramme können verwendet werden, um Informationen über das bereits im Linux -Kernel vorhandene Modul zu erhalten, ein neues Modul hinzuzufügen und die Informationen zum bereitgestellten Modul zu erhalten.

Beschreibung

Beginnen wir mit dem Kernel -Modul; Das Kernel -Modul ist die logische separate Funktionalität, die zu einem späteren Zeitpunkt im Laufkern hinzugefügt werden kann. Dies erweitert die Linux -Kernelfunktionen/-funktionen.

Diese Module sind Dateien mit der Erweiterung als “.ko “, was Kernel -Objekte bedeutet. Wenn wir mit einer Datei mit “stoßen“.KO “Als Erweiterung zeigt es deutlich, dass es sich um ein Kernelmodul handelt.

Einige Beispielnamen von Modulen sind: i2c-Modules.KO, Hallo-Welt.KO usw.

Der Prozess des Hinzufügens eines Kernelmoduls zum Kernel ist auch als Belastung eines Kernelmoduls bekannt. Das Kernelmodul kann nur geladen werden, wenn es mit dem Kernel -Quellbaum kompatibel ist. Dies bedeutet, dass das Kernelmodul nicht plattformunabhängig ist. Diese können nur mit demselben Quellbaum auf den Kernel geladen werden und die Konfiguration erstellen.

Hinzufügen/Laden des Kernelmoduls

Linux bietet ein Dienstprogramm, das als „Insmod“ bezeichnet wird. Dies ist das Dienstprogramm, mit dem das Kernelmodul am Laufkern geladen werden kann.

Um das Kernel -Modul zu laden, führen Sie einfach den Befehl als InsMOD aus, gefolgt vom Namen der Moduldatei.

Lassen Sie uns ein Beispiel für die Hallo-Welt nehmen.Ko, ein Modul, das klassisches Beispiel ist und nur die Hello World -Nachricht druckt. Um das Hello-World-Kernel-Modul zu laden, kann unten der Befehl verwendet werden, der verwendet werden kann:

Ein Beispiel -Schnappschuss ist unten angebracht. Die hervorgehobene Datei ist das Kernel -Modul:

$ sudo Insmod Hallo-Welt.ko

Beispiel Snapshot:

Mit der erfolgreichen Ausführung des obigen Befehls wird unser Modul dem Linux-Kernel hinzugefügt, und wir werden die Druckmeldung vom Hello-World Kernel-Modul im Printk-Puffer sehen. Verwenden Sie den Befehl DMESG, um die Nachricht von der Hello-World zu überprüfen. Wenn der Befehl zu einer Fehlermeldung führt, kann er als Modulabschluss als erfolgreich betrachtet werden. Während wir die Kernelfunktionen erweitern, müssen die Berechtigungen von Super -Benutzer erforderlich sind, um die „Insmod“ auszuführen. Beispielausgabe des DMESG -Befehls lautet wie unten:

Sushilrathore-2: ~/Hallo-Welt $ sudo Insmod Hallo-Welt.ko
Sushilrathore-2: ~/Hallo-Welt $ DMESG
[10500712.434672] Hallo Welt
cienauser@haxv-shrathore-2: ~/hello world $

Die Bestätigung des Moduls ist geladen

Um zu bestätigen, ob das Modul geladen ist und unter den anderen Modulen im Linux -Kernel vorhanden ist. Der Befehl „LSMOD“ kann verwendet werden, um alle Kernel -Module aufzulisten. Geben Sie den Befehl an der Linux -Shell aus, und wir werden die vollständige Liste der geladenen Module im Linux -Kernel sehen. Wenn ich das LSMOD in meinem System ausstelle, sehe ich die folgende Ausgabe an der Konsole:

Sushilrathore-2: ~/Hallo-Welt $ lsmod
Modulgröße verwendet von
Hello_world 16384 0
NF_ConnTRACK_IPV6 20480 0
NF_DEFRAG_IPV6 20480 1 NF_CONNTRACK_IPV6
ip6table_filter 16384 0
IP6_Tables 28672 1 IP6Table_filter
NF_ConnTrack_IPV4 16384 0
NF_DEFRAG_IPV4 16384 1 NF_CONNTRACK_IPV4
XT_Recent 20480 0
XT_ConnTrack 16384 0
NF_ConnTrack 135168 3 XT_ConnTrack, NF_ConnTrack_IPV6, NF_ConnTrack_IPV4
CPUID 16384 0
iptable_filter 16384 1
ipmi_devintf 20480 0
ipmi_msghandler 53248 1 ipmi_devintf

Wie wir in den oben genannten Protokollen sehen können, sind viele Module aufgeführt, und unser Modul Hello-World steht auch auf der Liste. Und ich habe es zum einfachen Erkennen hervorgehoben.

Wir haben also bestätigt, dass unser Modul erfolgreich im Kernel geladen ist.

Entfernen/Entladen des Kernelmoduls

Um das Kernel -Modul zu entfernen oder zu entlasten, können wir den Befehl "rmmod" Linux verwenden. Dies ist der Befehl, mit dem das geladene Kernelmodul entfernt und von LSMOD aufgeführt ist. Dieser Vorgang erfordert auch Superuser -Privilegien. Zurück zu unserem Beispiel für Hallo-Welt. Wir müssen den folgenden Befehl ausgeben:

Sushilrathore-2: ~/Hello-World $ sudo rmmod hello_world
Sushilrathore-2: ~/Hallo-Welt $

Nach der Befehlsausführung, wenn nichts auf der Konsole zu sehen ist, bin ich.e. Es gibt keine Fehlermeldung. Dies bedeutet, dass das Entladen/Entfernen des Kernelmoduls erfolgreich ist.

Bestätigung der Entfernung/Entladen des Moduls

Um zu bestätigen, ob das Modul erfolgreich abgeladen wird, können wir den Befehl LSMOD verwenden. Nach der Entfernung des Kernel -Moduls sollten wir das in der Liste der von „LSMOD“ bereitgestellten Module nicht sehen, dass das Modul vorhanden ist.

Im Folgenden finden Sie die Beispielausgabe von meinem System:

Sushilrathore-2: ~/Hallo-Welt $ lsmod
Modulgröße verwendet von
NF_ConnTRACK_IPV6 20480 0
NF_DEFRAG_IPV6 20480 1 NF_CONNTRACK_IPV6
ip6table_filter 16384 0
IP6_Tables 28672 1 IP6Table_filter
NF_ConnTrack_IPV4 16384 0
NF_DEFRAG_IPV4 16384 1 NF_CONNTRACK_IPV4
XT_Recent 20480 0
XT_ConnTrack 16384 0
NF_ConnTrack 135168 3 XT_ConnTrack, NF_ConnTrack_IPV6, NF_ConnTrack_IPV4
CPUID 16384 0
iptable_filter 16384 1
ipmi_devintf 20480 0
ipmi_msghandler 53248 1 ipmi_devintf
vmw_vsock_vmci_transport 32768 1
VSOCK 36864 2 VMW_VSOCK_VMCI_TRANSPORT
binfmt_misc 20480 1
Intel_RAPL_PERF 16384 0
Joydev 24576 0
input_leds 16384 0
VMW_Balloon 20480 0
serio_raw 16384 0
SHPCHP 36864 0
VMW_VMCI 69632 2 VMW_BALLOON, VMW_VSOCK_VMCI_TRALPORT

Wenn wir in der obigen Liste überprüfen, finden wir das Kernel-Modul von Hello-World nicht. Dies bestätigt doppelt, dass das Modul aus dem System entfernt wird.

Es wird noch ein sehr wichtiges Dienstprogramm angeboten, mit dem die Informationen der Kernel -Moduldatei abgerufen werden können. "Modinfo" ist der Befehl.

Durch Ausführen des "Modinfo" mit dem Hello-World-Kernel-Modul erhalten wir die folgende Ausgabe:

Sushilrathore-2: ~/Hello-World $ modinfo Hallo-Welt.ko
Dateiname:/home/sushilrathore/hello world/hello world.ko
Beschreibung: Hallo Welt!
Lizenz: GPL
srcversion: bbd5a60063b15c8d80048fd
kommt darauf an:
Retpolin: y
Name: Hello_world
Vermagisch: 4.15.0-163-generische SMP mod_unload-Modversionen
cienauser@haxv-shrathore-2: ~/hello world $

Die obigen Informationen sind die Details des Kernel -Moduls. Die wichtige Informationen sind zu beachten, dass Sie die Srcversion und Vermagic erhalten. Diese Informationen können verwendet werden, um den Kernel zu identifizieren, mit dem dieses Modul kompatibel ist und in die geladen werden kann. Wenn wir versuchen, das für andere Linux -Quellen oder Kernel zusammengestellte Kernel -Modul hinzuzufügen, erhalten wir den in INSMOD -Befehl inkompatiblen Fehler.

Im Folgenden finden Sie den Beispielcode und den Makefile -Code, den wir in unserer obigen Diskussion verwendet haben:

Hallo Welt.C

#enthalten
#enthalten
#enthalten
Module_license ("GPL");
Module_Description ("Hallo Welt!");
statische int __initello_init (void)

printk (kern_info "Hallo Welt \ n");
Rückkehr 0;

Statische Leere __exit hello_exit (void)

printk (Kern_info "Goodbye World \ n");

module_init (hello_init);
module_exit (Hello_exit);

Makefile

OBJ-M = Hello-World.Ö

alle:

make -c/lib/module/$ (Shell uname -r)/build/m = $ (pwd) Module

sauber:

make -c/lib/module/$ (Shell uname -r)/bauen m = $ (pwd) sauber

Abschluss

Bisher haben wir über den ladbaren Kernelmodulenprozess/die Schritte zum Hinzufügen des Kernel -Moduls besprochen. INSMOD ist der Befehl, den wir zum Laden des Kernelmoduls besprochen haben. Um zu bestätigen, ob das Modul erfolgreich geladen wird, können wir den Befehl LSMOD verwenden und schließlich den Befehl rmmod entfernen. Es gibt ein weiteres Dienstprogrammmodinfo, mit dem die Details des Kernel -Moduls gedruckt werden können.