Basic pemrograman linux kernel module


PENGANTAR
---------

Kernel module adalah potongan kode yang dapat di load dan unload ke dalam kernel saat ada request dari user
program tersebut akan memperluas fungstionalitas kernel tanpa perlu reboot sistem.
Sebagai contoh,satu jenis modul device buat driver yang memungkinkan kernel untuk mengakses hardware untuk terhubung ke komputer.
tanpa modul,kita harus bisa membuat kernel monolitik agar dapat menambahkan fungsi baru yang terhubung langsung di dalam kernel
selain memiliki memori kernel yang lebih besar,kelemahannya adalah kita akan di minta terus untuk
reboot kernel ketika kita menginginkan fungsi terbaru di dalamnya.

START
-----

Modul kernel seharusnya memiliki setidaknya 2fungsi utama,yaitu :
"start"(initialisasi) untuk pemanggilan fungsi terhadap init_module()
dan pemanggilan fungsi cleanup_module()
fungsi tersebut biasanya di panggil oleh module insmodded ke dalam kernel tadi sesaat sebelum
rmmoded di jalankan,dan menggunakan init_module() dan cleanup_module() untuk memulai dan mengakhiri fungsinya
(untuk lebih jelasnya tentang insmodded dan rmmoded silahkan bergoogling)
biasanya,init_module() di gunakan untuk register handler langsung dengan kernel atau mengganti salah satu
fungsi kernel dengan kode itu sendiri (tetap melakukan pemanggilan fungsi asli)
setiap modul kernel di haruskan menyertakan linux/module.h
guna ekspansi makro yang akan menyempurnakan perintah printk()log level
dan KERN_ALERT

berikut contoh kodingan simple untuk kernel module

#include <linux/module.h>
#include <linux/kernel.h>

int init_module(void)
{
printk(KERN_INFO "hai unyu\n");
return 0;
}
void cleanup_module(void)
{
printk(KERN_INFO "fufufu\n");
}
coba simpan dengan nama semu.c

cara kompilenya pun sedikit berbeda dari aplikasi userspace biasa
yang disimpan dalam Makefile,walaupun sedikit nampak terorganisir,pengaturan berlebihan yang banyak
terakumulasi dalam sublevel Makefiles yang cukup besar memakan memory userspace.

sekarang mari kita mencoba kompilasi code program dengan perintah :
obj-m += semu.o
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

lalu ketikan perintah :
alessa@nullsoft:~/lkm# make

dan akan menampilkan output,seperti berikut :

make −C /lib/modules/2.6.11/build M=/root/lkm modules
make[1]: Entering directory `/usr/src/linux-headers-2.6.35-22'
CC [M] /root/lkm/semu.c
Building modules, stage 2.
MODPOST

pemanggilan kbuild dan build adalah proses untuk modul loadable eksternal yang
sekarang adalah sepenuhnya terintegrasi dalam kernel standar untuk membangun mekanisme kerjanya
0.00 / 0 votes

In order to comment, please sign in

Comments


Loading

Testimonials


User Menu