Linux-Kernel-Gerätetreiber. Zusammenfassung der Hinweise zum Lademechanismus von Linux-Kernelmodulen.

Linux-Kernel-Gerätetreiber. Zusammenfassung der Hinweise zum Lademechanismus von Linux-Kernelmodulen.

#include <linux/moduleparam.h>

1. Modulparameter

Definieren von Variablen im Treiber

static int num = 0; //Wenn das Lademodul den Wert von num nicht angibt, ist er 0
  • module_param(Variablenname, Typ, Berechtigungen); Typ: Byte, Int, Uint, Short, Ushort, Long, Ulong, Bool, Charp, Berechtigungen können keine Schreibberechtigungen haben
  • Übergabeparameter: insmod test.ko Variablenname 1 = Wert 1 Variablenname 2 = Wert 2

Die aufrufende Beziehung von module_param ist wie folgt:

#define module_param(Name, Typ, Dauer) \
module_param_named(Name, Name, Typ, Dauer)
#define module_param_named(Name, Wert, Typ, Perm) \
param_check_##Typ(Name, &(Wert)); \
module_param_call(Name, param_set_##Typ, param_get_##Typ, &Wert, perm); \
__MODULE_PARM_TYPE(Name, #Typ)
#define module_param_call(name, setze, empfange, arg, perm) \
__module_param_call(MODULE_PARAM_PREFIX, \
  Name, Satz, Abrufen, Argument, \
  __same_type(*(arg), bool), dauerhaft)
#define __module_param_call(Präfix, Name, Set, Get, Argument, Isbool, Perm) \
statische int __param_perm_check_##name __attribute__((unbenutzt)) = \
BUILD_BUG_ON_ZERO((perm) < 0 || (perm) > 0777 || ((perm) & 2)) \
+ BUILD_BUG_ON_ZERO(Größe von(""Präfix) > MAX_PARAM_PREFIX_LEN); \
static const char __param_str_##name[] = Präfix #name; \
statische Struktur kernel_param __moduleparam_const __param_##name \
__gebraucht \
  __attribute__ ((unbenutzt,__section__ ("__param"),ausgerichtet(sizeof(void *)))) \
= { __param_str_##name, perm, isbool ? KPARAM_ISBOOL : 0, \
  setzen, abrufen, { arg } }

Mehrere C-Dateien können in ein Modul kompiliert werden. Dies kann mit den Anweisungen im Makefile xxx-objs wie folgt erreicht werden:

test-objs := ao bo //Kompilieren Sie ac und bc in test.ko. Beachten Sie, dass es keine .o-Datei mit demselben Namen wie die Ziel-KO-Datei geben kann obj-m += test.o

Sie können die Modulinformationen im System unter /sys/module/modulname/ einsehen.

1. Zeigen Sie die Informationen der Elf-Datei an

readelf test.ko -a

Ko-Dateizusammensetzung

  • 1. Elf-Dateiheader
  • 2. Textdaten ...
  • 3. Abschnittstabelle
  • 4. Symboltabelle

2. EXPORT_SYMBOL (Funktionsname/Variablenadresse) // Exportiere die Adresse der Funktion/oder Variable in die Kernel-Symboltabelle

EXPORT_SYMBOL_GPL(Funktionsname)
///////////

/proc/kallsyms Zeigt die Symboltabelle des aktuellen Systems an

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:
  • Eine einfache Möglichkeit, Linux-Code auf Windows zu portieren
  • Hinweise zur Speicherverwaltung von Linux-Kernel-Gerätetreibern
  • Hinweise zur Zeitverwaltung des Linux-Kernel-Gerätetreibers
  • Hinweise zum Zeichengerätetreiber des Linux-Kernel-Gerätetreibers
  • Hinweise zum virtuellen Dateisystem des Linux-Kernel-Gerätetreibers
  • Hinweise zum Systemaufruf des Linux-Kernel-Gerätetreibers
  • Sortierung der technischen Hinweise zum Linux-Kernel-Gerätetreiber-Kernel-Debugging
  • Hinweise zur Verwendung der verknüpften Liste des Linux-Kernel-Gerätetreibers
  • Hinweise zum Proc-Dateisystem des Linux-Kernel-Gerätetreibers
  • Hinweise zum erweiterten Zeichengerätetreiber des Linux-Kernel-Gerätetreibers
  • Hinweise zur Adresszuordnung von Gerätetreibern im Linux-Kernel
  • Gerätetreiber des Linux-Kernels – Zusammenfassung der grundlegenden Hinweise zum Linux-Kernel
  • Schritte zum Übertragen des neuen Kernels auf das Linux-System

<<:  Beispiel für das Hinzufügen und Löschen von Bereichspartitionen in MySQL 5.5

>>:  JavaScript implementiert das Protokollbeispiel, in dem der Benutzer das Kontrollkästchen aktivieren muss

Artikel empfehlen

Vue.js implementiert eine Timeline-Funktion

In diesem Artikel wird der spezifische Code von V...

Vollständige Schritte für dynamische Bindungssymbole in Vue

0 Unterschiede zwischen Symbolen und Bildern Symb...

Häufige Fragen und Antworten im Vorstellungsgespräch für Stellen als Webdesigner

1. Was sind die Vorlagen für ASP.NET-Webanwendunge...

Lösung zum automatischen Neustart von MySQL

Vorwort Kürzlich trat in der Testumgebung ein Pro...

JS implementiert die Append-Funktion von jQuery

Inhaltsverzeichnis Zeig mir den Code Testen Sie d...

Konfigurationshandbuch für den Lastenausgleich auf Ebene 4 von Nginx

1. Einführung in Layer 4 Load Balancing Was ist L...

Implementierungscode für die teilweise Aktualisierung einer HTML-Seite

Aktualisierung der Ereignisantwort: Aktualisierun...

So erstellen Sie mit Harbor ein privates Docker-Repository

Inhaltsverzeichnis 1. Open-Source-Lagerverwaltung...

Eine einfache Erklärung der parallelen MySQL-Replikation

1. Hintergrund der parallelen Replikation Zunächs...

Verwenden Sie sauberes HTML-Markup zum Erstellen Ihrer Seiten

Das Internet ist ein Organismus, der sich ständig...

Implementierung der automatischen Konstruktionsweiterleitung von React

Inhaltsverzeichnis Sequenz 1. Zentralisiertes Rou...

So stellen Sie MySQL so ein, dass die Groß-/Kleinschreibung nicht beachtet wird

MySQL auf Groß-/Kleinschreibung eingestellt Windo...

So definieren Sie Eingabetyp=Dateistil

Warum die Dateisteuerung verschönern? Stellen Sie ...

Docker stellt eine MySQL-Remoteverbindung bereit, um 2003-Probleme zu lösen

Herstellen einer Verbindung mit MySQL Hier verwen...