Ubuntu kompiliert Kernelmodule und der Inhalt wird im Systemprotokoll angezeigt

Ubuntu kompiliert Kernelmodule und der Inhalt wird im Systemprotokoll angezeigt

1.Linux-Anmeldeschnittstelle

1. Überprüfen Sie das aktuelle Dateiverzeichnis:

Nach der Verbindung mit dem Linux-System über Xshell

Geben Sie den Befehl ein: ls

Bildbeschreibung hier einfügen

2. Erstellen Sie einen neuen Code/Kernel-Ordner

Bildbeschreibung hier einfügen

2. Code schreiben

1. Erstellen Sie hello_module.c

Befehl: vim hello_module.c

2. Drücken Sie i , um in den Bearbeitungsmodus zu wechseln, und geben Sie den folgenden Code ein

 //hello_module.c #include <linux/module.h> #include <linux/kernel.h> #include <linux/init.h> ​ static int __init hello_init(void){ printk("This is hello_module, welcome to Linux kernel \n"); return 0; } ​ static void __exit hello_exit(void){ printk("see you next time!\n"); } ​ module_init(hello_init); module_exit(hello_exit); ​ MODULE_LICENSE("GPL"); MODULE_AUTHOR("Mr Q"); MODULE_DESCRIPTION("hello kernel module"); MODULE_ALIAS("hello");

Bildbeschreibung hier einfügen

Der obige Code wird wie folgt erklärt:
(1) #include <linux/module.h>: Erforderlich. Die Header-Datei module.h enthält die Strukturdefinition des Moduls und die Versionskontrolle des Moduls. Jedes Modulprogramm muss diese Header-Datei einschließen.
(2) #include <linux/kernel.h>: kernel.h enthält häufig verwendete Kernelfunktionen, wie z. B. die Funktion printk() im obigen Programm;
(3) #include <linux/init.h>: Erforderlich. init.h enthält Deklarationen der Funktionen module_init() und module_exit();
(4) module_init(): erforderlich. Modulladefunktion: Beim Laden eines Moduls wird diese Funktion automatisch ausgeführt, um Initialisierungsvorgänge durchzuführen.
(5) module_exit(): erforderlich. Modul-Deinstallationsfunktion, die automatisch ausgeführt wird, wenn das Modul deinstalliert wird, um Bereinigungsvorgänge durchzuführen; (6) MODULE_LICENSE(): Gibt die vom Modulcode akzeptierte Software-Lizenzvereinbarung an. Der Linux-Kernel ist ein Open-Source-Projekt unter Verwendung der GPL V2, das von allen Personen oder Organisationen, die den Linux-Kernel-Code verwenden und ändern, verlangt, den geänderten Quellcode öffentlich zu machen. Dies ist eine obligatorische Open-Source-Vereinbarung. Daher ist es im Allgemeinen erforderlich, diese Vereinbarung beim Schreiben von Treibercode ausdrücklich zu erklären und einzuhalten, da sonst die Kernel-Benutzeroberfläche eine kontaminierte Warnung ausgibt.
(7) MODULE_AUTHOR(): beschreibt die Autoreninformationen des Moduls;
(8) MODULE_DESCRIPTION(): Beschreiben Sie kurz den Zweck und die Funktion des Moduls.
(9) MODULE_ALIAS(): Für Benutzersteuerelemente bereitgestellter Alias;
(10) printk(): Kernel-Ausgabefunktion, die standardmäßig den Inhalt der Systemdatei "/var/log/kern.log" druckt.

3. Speichern und beenden und ESC drücken, um das Dateiverzeichnis anzuzeigen;
:wq

Bildbeschreibung hier einfügen

3. Schreiben Sie das Makefile

vim Makefile

 obj-m := hallo_modul.o
 ​
 KERNELBUILD := /lib/modules/$(shell uname -r)/build
 CURRENT_PATH := $(Shell-Passwort)
 ​
 alle:
     make -C $(KERNELBUILD) M=$(CURRENT_PATH) Module
 ​
 sauber:
         make -C $(KERNELBUILD) M=$(CURRENT_PATH) sauber

