"Энциклопедия разработчика модулей ядра 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");