Difference between revisions of "OS: PRAKTIKUM — Kernel Module Lab"

From OnnoWiki
Jump to navigation Jump to search
(Created page with "PRAKTIKUM 5 — Kernel Module Lab Tujuan Praktikum ini merupakan kelanjutan langsung dari BAB 8, dan berfungsi sebagai laboratorium eksplorasi kernel secara nyata. Pada tahap...")
 
 
(One intermediate revision by the same user not shown)
Line 1: Line 1:
PRAKTIKUM 5 — Kernel Module Lab
+
==Tujuan==
Tujuan
+
Praktikum ini merupakan kelanjutan langsung dari sebelumnya, dan berfungsi sebagai laboratorium eksplorasi kernel secara nyata. Pada tahap ini, mahasiswa tidak lagi hanya memahami konsep, tetapi mengamati langsung perilaku kernel Linux ketika sebuah kernel module dimuat dan dilepas.
Praktikum ini merupakan kelanjutan langsung dari BAB 8, dan berfungsi sebagai laboratorium eksplorasi kernel secara nyata. Pada tahap ini, mahasiswa tidak lagi hanya memahami konsep, tetapi mengamati langsung perilaku kernel Linux ketika sebuah kernel module dimuat dan dilepas.
+
 
 
Setelah menyelesaikan praktikum ini, mahasiswa diharapkan mampu:
 
Setelah menyelesaikan praktikum ini, mahasiswa diharapkan mampu:
Membangun kernel module sederhana
+
* Membangun kernel module sederhana
Melakukan load dan unload module secara aman
+
* Melakukan load dan unload module secara aman
Mengamati perubahan perilaku kernel
+
* Mengamati perubahan perilaku kernel
Menganalisis log kernel sebagai alat observasi utama
+
* Menganalisis log kernel sebagai alat observasi utama
 
Praktikum ini menanamkan mindset penting:
 
Praktikum ini menanamkan mindset penting:
 
kernel development = observasi + log + eksperimen terkontrol, bukan trial-and-error sembarangan.
 
kernel development = observasi + log + eksperimen terkontrol, bukan trial-and-error sembarangan.
Konteks Akademik Kernel Module Lab
+
 
 +
==Konteks Akademik Kernel Module Lab==
 
Dalam buku ini dijelaskan bahwa kernel module adalah mekanisme resmi Linux untuk mengembangkan kernel secara bertahap tanpa reboot .
 
Dalam buku ini dijelaskan bahwa kernel module adalah mekanisme resmi Linux untuk mengembangkan kernel secara bertahap tanpa reboot .
 +
 
Oleh karena itu, lab ini dirancang agar mahasiswa:
 
Oleh karena itu, lab ini dirancang agar mahasiswa:
Melihat kernel sebagai sistem dinamis
+
* Melihat kernel sebagai sistem dinamis
Memahami bahwa setiap modul mempengaruhi state kernel
+
* Memahami bahwa setiap modul mempengaruhi state kernel
Belajar membaca kernel log sebagai sumber kebenaran utama
+
* Belajar membaca kernel log sebagai sumber kebenaran utama
Build Kernel Module Sederhana
+
* Build Kernel Module Sederhana
Persiapan Lingkungan
+
 
 +
==Persiapan Lingkungan==
 
Pastikan kernel header sesuai dengan kernel yang sedang berjalan (termasuk kernel custom hasil PRAKTIK 4).
 
Pastikan kernel header sesuai dengan kernel yang sedang berjalan (termasuk kernel custom hasil PRAKTIK 4).
uname -r
+
uname -r
sudo apt install -y linux-headers-$(uname -r)
+
sudo apt install -y linux-headers-$(uname -r)
 
Header kernel adalah “jembatan” antara source module dan kernel aktif.
 
Header kernel adalah “jembatan” antara source module dan kernel aktif.
Membuat Direktori Praktikum
 
mkdir -p ~/kernel-module-lab
 
cd ~/kernel-module-lab
 
  
 +
==Membuat Direktori Praktikum==
 +
mkdir -p ~/kernel-module-lab
 +
cd ~/kernel-module-lab
 +
 +
==Source Code Kernel Module Sederhana==
  
Source Code Kernel Module Sederhana
 
 
Buat file lab_module.c:
 
Buat file lab_module.c:
 +
 +
