In Linux ist ein Modul eine Möglichkeit, Gerätetreiber, Dateisysteme und andere Komponenten zum Linux-Kernel hinzuzufügen. Es handelt sich um eine Sammlung von Funktionen und Datentypen, die als unabhängiges Programm entweder durch statische oder dynamische Methoden kompiliert werden können. In den Kernelraum geladen.
Die Betriebsumgebung dieses Tutorials: Linux7.3-System, Dell G3-Computer.
Modul ist eine Methode, die Gerätetreiber, Dateisysteme und andere Komponenten zum Linux-Kernel hinzufügen kann. Es ist keine Neukompilierung des Kernels oder ein Neustart des Systems erforderlich. Der Kernel muss sich mit dem Laden und Entladen von Modulen und den Abhängigkeiten zwischen Modulen befassen. Da das Modul im Kernel-Bereich ausgeführt wird, muss das Modul die vom Kernel bereitgestellten Funktionen verwenden. Wir können das Modul auch zum Aufrufen der entsprechenden Kernel-Funktion verwenden, einer Methode der Kernel-Modus-Programmierung. Der Kern einer Moduldatei ist eine verschiebbare Binärdatei, normalerweise in der Form *.ko.
Linux-Module können durch statische oder dynamische Methoden in den Kernelraum geladen werden. Statisches Laden bezieht sich auf das Laden während des Kernel-Startvorgangs; dynamisches Laden bezieht sich auf das Laden zu jedem Zeitpunkt, während der Kernel ausgeführt wird. Wenn ein Modul in den Kernel geladen wird, wird es Teil des Kernel-Codes. Wenn ein Modul in das System geladen wird, ändert das System die Symboltabelle im Kernel und fügt die vom neu geladenen Modul bereitgestellten Ressourcen und Symbole zur Kernel-Symboltabelle hinzu, um die Kommunikation zwischen Modulen zu erleichtern.
Zusammensetzung von Modulen
Das Linux-Kernelmodul besteht hauptsächlich aus den folgenden Teilen:
Modulladefunktion (erforderlich): Beim Laden des Kernelmoduls über den Befehl insmod wird die Ladefunktion des Moduls automatisch aktiviert Kernel-Ausführung, um die mit diesem Modul verbundene Initialisierungsarbeit abzuschließen;
Funktion zum Entladen des Moduls (erforderlich): Wenn das Modul über den Befehl rmmod entladen wird, wird die Entladefunktion des Moduls automatisch vom Kernel ausgeführt, wodurch die entgegengesetzte Funktion zum Modul ausgeführt wird Ladefunktion;
Modulberechtigungslizenzerklärung (erforderlich): Die Modullizenzerklärung (LICENSE) beschreibt die Berechtigungen des Kernelmoduls. Wenn LICENSE nicht deklariert ist, erhält das Modul beim Laden des Moduls eine Warnung, dass der Kernel kontaminiert ist .
Modulparameter (optional): Modulparameter sind Werte, die beim Laden an das Modul übergeben werden können, was wiederum globalen Variablen innerhalb des Moduls entspricht;
Modulexportsymbole (optional): Kernelmodule können Symbole exportieren (Symbol, entsprechend einer Funktion oder Variable), damit andere Module Variablen oder Funktionen in diesem Modul verwenden können
Modulautor und andere Informationsdeklaration (optional).
Beispiel für ein Modul:
//内核头文件 #include<linux/module.h> #include<linux/kernel.h> #include<linux/init.h> //加载函数 static int __init init_hello_module(void){ //内核打印函数,linux系统使用dmesg命令可以查看打印信息 printk(KERN_INFO "Hello World\n"); return 0; } //卸载函数 static void __exit exit_hello_module(void){ printk(KERN_INFO "Exit the Hello world Module!\n"); } module_init(init_hello_module); module_exit(exit_hello_module); MODULE_LICENSE("GPL"); MODULE_AUTHOR("Eric"); MODULE_VERSION("v0.1"); MODULE_DESCRIPTION("TEST FOR MODULE");
Makefile entsprechend dem Modul:
#Makefile obj-m:=hello.o KERNELBUILD:=/lib/modules/$(shell uname -r)/build all: make -C $(KERNELBUILD) M=$(shell pwd) modules clean: make -C $(KERNELBUILD) M=$(shell pwd) clean
Verwandte Empfehlungen: „Linux Video Tutorial“
Das obige ist der detaillierte Inhalt vonWas bedeutet Linux-Modul?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!