Schnellreferenz

Dieser Abschnitt faßt die Kernel-Funktionen, -Variablen, -Makros und /proc-Dateien zusammen, die wir in diesem Kapitel angesprochen haben. Er soll als Referenz dienen. Jedes Element ist nach der entsprechenden Header-Datei (sofern vorhanden) aufgeführt. Sie werden von nun an nach jedem Kapitel solche Abschnitte vorfinden, die die im jeweiligen Kapitel neu eingeführten Symbole zusammenfassen.

_ _KERNEL_ _, MODULE

Präprozessor-Symbole, die beide definiert sein müssen, um modularisierten Kernel-Code kompilieren zu können.

_ _SMP_ _

Ein Präprozessor-Symbol, das definiert werden muß, wenn Module für symmetrische Multiprozessorsysteme kompiliert werden sollen.

int init_module(void);, void cleanup_module(void);

Einsprungpunkte in Module, die in der Objektdatei des Moduls definiert sein müssen.

#include <linux/init.h>, module_init(init_function);, module_exit(cleanup_function);

Der moderne Mechanismus zum Kennzeichnen der Initialisierungs- und Aufräumfunktionen eines Moduls.

#include <linux/module.h>

Benötigte Header-Datei. Muß in jede Modul-Quelldatei eingebunden werden.

MOD_INC_USE_COUNT;, MOD_DEC_USE_COUNT;, MOD_IN_USE

Makros, die den Verwendungszähler beeinflussen oder abfragen.

/proc/modules

Die Liste der aktuell geladenen Module. Die einzelnen Einträge enthalten den Modulnamen, die belegte Speichermenge jedes Moduls und den Verwendungszähler. An jede Zeile können zusätzliche Strings angehängt werden, die die für das jeweilige Modul gültigen Schalter angeben.

EXPORT_SYMTAB;

Präprozessor-Makro, erforderlich in Modulen, die Symbole exportieren.

EXPORT_NO_SYMBOLS;

Makro, das angibt, daß das Modul keine Symbole in den Kernel exportiert.

EXPORT_SYMBOL (symbol);, EXPORT_SYMBOL_NOVERS (symbol);

Makro zum Exportieren eines Symbols in den Kernel. Die zweite Version exportiert ohne Versionsinformationen.

int register_symtab(struct symbol_table *);

Eine Funktion, die verwendet wird, um die Menge der öffentlichen Symbole des Moduls anzugeben. Wird nur in 2.0-Kerneln verwendet.

#include <linux/symtab_begin.h>, X(symbol),, #include <linux/symtab_end.h>

Header-Dateien und Präprozessor-Makro, mit denen eine Symboltabelle im 2.0-Kernel deklariert wird.

MODULE_PARM(variable, type);, MODULE_PARM_DESC (variable, description);

Makros, die eine Modul-Variable als Parameter verfügbar machen, der vom Benutzer während des Ladens des Moduls verändert werden kann.

MODULE_AUTHOR(author);, MODULE_DESCRIPTION(description);, MODULE_SUPPORTED_DEVICE(device);

Schreiben Dokumentation über das Modul in die Objektdatei.

#include <linux/version.h>

Benötigte Header-Datei. Sie wird von <linux/module.h eingebunden, es sei denn, __NO_VERSION__ ist definiert (siehe unten).

LINUX_VERSION_CODE

Integer-Makro, nützlich, um Versionsabhängigkeiten mit #ifdef abzufragen.

char kernel_version[] = UTS_RELEASE;

In jedem Kernel-Modul benötigte Variable. Wird in <linux/module.h> definiert, wenn __NO_VERSION__ nicht definiert ist (siehe unten).

__NO_VERSION__

Präprozessor-Symbol. Verhindert die Deklaration von kernel_version in <linux/module.h>.

#include <linux/sched.h>

Eine der wichtigsten Header-Dateien. Diese Datei enthält Definitionen eines großen Teils der von Treibern verwendeten Kernel-API, darunter Funktionen zum Schlafen sowie diverse Variablendeklarationen.

struct task_struct *current;

Der aktuelle Prozeß.

current->pid, current->comm

Die Prozeß-ID und der Befehlsname des aktuellen Prozesses.

#include <linux/kernel.h>, int printk(const char * fmt, ...);

Die Entsprechung zu printf im Kernel-Code.

#include <linux/malloc.h>, void *kmalloc(unsigned int size, int priority);, void kfree(void *obj);

Die Entsprechung zu malloc und free im Kernel-Code. Verwenden Sie die Konstante GFP_KERNEL als Priorität.

#include <linux/ioport.h>, int check_region(unsigned long from, unsigned long extent);, struct resource *request_region(unsigned long from, unsigned long extent, const char *name);, void release_region(unsigned long from, unsigned long extent);

Funktionen, mit denen I/O-Ports registriert und wieder freigegeben werden.

int check_mem_region (unsigned long start, unsigned long extent);, struct resource *request_mem_region (unsigned long start, unsigned long extent, const char *name);, void release_mem_region (unsigned long start, unsigned long extent);

Makros zum Registrieren und Freigeben von I/O-Speicherbereichen.

/proc/ksyms

Die öffentliche Kernel-Symboltabelle.

/proc/ioports

Die Liste der Ports, die von installierten Geräten benutzt werden.

/proc/iomem

Die Liste der allozierten Speicherbereiche.