Moduł

Z Linux Wiki
Skocz do: nawigacja, szukaj

Moduł – element dynamicznie ładowany do jądra Linux. Najczęściej są to sterowniki jakiegoś urządzenia. Modułowość umożliwia sprawne zarządzanie pamięcią dla jądra – gdy jakiś moduł jest niepotrzebny, odłącza się go.

Zarządzanie modułami

Wyświetlenie listy modułów:

$ lsmod

Ładowanie modułu:

# modprobe nazwa

Odłączanie modułu:

# rmmod nazwa

Przykładowy moduł

#include <linux/module.h>
#include <linux/kernel.h>
 
/* Funkcja wywoływana po załadowaniu modułu */
int init_module(void) {
printk("Zostałem załadowany\n");
return 0;
}
 
/* Funkcja wywoływana przy odłączeniu modułu */
void cleanup_module(void) { 
printk("Zostałem odłączony\n");
}

Do poprawnego skompilowania powyższego kodu, należy załączyć za pomocą dyrektywy #include dwa pliki nagłówkowe – kernel.h i module.h. Kod składa się z funkcji init_module() i cleanup_module(). Każdy moduł musi zawierać te funkcje w celu poprawnego działania. Funkcja init_module(), zwracająca typ całkowity jest pierwszą funkcją modułu wywoływaną przez jądro zaraz po załadowaniu modułu za pomocą polecenia modprobe. Funkcja cleanup_module() jest wywoływana w trakcie odłączania modułu poleceniem rmmod. W powyższym przykładzie znajduje się również funkcja printk(), wypisująca nasz tekst na terminal. Przy budowie modułów tylko funkcje jądra są dostępne, dlatego też nie możemy wywołać funkcji printf().

W celu poprawnej kompilacji powyższego modułu, do katalogu należy zamieścić poniższy plik Makefile:

obj-m += przykład.o
 
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
 
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean