Buscar..


Un módulo vacío del núcleo

#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);

Para escribir un controlador de dispositivo Linux (dispositivo de caracteres, dispositivo de bloque, etc.), es necesario crear un módulo de kernel que tenga puntos de entrada y salida.

Por sí mismo, el módulo kernel no hace nada; no tiene una manera significativa de comunicarse con el espacio de usuario. Usando el punto de entrada, es posible crear un nuevo dispositivo de carácter, por ejemplo, que luego se utiliza para comunicarse con el espacio de usuario.

Construyendo y ejecutando el módulo.

Para compilar el controlador, es necesario tener el árbol de origen del kernel de Linux.

Suponiendo que las fuentes están en /lib/modules/<kernel-version> , el siguiente Makefile compilará el archivo driver.c en el driver.ko kernel driver.ko

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

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

Observe cómo se make estas llamadas de Makefile en el directorio de compilación del Kernel.

Cuando el paso de compilación finalice satisfactoriamente, el directorio src del controlador tendrá un aspecto similar al siguiente:

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

Para "ejecutar" el módulo, es necesario insertar en el kernel en ejecución:

$ 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
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow