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!
.msgcontent .wsharing ul li { text-indent: 0; 賣房子}
分享
Plurk
YAHOO!
全站熱搜
留言列表