Suche…


Ein leeres Kernelmodul

#include <linux/init.h>
#include <linux/module.h>

/**
 * This function is called when the module is first loaded.
 */    
static int __init hello_kernel_init(void)
{
    printk("Hello, World!\n");
    return 0;
}

/**
 * This function is called when is called if and when the module is unloaded.
 */
static void __exit hello_kernel_exit(void)
{
    printk("Goodbye, cruel world...\n");
}

/* The names of the init/exit functions are arbitrary, and they are bound using the following macro definitions */
module_init(hello_kernel_init);
module_exit(hello_kernel_exit);

Um einen Linux-Gerätetreiber (Character-Device, Block-Device usw.) schreiben zu können, müssen Sie ein Kernel-Modul erstellen, das über Ein- und Ausfahrtpunkte verfügt.

Das Kernelmodul alleine macht nichts; Es gibt keine sinnvolle Möglichkeit, mit dem Benutzerraum zu kommunizieren. Über den Einstiegspunkt kann zum Beispiel ein neues Zeichengerät erstellt werden, mit dem dann mit dem Benutzerraum kommuniziert wird.

Das Modul erstellen und ausführen

Zum Kompilieren des Treibers ist der Linux-Kernel-Quellbaum erforderlich.

Angenommen, die Quellen sind /lib/modules/<kernel-version> . Das folgende Makefile kompiliert die Datei driver.c in das Kernel-Objekt driver.ko

obj-m := driver.o
KDIR := /lib/modules/$(shell uname -r)/build/
PWD := $(shell pwd)

all:
    $(MAKE) -C $(KDIR) M=$(PWD) modules

Beachten Sie, wie diese Makefile Anrufe make im Build - Verzeichnis des Kernel.

Wenn der Kompilierungsschritt erfolgreich abgeschlossen wurde, sieht das src-Verzeichnis des Treibers folgendermaßen aus:

driver.c  driver.ko  driver.mod.c  driver.mod.o  driver.o  Makefile  modules.order  Module.symvers

Um das Modul "laufen" zu können, müssen Sie Folgendes in den laufenden Kernel einfügen:

$ insmod driver.ko
$ dmesg | tail -n 1
[133790.762185] Hello, World!

$ rmmod driver.ko
$ dmesg | tail -n 1
[133790.762185] Goodbye, cruel world...


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow