Примерот е тестиран на Linux kernel 2.6.27-14, дистрибуција Ubuntu 8.10
Најпрвен креираме zdravo_narode.c датотеката која треба да ја има следната структура:
#include <linux/module.h> // оваа библиотека е задолжителна и потребна за сите модули #include <linux/kernel.h> // библиотека потребна за KERN_ALERT int init_module(void) { printk("Zdravo narode!\n"); return 0; // доколку функцијата init_module врати вредност 0, тоа значи дека модулот не може да се вчита во јадрото. } void cleanup_module(void) { printk(KERN_ALERT "Zbogum narode!\n"); }
Откако ќе ја креираме zdravo_narode.c датотеката, креираме Makefile датотека со следната структура:
obj-m := zdravo_narode.o KDIR := /lib/modules/$(shell uname -r)/build PWD := $(shell pwd) default: $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
Следен чекор е компајлирање на модулот и негово вметнување во јадрото. За компајлирање на модулот ќе ја користиме make командата која компајлирањето го врши според правилата дефинирани во Makefile датотеката. Отворете Terminal и насочете се кон својот работен директориум каде што ги имате дефинирано zdravo_narode.c и Makefile датотеките и тука извршете ја командата make. Доколку сѐ поминало во најдобар ред треба да добиете порака слична на оваа:
make -C /lib/modules/2.6.27-14-generic/build SUBDIRS=/home/viktor/Desktop/zdravo_narode modules make[1]: Entering directory `/usr/src/linux-headers-2.6.27-14-generic' Building modules, stage 2. MODPOST 1 modules make[1]: Leaving directory `/usr/src/linux-headers-2.6.27-14-generic'
Откако ќе заврши оваа постапка модулот е искомпајлиран и спремен за да се вметне во јадрото на оперативниот систем, а со тоа во вашиот работен директориум добивте дополнителна датотека zdravo_narode.ko која всушност е нашиот “Zdravo narode!” модул. Вметнувањето на модулот во јадрото се прави со извршување на следната команда:
sudo insmod ./zdravo_narode.ko
За да бидеме сигурни дека модулот е навистина вчитан во јадрото ја извршуваме командата:
lsmod | grep zdravo_narode
И на екран го добиваме името на модулот, неговата големина како и бројот на процеси кои што го користат, нешто слично на ова:
zdravo_narode 9344 0
Со вметнувањето на модулот во јадрото се повикува init_module функцијата која во случајов испишува некој дефиниран текст, за да го видeме текстот ја извршуваме следната команда:
tail /var/log/syslog
Со тоа на екранот треба да добиеме линија слична на оваа:
Jun 9 19:36:11 viktor-laptop kernel: [ 4691.112905] Zdravo narode!
За да го отстраниме модулот од јадрото ја користиме командата:
sudo rmmod zdravo_narodeБидејќи и функцијата која се повикува кога драјверот се отстранува од јадрото испишува некаков текст, повторно ја извршуваме tail /var/log/syslog командата која ќе ни даде резултат сличен на овај:
Jun 9 19:43:05 viktor-laptop kernel: [ 5105.083288] Zbogum narode!
