Gerätetreiber des Linux-Kernels – Zusammenfassung der grundlegenden Hinweise zum Linux-Kernel

Gerätetreiber des Linux-Kernels – Zusammenfassung der grundlegenden Hinweise zum Linux-Kernel

1. Mechanismus des Linux-Kernel-Treibermoduls

Statisches Laden: Kompilieren Sie das Treibermodul in den Kernel und laden Sie es, wenn der Kernel gestartet wird. Dynamisches Laden: Kompilieren Sie das Treibermodul als ko und laden Sie es, wenn der Kernel gestartet wird.

2. Schreiben Sie den Kerneltreiber

#include <linux/module.h>
#include <linux/init.h>
statische int __init test_init(void) 
{
return 0; //Gib 0 zurück, um Erfolg anzuzeigen, gib eine negative Zahl zurück, um das Lademodul zu beenden}
//__init Nachdem der Kernel den Treiber initialisiert hat, geben Sie den Codebefehlsbereich dieser Funktion frei static void __exit test_exit(void)
{
....
}
//__exit gibt an, dass diese Funktion nur verwendet wird, wenn der Treiber deinstalliert und nach der Verwendung freigegeben wirdmodule_init(test_init); //Geben Sie test_init als Modulinitialisierungsfunktion anmodule_exit(test_exit); //Geben Sie test_exit als Deinstallationsfunktion zum Beenden des Moduls anMODULE_LICENSE("GPL"); //Geben Sie die unterstützten Protokolle anMODULE_AUTHOR("Autor");
MODULE_DESCRIPTION("Beschreibung");
MODULE_VERSION("Version");
#define __init __section(.init.text)
#define __initdata __section(.init.data)
char __initdata buf[] = "Hallo Welt";
#define __exitdata __section(.exit.data)
#define __exit __section(.exit.text)
/////////////

modinfo test.ko zum Anzeigen von Modulinformationen

cat /proc/modules Zeigt die dynamischen Lademodule des aktuellen Systems an, was lsmod
entspricht lsmod

test 1768 0 - Live 0xbf03c000

Modulname, belegte Speichergröße, Anzahl der Aufrufe, Gültigkeit, Speicheradresse, an der sich das Modul befindet

ls /sys/module um alle Module anzuzeigen

3. Makefile des Treibermoduls

  • obj-m += test.o //Die Quellcodedatei ist test.c
  • module:make -C Kernelquellverzeichnis M = Treibercodeverzeichnis Module
  • Module installieren: make -C Kernel-Quellverzeichnis M=Treibercode-Verzeichnis module_install INSTALL_MOD_PATH=/Dateisystempfad
  • clean:make -C Kernel-Quellcodeverzeichnis M=Treibercodeverzeichnis Module clean

4. Überprüfen Sie die Treiberausgabemeldung

cat /var/log/Nachrichten
Schwanz /var/log/Nachrichten

5. Printk-Pegelkontrolle

/usr/src/kernels/2.6.18-194.el5-i686/include/linux/kernel.h

<linux/kernel.h>
#define KERN_EMERG "<0>" /* System ist unbrauchbar */
#define KERN_ALERT "<1>" /* Aktion muss sofort ausgeführt werden */
#define KERN_CRIT "<2>" /* kritische Bedingungen */
#define KERN_ERR "<3>" /* Fehlerbedingungen */
#define KERN_WARNING "<4>" /* Warnbedingungen */
#define KERN_NOTICE "<5>" /* normaler, aber signifikanter Zustand */
#define KERN_INFO "<6>" /* informativ */
#define KERN_DEBUG "<7>" /* Meldungen auf Debug-Ebene */

Die Standardstufe ist KERN_WARNING "<4>"

Verwendung: printk(KERN_INFO"內容");

Zeigen Sie den Ausgabepegel des aktuellen Kernels an cat /proc/sys/kernel/printk
7 4 1 7
7:Konsolenprotokollebene
4:Standardmessage_Loglevel
1:minimale_Konsolenprotokollebene
7:Standardkonsolen-Protokollebene

Wenn die von der printk-Funktion verwendete Ebene niedriger ist als die aktuelle Ebene console_loglevel , kann sie ausgegeben werden, andernfalls wird sie nicht ausgegeben

Ändern Sie die Pegelausgabe echo 8 > /proc/sys/kernel/printk

Zusammenfassen

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM. Wenn Sie mehr darüber erfahren möchten, schauen Sie sich bitte die folgenden Links an

Das könnte Sie auch interessieren:
  • Ein Bild, das das Funktionsprinzip des Linux-Kernels zeigt
  • Entdecken Sie, wie Ihnen eine LED den Einstieg in den Linux-Kernel erleichtert

<<:  Vue-Routing zum Implementieren der Login-Abfangung

>>:  Tutorial zur Remote-Verbindung mit einer MySQL-Datenbank unter Linux

Artikel empfehlen

So erhalten Sie Root-Berechtigungen in einem Docker-Container

Zunächst muss Ihr Container laufen Sie können die...

Informationen zum Fallstrickprotokoll der Vue3-Übergangsanimation

Inhaltsverzeichnis Hintergrund Problemort Weitere...

Führen Sie die Shell oder das Programm im Docker-Container auf dem Host aus.

Um zu vermeiden, dass für den Betrieb immer wiede...

Erläuterung zu JavaScript-Anti-Shake und -Throttling

Inhaltsverzeichnis Stabilisierung Drosselung Zusa...

So simulieren Sie eine Aufzählung mit JS

Vorwort Im aktuellen JavaScript gibt es kein Konz...

Analyse der zum Ausführen von Docker erforderlichen Berechtigungen

Zum Ausführen von Docker sind Root-Rechte erforde...

Der Grund, warum MySQL den B+-Baum als zugrunde liegende Datenstruktur verwendet

Wir alle wissen, dass die zugrunde liegende Daten...

Beispiel für asynchronen Dateiupload in HTML

Code kopieren Der Code lautet wie folgt: <form...

So speichern Sie Bilder in MySQL

1 Einleitung Beim Gestalten einer Datenbank ist e...

Zwei Möglichkeiten zur Verwendung von React in React HTML

Grundlegende Verwendung <!DOCTYPE html> <...

JavaScript-Makrotasks und Mikrotasks

Makrotasks und Mikrotasks JavaScript ist eine Sin...

Besprechen Sie den Wert von Webstandards aus vier Aspekten mit einer Mindmap

Ich habe einige Werte grob aufgelistet, um die Di...