不免俗的,我們也以 "Hello World" 來作為 kernel module 程式設計的第一個嘗試:
/*
* hello-1.c - The simplest kernel module.
*/
#include <linux/module.h> /* Needed by all modules */
#include <linux/kernel.h> /* Needed for KERN_INFO */
int init_module(void)
{
printk(KERN_INFO "Hello world 1.\n");
/*
* A non 0 return means init_module failed; module can't be loaded.
*/
return 0;
}
void cleanup_module(void)
{
printk(KERN_INFO "Goodbye world 1.\n");
}
一個標準的 Linux kernel module 至少包含兩個函數,分別代表起始 (載入) 時與結束 (卸載) 時的兩個動作: init_module() 與 cleanup_module()。函數中,僅執行的一條最簡單的動作,就是透過 printk() 函數印出 "Hello world" 與 "Goodbye world"。而程式起頭所 include 的的兩個函式庫,一是每個 kernel module 都需要的 linux/module.h,另一個是在 printk() 函數中定義 log level 巨集 (KERN_INFO) 所需要的 linux/kernel.h。從表面上來看,這支 hello-1.c kernel module 程式會在載入 kernel 時在系統 log (/var/log/messages) 中印出 "Hello world 1.”,而在由 kernel 中卸載時印出 "Goodbye world 1." 到 log 中。