Skip navigation

Tag Archives: kernel module


Melanjutkan postingan tentang modul kernel yang dulu.

Biasanya untuk melakukan pemindahan data antara dua buah program cukup dengan menggunakan sebuah file yang dibaca bersama (selain dengan menggunakan IPC). Hal ini cukup sulit untuk dilaksanakan pada modul kernel karena pada dasarnya modul tidak disediakan fungsi file I/O layaknya system call open(). Menulis file pada kernel space menjadi cukup sulit.

Salah satu cara yang mudah melakukan komunikasi antara sebuah kernel module dan user space program adalah dengan menggunakan procfs. Procfs adalah sebuah filesystem yang menyediakan informasi mengenai process-process dalam kernel. Procfs ini dapat dibuka di folder /proc.

$cd /proc
$ls -l | less
dr-xr-xr-x  6 root       root               0 2009-01-07 15:07 1
dr-xr-xr-x  6 root       root               0 2009-01-07 15:07 119
dr-xr-xr-x  6 root       root               0 2009-01-07 15:07 120
dr-xr-xr-x  6 root       root               0 2009-01-07 15:07 121
dr-xr-xr-x  6 root       root               0 2009-01-07 15:07 1369
dr-xr-xr-x  6 root       root               0 2009-01-07 15:07 1372
dr-xr-xr-x  6 root       root               0 2009-01-07 15:07 1385
dr-xr-xr-x  6 root       root               0 2009-01-07 15:07 1392
dr-xr-xr-x  6 root       root               0 2009-01-07 15:07 2

Di sana tersimpan data-data mengenai process yang sedang dijalankan. Folder-folder yang memiliki nama berupa angka merepresentasikan process dengan process ID (PID) yang  sama dengan nama folder tersebut. Di dalam folder tersebut tersimpan data-data mengenai process yang bersangkutan.

Read More »


Salah satu hal yang bisa dilakukan pada modul kernel adalah membuat sebuah sistem yang sifatnya real time. Salah satu contohnya adalah pada tugas terakhir kuliah IF4097 Jaringan Komputer Lanjut. Pada tugas ini kita diminta untuk membuat sebuah modul kernel yang secara periodik mengecek availability sebuah node pada jaringan.

Timer ini dapat diimplementasikan dengan menggunakan struktur data timer_list. Struktur data ini dapat di lihat pada include/linux/timer.h

struct timer_list 
{ 
		struct timer_list *next; 
		struct timer_list *prev; 
		unsigned long expires; 
		unsigned long data; 
		void (*function)(unsigned long); 
}; 

Read More »


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.

%d blogger menyukai ini: