Menulis Linux Device Driver – Hello World

Linux Device Driver (LDD) adalah sebuah istilah untuk kumpulan kode bagian dari Linux kernel yang menangani perilaku perangkat keras. LDD memberikan fasilitas komunikasi antara CPU dan hardware, demikian juga perantara bagi pengguna untuk mengakses perangkat keras.

Seperti kita ketahui perangkat keras di sekitar kita; hard disk, CD/DVD-ROM, USB drive, kartu suara PCI, Perangkat nirkabel, USB, dll. Masing-masing perangkat keras tersebut memiliki driver tersendiri yang mendukung sebuah sistem agar bekerja dengan baik.

Sebuah kernel module paling sederhana setidaknya memiliki dua method untuk mendaftarkan dan membatalkan ke dan dari kernel. Method tersebut harus diinisialisasi dengan module_init untuk pendaftaran, dan module_exit untuk pembatalan. Dua method itulah yang akan dipanggil oleh Linux kernel ketika sebuah module didaftarkan atau dibatalkan

Mari kita mulai dari kode paling mudah, yaitu Hello World yang tanpa dukungan file operations apa pun. Kita hanya ingin mendaftarkan kernel module yang kita buat, lalu load dengan perintah insmod. Kita cukup menambahi beberapa baris kode agar sebuah kernel module dapat bekerja. Mari perhatikan contoh berikut:

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

static int __init device_init(void)
{
        printk(KERN_INFO "Hello World!");
        return SUCCESS;
}
module_init(device_init);

static void __exit device_exit(void)
{
        printk(KERN_INFO "Bye World!");
}
module_exit(device_exit);

MODULE_AUTHOR("Si Lutung Kode");
MODULE_DESCRIPTION("Hello World");
MODULE_LICENSE("GPL");

Kita bangun kode di atas menggunakan Makefile sebagai berikut:

obj-m += file.o
all:
        make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

Setelah kompilasi, kita akan dapati file.ko untuk kemudia didaftarkan ke kernel dengan perintah `insmod’ dan untuk membatalkan dengan perintah `rmmod’, lalu cek output dari `dmesg’

$ sudo insmod file.ko # Insmod
$ sudo rmmod file.ko # rmmod
$ dmesg | tail
[  105.342397] UDF-fs: Partition marked readonly; forcing ....
[  105.398935] UDF-fs INFO UDF 0.9.8.1 (2004/29/09) ....
:
:
[ 5480.313264] Hello World!<6>Bye World!

Baris output dari perintah dmesg di atas menunjukkan bahwa kernel module buatan kita telah berhasil didaftarkan ke sistem yang sedang berjalan. Hanya itu saja.

Sangat mudah bukan? Berikut hal yang kita pelajari saat ini:

  1. Struktur paling sederhana kernel module
  2. Header file utama dalam sebuah kernel module
  3. Makefile untuk sebuah kernel module
  4. Perintah dmesg untuk mengetahui output dari kernel
Pos ini dipublikasikan di Linux dan tag , , , , , . Tandai permalink.

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s