OS: Kernel Module & Device Driver Dasar
Mengapa Kernel Module Penting?
Kernel Linux dirancang sebagai monolithic kernel yang bersifat modular. Artinya, walaupun kernel berjalan sebagai satu kesatuan di kernel space, banyak fungsinya dapat ditambahkan atau dilepas secara dinamis melalui kernel module.
Pendekatan ini memungkinkan sistem:
- Lebih fleksibel
- Lebih ringan
- Lebih mudah dikembangkan
Sebagaimana dijelaskan sebelumnya, kernel module merupakan mekanisme resmi Linux untuk memperluas kemampuan kernel tanpa harus reboot atau me-recompile kernel utama .
Dalam konteks pendidikan, modul kernel adalah titik masuk paling aman untuk memahami device driver dan interaksi user space ↔ kernel space.
Konsep Dasar Kernel Module
Apa itu Kernel Module?
Kernel module adalah potongan kode yang:
- Berjalan di kernel space
- Memiliki hak akses penuh ke hardware
- Dapat dimuat (insert) dan dilepas (remove) saat sistem berjalan
Contoh modul kernel:
- Driver USB
- Driver filesystem (NTFS, FAT)
- Driver network
- Modul monitoring kernel
Karakteristik penting:
- Kesalahan kecil dapat menyebabkan kernel panic
- Debugging lebih sulit dibanding aplikasi biasa
- Namun sangat bernilai edukatif
Kernel Space vs User Space
Perbedaan fundamental:
- User space → aplikasi biasa (bash, nano, python)
- Kernel space → kernel & module
Kernel module:
- Tidak menggunakan glibc
- Tidak boleh menggunakan fungsi user space
- Hanya menggunakan API kernel
Inilah alasan modul kernel tidak bisa di-debug seperti program C biasa.
Kernel Module Lifecycle
Tahapan Lifecycle Module
Siklus hidup modul kernel meliputi :
- Compile module
- Insert (load) module
- Module aktif di kernel
- Remove (unload) module
- Kernel kembali ke kondisi awal
Lifecycle ini memungkinkan mahasiswa mengamati langsung perubahan perilaku kernel secara real-time.
Struktur Dasar Kernel Module
Sebuah modul kernel minimal memiliki:
- Fungsi init
- Fungsi exit
- Metadata modul
Praktik: Membuat Kernel Module Sederhana
Persiapan Lingkungan
Pastikan kernel headers sesuai kernel aktif.
uname -r sudo apt install -y linux-headers-$(uname -r)
Headers harus cocok dengan kernel yang sedang berjalan, termasuk kernel custom.
Contoh Source Code Module Sederhana
Buat file hello_module.c:
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Mahasiswa ITTS");
MODULE_DESCRIPTION("Kernel Module Pertama");
MODULE_VERSION("1.0");
static int __init hello_init(void) {
printk(KERN_INFO "Hello: Kernel module berhasil dimuat\n");
return 0;
}
static void __exit hello_exit(void) {
printk(KERN_INFO "Goodbye: Kernel module dilepas\n");
}
module_init(hello_init);
module_exit(hello_exit);
Penjelasan penting:
- MODULE_LICENSE("GPL") → wajib agar kernel tidak menandai modul sebagai tainted
- printk() → setara printf, tetapi untuk kernel
Makefile Kernel Module
Buat Makefile:
obj-m += hello_module.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
Compile Kernel Module
make
Hasil:
hello_module.ko
Ekstensi .ko berarti kernel object.
Insert & Remove Kernel Module
Insert (Load) Module
sudo insmod hello_module.ko
Verifikasi:
lsmod | grep hello
Remove (Unload) Module
sudo rmmod hello_module
Verifikasi ulang:
lsmod | grep hello
Menggunakan modprobe (Lebih Aman)
sudo modprobe hello_module sudo modprobe -r hello_module
modprobe otomatis menangani dependency modul.
Logging & Debugging Kernel Module
printk dan Kernel Log
printk() adalah mekanisme logging utama di kernel.
Level umum:
KERN_INFO KERN_WARNING KERN_ERR
Melihat Log Kernel
dmesg | tail
Atau real-time:
sudo dmesg -w
Contoh output:
Hello: Kernel module berhasil dimuat Goodbye: Kernel module dilepas
Debugging Dasar
Teknik debugging yang dianjurkan:
- Tambahkan printk di beberapa titik
- Gunakan level log berbeda
- Load & unload berulang
Dalam kernel development, log adalah alat debugging utama, bukan debugger GUI.
Hubungan Kernel Module & Device Driver
Sebagian besar device driver Linux:
- Ditulis sebagai kernel module
- Mengimplementasikan interface:
- Character device
- Block device
- Network device
Modul sederhana pada bab ini menjadi fondasi langsung untuk:
- Driver LED
- Driver GPIO
- Driver pseudo-device
Inilah alasan bab ini ditempatkan sebelum praktik device driver lanjutan.
Risiko & Best Practice
Risiko kernel module:
- Kernel panic
- Sistem freeze
- Data corruption
Best practice akademik:
- Gunakan VM
- Simpan kernel lama
- Jangan eksperimen di sistem produksi
- Gunakan log, bukan asumsi
Refleksi Akademik & OBE
Setelah bab ini, mahasiswa:
- Memahami mekanisme ekstensi kernel
- Mampu membuat & mengelola modul kernel
- Memiliki mindset low-level system engineer
Filosofy, menulis kernel module adalah langkah awal untuk memahami device driver dan OS engineering secara nyata, bukan sekadar teori .
Challenge Mandiri (Fun & Menantang)
- Tambahkan versi & author berbeda
- Tambahkan counter load/unload
- Gunakan beberapa level printk
- Uji modul pada kernel custom hasil PRAKTIK