Modul kernel adalah sebuah file obyek yang berisi fungsi-fungsi yang dapat digunakan oleh kernel sistem operasi. Tujuan dibuat sebuah modul kernel adalah untuk menyediakan fungsi-fungsi yang tidak disediakan secara default oleh kernel. Modul ini biasanya digunakan sebagai device driver.
Contoh sebuah modul kernel sederhana
/* file contoh.c */
#include <linux/module.h>
static void __init hello_init(void)
{
printk(KERN_INFO "Hello World!");
}
static void __exit hello_exit(void)
{
printk(KERN_INFO "Hello World!");
}
module_init(hello_init);
module_exit(hello_exit);
Untuk menjalankan modul ini pertama-tama kode harus dikompilasi. Kompilasi dapat dilakukan dengan menggunakan Makefile seperti di bawah ini
obj-m += contoh.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
Kompilasi dapat dilakukan dengan menggunakan perintah Make.
Selanjutnya akan terdapat beberapa file termasuk contoh.ko.
Untuk melakukan instalasi cukup jalankan perintah pada shell
#insmod contoh.ko
Untuk membuang modul dari kernel jalankan perintah
#rmmod
Keluaran dapat dilihat dengan menggunakan perintah
#dmesg
Bisa dilihat pada kode di atas, fungsi inisialisasi, yakni fungsi yang dijalankan pertama kali diset dengan menggunakan fungsi module_init, sedangkan fungsi yang dijalankan saat modul dibuang diset dengan menggunakan fungsi module_exit.
Pada dasarnya modul kernel berbeda dengan program biasa. Karena berjalan pada kernel space, modul hanya dapat menggunakan fungsi-fungsi yang disediakan oleh kernel. Modul kernel tidak dapat menggunakan fungsi-fungsi yang disediakan library. Oleh karena itu header file seperti stdio.h, stdlib.h, tidak dapat dipakai dalam modul. Dapat dilihat di atas, untuk melakukan pencetakan ke terminal tidak digunakan fungsi printf melainkan fungsi printk yang pada dasarnya memiliki fungsi dan fitur yang sama.
File yang berisi modul sederhana dan makefilenya dapat diunduh di sini.
NB : Direname dulu ke file zip.
Filed under: C, Linux, Snippets, System Programming , C, kernel, kernel module, Linux, Programming, System Programming
Komentar Terakhir