<pre><nowiki>
 
#include <linux/module.h>
 
#include <linux/module.h>
 
#include <linux/kernel.h>
 
#include <linux/kernel.h>
Line 63: Line 69:
 
clean:
 
clean:
 
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
 
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
 +
</nowiki></pre>
  
 
Compile Kernel Module
 
Compile Kernel Module
  
make
+
make
 +
 
 
Hasil yang diharapkan:
 
Hasil yang diharapkan:
lab_module.ko
+
 
 +
lab_module.ko
 +
 
 
File .ko adalah objek biner yang siap dimuat ke kernel.
 
File .ko adalah objek biner yang siap dimuat ke kernel.
Load & Unload Kernel Module
+
 
 +
==Load & Unload Kernel Module==
 
Load (Insert) Module
 
Load (Insert) Module
  
sudo insmod lab_module.ko
+
sudo insmod lab_module.ko
 +
 
 
Verifikasi:
 
Verifikasi:
lsmod | grep lab
+
 
 +
lsmod | grep lab
 +
 
 
Jika muncul → modul berhasil dimuat.
 
Jika muncul → modul berhasil dimuat.
Unload (Remove) Module
 
  
sudo rmmod lab_module
+
==Unload (Remove) Module==
 +
 
 +
sudo rmmod lab_module
 +
 
 
Verifikasi ulang:
 
Verifikasi ulang:
lsmod | grep lab
+
 
 +
lsmod | grep lab
 +
 
 
Load dan unload berulang adalah teknik belajar utama dalam kernel lab.
 
Load dan unload berulang adalah teknik belajar utama dalam kernel lab.
Menggunakan modprobe (Opsional)
+
 
 +
==Menggunakan modprobe (Opsional)==
 
Untuk pendekatan yang lebih aman:
 
Untuk pendekatan yang lebih aman:
sudo modprobe lab_module
+
 
sudo modprobe -r lab_module
+
sudo modprobe lab_module
 +
sudo modprobe -r lab_module
 +
 
 
modprobe otomatis menangani dependency modul.
 
modprobe otomatis menangani dependency modul.
  
Observasi Behavior Kernel
+
==Observasi Behavior Kernel==
Konsep Observasi Kernel
+
===Konsep Observasi Kernel===
 
Kernel tidak memiliki UI. Oleh karena itu:
 
Kernel tidak memiliki UI. Oleh karena itu:
Semua observasi dilakukan melalui log
+
* Semua observasi dilakukan melalui log
Perubahan state kernel harus disimpulkan dari output sistem
+
* Perubahan state kernel harus disimpulkan dari output sistem
 
Inilah perbedaan mendasar antara kernel engineering dan application development.
 
Inilah perbedaan mendasar antara kernel engineering dan application development.
Observasi Menggunakan Kernel Log
+
 
 +
===Observasi Menggunakan Kernel Log===
 
Lihat log terakhir:
 
Lihat log terakhir:
dmesg | tail
+
dmesg | tail
 
Contoh output:
 
Contoh output:
[LAB] Module dimuat ke kernel
+
[LAB] Module dimuat ke kernel
[LAB] Module dilepas dari kernel
+
[LAB] Module dilepas dari kernel
Observasi Real-Time
 
  
sudo dmesg -w
+
===Observasi Real-Time===
 +
sudo dmesg -w
 
Kemudian, di terminal lain:
 
Kemudian, di terminal lain:
sudo insmod lab_module.ko
+
sudo insmod lab_module.ko
sudo rmmod lab_module
+
sudo rmmod lab_module
 
Mahasiswa dapat melihat event kernel secara real-time.
 
Mahasiswa dapat melihat event kernel secara real-time.
Observasi Sederhana Melalui Log
+
 
 +
===Observasi Sederhana Melalui Log===
 
Menambahkan Log Lebih Detail
 
Menambahkan Log Lebih Detail
 
Ubah source code:
 
Ubah source code:
printk(KERN_INFO "[LAB] Init dipanggil pada jiffies=%lu\n", jiffies);
+
printk(KERN_INFO "[LAB] Init dipanggil pada jiffies=%lu\n", jiffies);
 
Dan saat exit:
 
