OS: Kernel Module & Device Driver Dasar

From OnnoWiki
Revision as of 08:20, 14 February 2026 by Onnowpurbo (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

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

Pranala Menarik