[Linux Kernel] 撰寫簡單 Hello, World module (part 1).

來筆記如何在 Kernel 撰寫 hello world! module,在 Ubuntu Kernel 2.6.31-14 環境下撰寫,其實不難啦,首先先進入 Kernel 目錄,請在 /usr/src 底下看自己的系統版本,或者是利用 uname -r 來知道 Kernel 版本,底下是在 Ubuntu Kernel 2.6.31-14 Kernel 實做:

進入 Kernel 目錄

#
# cd Kernel directory
#
cd /usr/src/linux-headers-2.6.31-14-generic-pae

建立 hello 目錄

#
# mkdir directory
#
mkdir hello

建立 Makfile 以及 hello.c hello.c:

#include  /* pr_info 所需 include 檔案*/
#include 
#include  /* 所有 module 需要檔案*/
#include 

MODULE_DESCRIPTION("Hello World !!");
MODULE_AUTHOR("Bo-Yi Wu ");
MODULE_LICENSE("GPL");

static int __init hello_init(void)
{
    pr_info("Hello, world\n");
    pr_info("The process is \"%s\" (pid %i)\n", current->comm, current->pid);
    return 0;
}

static void __exit hello_exit(void)
{
    printk(KERN_INFO "Goodbye\n");
}

module_init(hello_init);
module_exit(hello_exit);
Makefile:
#
# Makefile by appleboy 
#
obj-m       += hello.o
KVERSION := $(shell uname -r)

all:
    $(MAKE) -C /lib/modules/$(KVERSION)/build M=$(PWD) modules

clean:
    $(MAKE) -C /lib/modules/$(KVERSION)/build M=$(PWD) clean
之後只要切換到 hello 目錄,直接打 make 就可以產生出 hello.ko 檔案,直接載入 hello.ko 方式:
insmod ./hello.ko
移除 hello.ko
rmmod ./hello.ko
之後到 /var/log/message 底下就可以看到訊息:

Kernel Hello World


See also