Виктор Стојановски – zuberot

Јас, блогер.

Archive for the ‘kernel’ tag

“Zdravo narode!” модул за Linux kernel 2.6.x

leave a comment

Примерот е тестиран на 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!

Written by Виктор Стојановски

јуни 9th, 2009 at 7:59 pm

Posted in упатство

Tagged with , , ,