Dan saat exit:
printk(KERN_INFO "[LAB] Exit dipanggil pada jiffies=%lu\n", jiffies);
+
printk(KERN_INFO "[LAB] Exit dipanggil pada jiffies=%lu\n", jiffies);
 
Recompile:
 
Recompile:
make clean
+
make clean
make
+
make
Analisis Akademik Sederhana
+
 
 +
==Analisis Akademik Sederhana==
 
Dari log, mahasiswa dapat:
 
Dari log, mahasiswa dapat:
Mengamati urutan eksekusi
+
* Mengamati urutan eksekusi
Membandingkan waktu load dan unload
+
* Membandingkan waktu load dan unload
Melihat bahwa kernel menjalankan kode module secara deterministik
+
* Melihat bahwa kernel menjalankan kode module secara deterministik
 
Ini adalah langkah awal observasi performa kernel.
 
Ini adalah langkah awal observasi performa kernel.
Kesalahan Umum & Mitigasi
+
 
 +
==Kesalahan Umum & Mitigasi==
 
Kesalahan umum mahasiswa:
 
Kesalahan umum mahasiswa:
Header kernel tidak cocok
+
* Header kernel tidak cocok
Lupa MODULE_LICENSE
+
* Lupa MODULE_LICENSE
Salah versi kernel
+
* Salah versi kernel
 
Mitigasi:
 
Mitigasi:
Selalu cek uname -r
+
* Selalu cek uname -r
Gunakan VM
+
* Gunakan VM
Jangan eksperimen di sistem produksi
+
* Jangan eksperimen di sistem produksi
Refleksi Akademik & OBE
+
 
 +
==Refleksi Akademik & OBE==
 
Praktikum ini secara langsung memenuhi capaian:
 
Praktikum ini secara langsung memenuhi capaian:
Kernel Tinkerer → memahami lifecycle modul
+
* Kernel Tinkerer → memahami lifecycle modul
Low-Level Observer → membaca log kernel
+
* Low-Level Observer → membaca log kernel
System Engineer Mindset → observasi berbasis data
+
* System Engineer Mindset → observasi berbasis data
 
Filosofi, kernel harus diamati, bukan ditebak, dan kernel module lab adalah sarana paling aman untuk itu .
 
Filosofi, kernel harus diamati, bukan ditebak, dan kernel module lab adalah sarana paling aman untuk itu .
Challenge Mandiri (Fun & Menantang)
 
Tambahkan counter load/unload
 
Tambahkan log level berbeda (KERN_WARNING)
 
Jalankan modul di kernel custom
 
Dokumentasikan hasil observasi dalam tabel
 
 
  
 +
==Challenge Mandiri (Fun & Menantang)==
 +
* Tambahkan counter load/unload
 +
* Tambahkan log level berbeda (KERN_WARNING)
 +
* Jalankan modul di kernel custom
 +
* Dokumentasikan hasil observasi dalam tabel
  
 
==Pranala Menarik==
 
==Pranala Menarik==
  
 
* [[Sistem operasi]]
 
* [[Sistem operasi]]

Latest revision as of 08:05, 14 February 2026

Tujuan

Praktikum ini merupakan kelanjutan langsung dari sebelumnya, dan berfungsi sebagai laboratorium eksplorasi kernel secara nyata. Pada tahap ini, mahasiswa tidak lagi hanya memahami konsep, tetapi mengamati langsung perilaku kernel Linux ketika sebuah kernel module dimuat dan dilepas.

Setelah menyelesaikan praktikum ini, mahasiswa diharapkan mampu:

  • Membangun kernel module sederhana
  • Melakukan load dan unload module secara aman
  • Mengamati perubahan perilaku kernel
  • Menganalisis log kernel sebagai alat observasi utama

Praktikum ini menanamkan mindset penting: kernel development = observasi + log + eksperimen terkontrol, bukan trial-and-error sembarangan.

Konteks Akademik Kernel Module Lab

Dalam buku ini dijelaskan bahwa kernel module adalah mekanisme resmi Linux untuk mengembangkan kernel secara bertahap tanpa reboot .

Oleh karena itu, lab ini dirancang agar mahasiswa:

  • Melihat kernel sebagai sistem dinamis
  • Memahami bahwa setiap modul mempengaruhi state kernel
  • Belajar membaca kernel log sebagai sumber kebenaran utama
  • Build Kernel Module Sederhana

