Im Linux-Betriebssystem ist der Kernel der Kernteil, der die Interaktion zwischen Computerhardware und -software steuert. Das Kernelmodul ist ein wichtiges Konzept im Kernel. Es kann zur Laufzeit dynamisch in den Kernel geladen werden und erweitert so die Funktionalität des Kernels. In diesem Artikel befassen wir uns eingehend mit der Funktionsweise und dem Aufbau von Linux-Kernelmodulen und erklären, wie Sie eigene Module schreiben.
Modularer Aufbau des Linux-Kernels
1. Linux-Kernel-Design: Einzelkern, modular (dynamisches Laden und Entladen)
(1) Linux: Single-Kernel-Design, nutzt jedoch vollständig die Vorteile des Mikrokernel-Systemdesigns und führt einen modularen Mechanismus in den Kernel ein;
(2) Komponenten des Kernels:
Kernel: Kernelkern, normalerweise im bzImage-Format, normalerweise im Verzeichnis /boot mit dem Namen vmlinuz-VERSION-release;
Diese Datei wird nach dem Systemstart nicht mehr verwendet, da sie zur einfacheren Verwaltung in den Speicher geladen und unter /boot abgelegt wurde
Kernelobjekt: Kernelmodul, im Allgemeinen in /lib/modules/VERSION-release/
platziert
Das Kernelmodul und die Kernel-Kernversion müssen unbedingt übereinstimmen
[ ]: N, diesen Teil nicht kompilieren
[M]: Modul, modular kompiliert, kann temporär geladen werden, belegt Speicherplatz, belegt keinen Kernel-Speicherplatz
[*]: Y, in den Kernel-Kern kompiliert, kann direkt aufgerufen werden
ramdisk: Eine vereinfachte Version des Root-Dateisystems. Die verfügbaren Treiber sind wie folgt:
Zielgerätetreiber, z. B. SCSI-Gerätetreiber
Logischer Gerätetreiber, z. B. LVM-Gerätetreiber;
Dateisystem, z. B. xfs-Dateisystem;
Befehle zur Erfassung und Verwaltung von Kernelmodulinformationen
1.ldd: Bibliotheksdateien drucken, von denen Binäranwendungen abhängig sind – Abhängigkeiten von gemeinsam genutzten Bibliotheken drucken
Format: ldd [OPTION]… DATEI… Anzeige:
1) Name der abhängigen Bibliotheksdatei => Pfad der abhängigen Bibliotheksdatei (entsprechend dem symbolischen Link-Zuordnungspunkt zum Laden des Speichers)
2) Zugang zur gesamten Systemaufrufbibliothek
linux-vdso.so.1 => (0x00007fff293fe000) /lib64/ld-linux-x86-64.so.2 (0x00007f0228073000)
Format: uname [OPTION]… uname -a: Alle Kernel-Informationen anzeigen
uname -v: Die kompilierte Versionsnummer des Kernels
uname -r: Kernel-Versionsnummer
uname -n: Hostname
3.lsmod: Kernelmodule auflisten
Der angezeigte Kernel stammt von /proc/modules Name des Moduls, Größe, Häufigkeit der Zitierungen und wovon es zitiert wird
4.modinfo-Befehl: Detaillierte Informationen zum angegebenen Modul anzeigen
Format: modinfo [-F Feld] [-k Kernel] [Modulname|Dateiname…] -k Kernel: Um die Modulinformationen auf einem anderen Kernel abzufragen, wenn mehrere Kernel nebeneinander existieren -F-Feld: Zeigt nur Informationen zum angegebenen Feld an -n: Dateipfad anzeigen;
Zeigen Sie relevante Informationen an, indem Sie die Originaldaten der Datei /lib/modules/#######/* lesen
Inhalt anzeigen: Dateiname, Protokoll, Beschreibung, Autor, Alias, für RHEL gültige Versionsnummer, abhängige Module, Signatureinheit, Signatur, Verschlüsselungsalgorithmus
5.modprobe: realisiert das Laden und Entladen von Modulen und mountet auch abhängige Module
Format: modprobe [-r] Modulname Dynamisches Laden von Modulen: modprobe module_name Dynamische Deinstallation: modprobe -r Modulname
Hinweis: Deinstallieren Sie keine standardmäßig geladenen Module
6.depmod: – Module.dep und Map-Dateien generieren
Tool zum Generieren von Kernelmodul-Abhängigkeitsdateien und Systeminformationszuordnungsdateien;
7.insmod, rmmod: Laden und Entladen von Modulen, Modulabhängigkeiten können nicht automatisch aufgelöst werdeninsmod [Dateiname] [Moduloptionen…] Dateiname: der Dateipfad der Moduldatei rmmod [Modulname]
Ramdisk-Dateiverwaltung
1.mkinitrd (CentOS 5): Ramdisk-Datei für den aktuell verwendeten Kernel neu erstellen
# mkinitrd [OPTION…] [] –with=: Zusätzlich zu den Standardmodulen, Module, die in initramfs geladen werden müssen –preload=: Die von initramfs bereitgestellten Module erfordern vorinstallierte Module Beispiel: ~]# mkinitrd /boot/initramfs-(uname -r)
2.dracut (CentOS 6/7, kompatibel mit 5): – Low-Level-Tool zum Generieren eines Initramfs-Image
#dracut [OPTION…] [ []]
Beispiel: ~]# dracut /boot/initramfs-(uname -r) Kernel-Informationsausgabe-Pseudodateisystem 1./proc: Die Ausgabeschnittstelle für Kernelstatus und statistische Informationen bietet auch eine Konfigurationsschnittstelle, /proc/sys (1) Parameter: (3) Wichtige Kernel-Parameter
net.ipv4.ip_forward: Kernweiterleitung;
vm.drop_caches:
sys-Dateisystem: Gibt die relevanten Attributinformationen jedes vom Kernel erkannten Hardwaregeräts aus und verfügt außerdem über die einstellbaren Parameter des Kernels für die Hardwareeigenschaften
Durch Ändern dieser Parameter können die Arbeitseigenschaften des Hardwaregeräts angepasst werden
Schreibgeschützt: Informationsausgabe; zum Beispiel /proc/#/, prozessbezogene Informationen
Beschreibbar: Der Benutzer kann einen „neuen Wert“ angeben, um eine bestimmte Funktion oder Funktion des Kernels zu konfigurieren;
Format: /proc/sys: net/ipv4/ip_forward entspricht net.ipv4.ip_forward
(2) So ändern Sie Parameter
1) sysctl-Befehl
Wird speziell zum Anzeigen oder Festlegen des Werts von Parametern im Verzeichnis /proc/sys verwendet; sysctl [Optionen] [Variable[=Wert]]
Ansicht: #sysctl -a; #sysctl Variable
Ändern Sie seinen Wert: # sysctl -w variable=value
2) Dateisystembefehle (cat, echo)
Überprüfen Sie: # cat /proc/sys/PATH/TO/SOME_KERNEL_FILE
Einstellung: # echo „VALUE“ > /proc/sys/PATH/TO/SOME_KERNEL_FILE
3) Konfigurationsdateien: /etc/sysctl.conf, /etc/sysctl.d/
.conf
Sofort wirksame Methode: sysctl -p [/PATH/TO/CONFIG_FILE]
kernel.hostname: Hostname;
net.ipv4.icmp_echo_ignore_all: Alle Ping-Vorgänge ignorieren
2./sys-Verzeichnis: eingeführt nach Kernel 2.6-Version
udev: Erstellen Sie bei Bedarf Gerätedateien für jedes Hardwaregerät, indem Sie die Hardwaregeräteinformationen im Verzeichnis /sys lesen
udev ist ein User-Space-Programm; spezielle Tools: devadmin, hotplug;
Wenn udev eine Gerätedatei für ein Gerät erstellt, liest es dessen vordefinierte Regeldatei
Im Allgemeinen im Verzeichnis /etc/udev/rules.d/ und im Verzeichnis /usr/lib/udev/rules.d/
Zusammenfassend lässt sich sagen, dass das Kernelmodul ein sehr wichtiger Teil des Linux-Kernels ist, der dem Kernel umfangreiche Erweiterungsfunktionen bieten und Benutzern helfen kann, sich besser an bestimmte Hardware- oder Anwendungsszenarien anzupassen. Bei der Verwendung von Kernel-Modulen müssen Sie darauf achten, die Stabilität und Sicherheit des Kernels nicht zu beeinträchtigen. Es wird empfohlen, Kernel-Module nur bei Bedarf zu verwenden und zu schreiben. Ich glaube, dass der Inhalt dieses Artikels den Lesern helfen kann, Linux-Kernelmodule besser zu verstehen und anzuwenden.
Das obige ist der detaillierte Inhalt vonEntdecken Sie die Geheimnisse der Linux-Kernelmodule. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!