Der obige Code wird wie folgt erklärt:
(1) obj-m := <Modulname>.o: definiert den Namen des zu generierenden Moduls (2) KERNELBUILD := /lib/modules/$(shell uname -r)/build: KERNELBUILD ist ein benutzerdefinierter Name, der verwendet wird, um auf das Kernel-Kompilierungsverzeichnis des laufenden Linux zu verweisen, wobei die Kennung „uname -r“ die entsprechende Kernel-Version anzeigt;
(3) CURRENT_PATH := $(shell pwd): CURRENT_PATH ist ein benutzerdefinierter Name, der verwendet wird, um auf das aktuelle Verzeichnis zu verweisen;
(4) all: von der Kompilierung ausgeführte Aktionen. (5) clean: von make clean erforderliche Aktionen. Mit „make clean“ werden die Objektdateien (Dateien mit der Endung „.o“) und ausführbaren Dateien gelöscht, die durch den letzten Make-Befehl erzeugt wurden.

:wq speichern und beenden

4. Kompilieren:

Geben Sie den Befehl ein: make

Bildbeschreibung hier einfügen

Sie können die kompilierten Dateien sehen

Bildbeschreibung hier einfügen

Überprüfen kompilierter Module

Bildbeschreibung hier einfügen

Sie können für weitere Überprüfungen auch den Befehl modinfo verwenden:

Bildbeschreibung hier einfügen

5. Modul einsetzen

Fügen Sie das Modul mit dem Befehl insmod ein. Nachdem der Einfügen abgeschlossen ist, können Sie mit dem Befehl lsmod prüfen, ob das aktuelle Modul in das System geladen wurde:

Bildbeschreibung hier einfügen

Das erste ist:

Nachdem das System das Modul geladen hat, wird es außerdem ein neues Verzeichnis erstellen, das nach dem Modul benannt ist, und zwar im Verzeichnis „/sys/module“:

Bildbeschreibung hier einfügen

6. Protokollausgabe anzeigen

Da prink() in dieser Demonstration die Standardausgabeebene verwendet, können Sie die Ausgabeergebnisse über den Befehl „dmesg“ oder „tail /var/log/kern.log“ anzeigen.

Bildbeschreibung hier einfügen

Dies ist das Ende dieses Artikels über das Kompilieren von Kernelmodulen in Ubuntu und den Inhalt, der im Systemprotokoll angezeigt wird. Weitere relevante Inhalte zum Kompilieren von Kernelmodulen in Ubuntu finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Detaillierte Erläuterung des Implementierungsprozesses zum Erstellen eines Kernelbaums in Ubuntu 12.04
  • Schritte zum Upgrade des Ubuntu 16.04-Kernels

<<:  Concat() von kombinierten Feldern in MySQL

>>:  Verwenden von CSS3 und JavaScript zum Entwickeln von Beispielcode für die Web-Farbauswahl

Artikel empfehlen

Lernen Sie einfach verschiedene SQL-Joins

Mit der SQL JOIN-Klausel können Zeilen aus zwei o...

Centos7-Installation des FFmpeg-Audio-/Video-Tools – einfaches Dokument

ffmpeg ist ein sehr leistungsfähiges Tool zur Aud...

Zusammenfassung des Front-End-Wissens im Gokudō-Spiel

Hintergrund Zu Beginn meines Japanisch-Lernens fi...

Erste Schritte mit GDB unter Linux

Vorwort gdb ist ein sehr nützliches Debugging-Too...

js und jquery, um einen Tab-Statusleisten-Umschalteffekt zu erzielen

Heute werden wir einen einfachen Fall durchgehen ...

Implementierung eines einfachen Rechners mit Javascript

In diesem Artikelbeispiel wird der spezifische Ja...

Die perfekte Lösung für das MySql-Versionsproblem sql_mode=only_full_group_by

1. Überprüfen Sie sql_mode wählen Sie @@sql_mode ...

JavaScript zum Hinzufügen und Löschen von Nachrichten im Message Board

Dieser Artikel zeigt ein kleines Beispiel für das...

Ausführliche Erläuterung der HTML-Grundlagen (Teil 1)

1. Das WEB verstehen Webseiten bestehen hauptsäch...

Tutorial zum Erstellen des File-Sharing-Dienstes Samba unter CentOS6.5

Samba-Dienste: Dieser Inhalt dient als Referenz f...