Persiapan Lingkungan

Pastikan kernel header sesuai dengan kernel yang sedang berjalan (termasuk kernel custom hasil PRAKTIK 4).

uname -r
sudo apt install -y linux-headers-$(uname -r)

Header kernel adalah “jembatan” antara source module dan kernel aktif.

Membuat Direktori Praktikum

mkdir -p ~/kernel-module-lab
cd ~/kernel-module-lab

Source Code Kernel Module Sederhana

Buat file lab_module.c:

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

MODULE_LICENSE("GPL");
MODULE_AUTHOR("Mahasiswa Sistem Operasi");
MODULE_DESCRIPTION("Kernel Module Lab - Praktik 5");
MODULE_VERSION("1.0");

static int __init lab_init(void)
{
    printk(KERN_INFO "[LAB] Module dimuat ke kernel\n");
    return 0;
}

static void __exit lab_exit(void)
{
    printk(KERN_INFO "[LAB] Module dilepas dari kernel\n");
}

module_init(lab_init);
module_exit(lab_exit);
Penjelasan akademik singkat:
MODULE_LICENSE("GPL") → mencegah kernel tainted
printk() → mekanisme logging kernel
__init / __exit → penanda fase lifecycle modul
Makefile Kernel Module
Buat file Makefile:
obj-m += lab_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 yang diharapkan:

lab_module.ko

File .ko adalah objek biner yang siap dimuat ke kernel.

Load & Unload Kernel Module

Load (Insert) Module

sudo insmod lab_module.ko

Verifikasi:

lsmod | grep lab

Jika muncul → modul berhasil dimuat.

Unload (Remove) Module

sudo rmmod lab_module

Verifikasi ulang:

lsmod | grep lab

Load dan unload berulang adalah teknik belajar utama dalam kernel lab.

Menggunakan modprobe (Opsional)

Untuk pendekatan yang lebih aman:

sudo modprobe lab_module
sudo modprobe -r lab_module

modprobe otomatis menangani dependency modul.

Observasi Behavior Kernel

Konsep Observasi Kernel

Kernel tidak memiliki UI. Oleh karena itu:

  • Semua observasi dilakukan melalui log
  • Perubahan state kernel harus disimpulkan dari output sistem

Inilah perbedaan mendasar antara kernel engineering dan application development.

Observasi Menggunakan Kernel Log

Lihat log terakhir:

dmesg | tail

Contoh output:

[LAB] Module dimuat ke kernel
[LAB] Module dilepas dari kernel

Observasi Real-Time

sudo dmesg -w

Kemudian, di terminal lain:

sudo insmod lab_module.ko
sudo rmmod lab_module

Mahasiswa dapat melihat event kernel secara real-time.

Observasi Sederhana Melalui Log

Menambahkan Log Lebih Detail Ubah source code:

printk(KERN_INFO "[LAB] Init dipanggil pada jiffies=%lu\n", jiffies);

Dan saat exit:

printk(KERN_INFO "[LAB] Exit dipanggil pada jiffies=%lu\n", jiffies);

Recompile:

make clean
make

Analisis Akademik Sederhana

Dari log, mahasiswa dapat:

  • Mengamati urutan eksekusi
  • Membandingkan waktu load dan unload
  • Melihat bahwa kernel menjalankan kode module secara deterministik

Ini adalah langkah awal observasi performa kernel.

Kesalahan Umum & Mitigasi

Kesalahan umum mahasiswa:

  • Header kernel tidak cocok
  • Lupa MODULE_LICENSE
  • Salah versi kernel

Mitigasi:

  • Selalu cek uname -r
  • Gunakan VM
  • Jangan eksperimen di sistem produksi

Refleksi Akademik & OBE

Praktikum ini secara langsung memenuhi capaian:

  • Kernel Tinkerer → memahami lifecycle modul
  • Low-Level Observer → membaca log kernel
  • System Engineer Mindset → observasi berbasis data

Filosofi, kernel harus diamati, bukan ditebak, dan kernel module lab adalah sarana paling aman untuk itu .

Challenge Mandiri (Fun & Menantang)

  • Tambahkan counter load/unload
  • Tambahkan log level berbeda (KERN_WARNING)
  • Jalankan modul di kernel custom
  • Dokumentasikan hasil observasi dalam tabel

Pranala Menarik