OS: Kernel Module & Device Driver Dasar
BAB 8. Kernel Module & Device Driver Dasar Pengantar: 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 dalam sistem-operasi-3.pdf, 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