"Энциклопедия разработчика модулей ядра Linux" - читать интересную книгу автора (Померанц Ори)

Hello, world

Традиционно все учебники программирования начинаются с программы "Hello, world!". Я не знаю, что случается с людьми, которые порывают с этой традицией, и думаю, что безопаснее не выяснять. 

Модуль ядра (в дальнейшем просто модуль для краткости) должен иметь по крайней мере две функции: init_module, которая вызывается, когда модуль вставляется в ядро и cleanup_module, которая вызывается, когда он удаляется. Обычно init_module регистрирует драйвер для каких-либо действий с ядром или заменяет одну из ядерных функций собственным кодом (обычно код делает что-то и затем вызывает первоначальную функцию). Функция cleanup_module, как предполагается, отменяет все, что сделано init_module, так что модуль может быть выгружен безопасно.

hello.c

/* hello.c

* Copyright (C) 1998 by Ori Pomerantz

*

* "Hello, world" - версия для модуля ядра.

*/


/* The necessary header files */

/* Standard in kernel modules */

#include lt;linux/kernel.hgt; /* We're doing kernel work */

#include lt;linux/module.hgt; /* Specifically, a module */


/* Deal with CONFIG_MODVERSIONS */

#if CONFIG_MODVERSIONS==1

#define MODVERSIONS

#include lt;linux/modversions.hgt;

#endif


/* Initialize the module */

int init_module() {

 printk("Hello, world - this is the kernel speaking\n");

 /* If we return a non zero value, it means that

 * init_module failed and the kernel module

 * can't be loaded */

 return 0;

}


/* Cleanup - undid whatever init_module did */

void cleanup_module() {

 printk("Short is the life of a kernel module\n");

}