iT邦幫忙

DAY 3
0

Linux kernel模組的開發系列 第 3

Hello World - Linux kernel module.

不免俗的,我們也以 "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 中。


上一篇
Kernel module 載入的程序
下一篇
編譯 Linux kernel module
系列文
Linux kernel模組的開發30

尚未有邦友留言

立即登入留言