Cuando el primer programador de las cavernas cinceló el primer programa en las paredes de la primera computadora de las cavernas, era un programa para imprimir la cadena de caracteres `Hola, mundo' en las pinturas de los Antílopes. Los libros de texto de los romanos sobre programación empezaban con el programa `Salut, Mundi'. No sé qué puede ocurrirle al que rompa esta tradición, y creo que es más seguro no averiguarlo.
Un módulo del núcleo tiene que tener por lo menos dos funciones: init_module que se llama cuando el módulo se inserta en el núcleo, y cleanup_module que se llama justo antes de ser quitado. Típicamente, init_module o bien registra un manejador para algo que tiene que ver con el núcleo, o reemplaza una de las funciones del núcleo con su propio código (normalmente código para hacer algo y luego llamar a la función original). La función cleanup_module se supone que deshace lo que init_module ha hecho, de forma que el módulo pueda ser descargado de una forma segura.
/* hello.c
* Copyright (C) 1998 by Ori Pomerantz
*
* "Hello, world" - la versión módulo del núcleo.
*/
/* Los archivos de cabeceras necesarios */
/* Estándar en los módulos del núcleo */
#include <linux/kernel.h> /* Estamos realizando trabajo del núcleo */
#include <linux/module.h> /* Específicamente, un módulo */
/* Distribuido con CONFIG_MODVERSIONS */
#if CONFIG_MODVERSIONS==1
#define MODVERSIONS
#include <linux/modversions.h>
#endif
/* Inicializa el módulo */
int init_module()
{
printk("Hola, mundo - este es el núcleo hablando\n");
/* Si retornamos un valor distinto de cero, significa
* que init_module falló y el módulo del núcleo
* no puede ser cargado */
return 0;
}
/* Limpieza - deshacemos todo aquello que hizo init_module */
void cleanup_module()
{
printk("La vida de un módulo del núcleo es corta\n");
}