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

Standards zum Schreiben von Codekommentaren bei der Webseitenerstellung

<br />Ich habe die in meiner Arbeit verwende...

Detaillierte Erklärung des Prinzips des js-Proxys

Inhaltsverzeichnis Was ist der Proxy-Modus? Einfü...

Methoden und Techniken zum schnellen Anzeigen von Webseitenbildern

1. Verwenden Sie .gifs statt .jpgs. GIFs sind im ...

So beheben Sie den abnormalen Fehler ERROR: 2002 in MySQL

Kürzlich ist beim Starten von MySQL ein Fehler au...

Zwei Möglichkeiten zum korrekten Bereinigen von MySQL-Binlog-Protokollen

mysql bereinigt Binlog-Protokolle korrekt Vorwort...

Code zur Änderung des CSS-Bildlaufleistenstils

Code zur Änderung des CSS-Bildlaufleistenstils .s...

Eine detaillierte Einführung in Linux-Dateiberechtigungen

Die Stärke von Linux liegt in seinem Mehrbenutzer...

Warum verwendet der MySQL-Datenbankindex den B+-Baum?

Bevor wir weiter analysieren, warum der MySQL-Dat...

Methode zur Wiederherstellung von Betriebs- und Wartungsdaten der MySQL-Datenbank

In den vorherigen drei Artikeln wurden gängige Si...

So importieren Sie Excel-Dateien in eine MySQL-Datenbank

In diesem Artikel erfahren Sie, wie Sie Excel-Dat...

CSS-Code zum Erstellen von 10 modernen Layouts

Vorwort Ich habe mir am Sonntag zu Hause das drei...

Einfaches Webdesign-Konzept – Farbabstimmung

(I) Grundkonzepte der Farbabstimmung auf Webseiten...