создаём какую нить временную папку и заходим туда
mkdir mod; cd mod
открываем в vim е новый файл и пишем туда код на Си
vim my_mod.c
#include // содержит объявление функций module_init и module_exit
#include // содержит объявление функции printk
#include // содержит объявление макроса MODULE_LICENSE
MODULE_LICENSE("GPL");
static int __init hello_in(void)
{
printk("Привет мир! из пространства ядра...\n");
return 0;
}
static void __exit hello_out(void)
{
printk("Пока мир, выхожу из пространства ядра...\n");
}
module_init(hello_in);
module_exit(hello_out);
сохраняем и закрываем :wq
теперь создадим Makefile для сборки модуля
echo obj-m += my_mod.o > Makefile
теперь компилируем его, текущее ядро или заголовки должны быть установлены
make -C /usr/src/linux-`uname -r` SUBDIRS=$PWD modules
в итоге в текущей папке получаем кучу файлов среди которых нужный нам модуль ядра my_mod.ko
Загружаем и выгружаем модуль в ядро:
sudo insmod my_mod.ko
sudo rmmod my_mod.ko
чтобы увидеть результат взгляните в сообщения ядра
dmesg | tail
atl1 0000:02:00.0: tx busy
Привет мир! из пространства ядра...
Пока мир, выхожу из пространства ядра..
спасибо автору http://mczim-debian.blogspot.com/2008/01/linux-kernel-module-programming.html