Linux Driver(1) - 最簡單的hello world範例要注意,大小寫有差別,如果是makefile,系統會不認帳的)。hello.c的內容:#include <linux/init.h>#include <linux/module.h>MODULE_LICENSE("Dual BSD/GPL");static int hello_init(void){    printk(KERN_INFO 裝潢"Hello, kernel\n");    return 0;}static void hello_exit(void){    printk(KERN_INFO "Goodbye\n");}module_init(hello_init);module_exit(hello_exit);說明:MODULE_LICENSE是讓kernel知道此module遵守GPL,如果沒有這項宣告的話,戴入模式時澎湖民宿,kernel會向你抱怨。你可能會得到以下的內容hello: module license 'unspecified' taints kernel.Disabling lock debugging due to kernel taintmodule_init,這是在module載入時的函式,我們寫在hello_init,通常用來做初始化的工作。module_exit,這是在module卸載時的函式,我們寫在hello_exit小額信貸,通常用來做清理的工作。 Makefile的內容:## Makefile for kernel test #MODULE_NAME  = helloKVERSION := $(shell uname -r)KERNEL_DIR = /usr/src/kernels/$(KVERSION)/obj-m       := $(MODULE_NAME).o    all:    make -C 酒店打工$(KERNEL_DIR) M=$(PWD) modules    insmod $(MODULE_NAME).ko    $(PRINT_MESSAGE)clean:    rmmod $(MODULE_NAME)     make -C $(KERNEL_DIR) M=$(PWD) clean    $(PRINT_MESSAGE)    define 賣屋PRINT_MESSAGE    @echo --------Message--------    @dmesg | tailendef說明:使用:輸入make,建置module;輸入make clean,清除建置後產生的檔案。 obj-m,這個語法對於make有點特別,這是GNU make的擴充語法,它的意思是說有一個module要從目的碼檔hello.o建構出來,所產禮服生的模組檔是hello.ko。 接下來主要的是 make -C [你的Kernel的目錄] M=[你的Module的目錄] modules。這命令一開始會先切換到你的Kernel的目錄,這是為了在這地方找到Kernel目錄下的Makefile,而M=主要是指module的目錄,在這裡開始建構hello.o和我們等下載入要用的hello.ko,最後離開Kernel的目錄。結婚西裝make -C [你的Kernel的目錄] M=[你的Module的目錄] clean就簡單多了,清除你建立的東西。我們使用insmod 來載入 hello.ko,用rmmod 移除 hello,並印出相關程式中輸出的訊息。下面是執行的過程及結果: [root@hughes KernelSample]# make make -C /usr/src/kernels/2.6.33.3-85.fc13.i686.PAE/ 酒店工作M=/root/workspace/KernelSample modules make[1]: Entering directory `/usr/src/kernels/2.6.33.3-85.fc13.i686.PAE'   CC [M]  /root/workspace/KernelSample/hello.o   Building modules, stage 2.   MODPOST 1 modules   CC      賣屋/root/workspace/KernelSample/hello.mod.o   LD [M]  /root/workspace/KernelSample/hello.ko make[1]: Leaving directory `/usr/src/kernels/2.6.33.3-85.fc13.i686.PAE' insmod hello.ko --------Message-------- Hello, kernel


.msgcontent .wsharing ul li { text-indent: 0; 賣房子}



分享

Facebook
Plurk
YAHOO!

arrow
arrow
    全站熱搜

    ro65rotjtz 發表在 痞客邦 留言(0) 人氣()