以文本方式查看主題 - 曙海教育集團(tuán)論壇 (http://www.xinguifushi.cn/bbs/index.asp) -- Linux驅(qū)動(dòng)開發(fā) (http://www.xinguifushi.cn/bbs/list.asp?boardid=33) ---- Linux驅(qū)動(dòng)開發(fā)學(xué)習(xí)筆記(1):LINUX驅(qū)動(dòng)版本的hello world (http://www.xinguifushi.cn/bbs/dispbbs.asp?boardid=33&id=1728) |
-- 作者:wangxinxin -- 發(fā)布時(shí)間:2010-11-24 11:15:17 -- Linux驅(qū)動(dòng)開發(fā)學(xué)習(xí)筆記(1):LINUX驅(qū)動(dòng)版本的hello world 終于下決心好好學(xué)習(xí)LINUX內(nèi)核和驅(qū)動(dòng)開發(fā)了,不怕千萬人恥笑,勇敢將自己的學(xué)習(xí)過程寫出來: 1、關(guān)于目錄 /lib/modules/2.6.9-42.ELsmp/build/ 這個(gè)是內(nèi)核源碼所在的目錄 一般使用這樣的命令進(jìn)入這個(gè)目錄:cd /lib/modules/$(uname -r)/build/ 這個(gè)目錄實(shí)際上指向了:/usr/src/kernels/2.6.9-42.EL-smp-i686 2、編譯驅(qū)動(dòng)所使用的makefile 實(shí)際上編譯驅(qū)動(dòng)的時(shí)候是使用預(yù)先提供的一個(gè)makefile的,位置在: /lib/modules/$(uname -r)/build/Makefile 注意:M是大寫的 3、網(wǎng)上抄錄的Linux驅(qū)動(dòng)Hello world的源碼: // hello.c #include <linux/init.h> #include <linux/module.h> MODULE_LICENSE("Dual BSD/GPL"); static int hello_init(void) { printk(KERN_ALERT "hello world!\\n"); return 0; } static void hello_exit(void) { printk(KERN_ALERT "goodbye!\\n"); } module_init(hello_init); module_exit(hello_exit); 4、寫個(gè)makefile來編譯這個(gè)驅(qū)動(dòng):(版本一,最簡單的) #下面這行是文件Makefile的內(nèi)容,注意M是大寫的 obj-m := hello.o 把hello.c和Makefile保存在同一目錄,然后執(zhí)行: make -C /lib/modules/`uname -r`/build SUBDIRS=$PWD modules 這樣驅(qū)動(dòng)就編譯好了,成果是hello.ko文件。 注意:makefile一定要寫成Makefile,如果寫成makefile就編譯不過。(折騰啊,就這一步耗了N多時(shí)間) 5、再寫另一種Makefile:(版本二:最省事的) #以下是Makefile文件的內(nèi)容 obj-m := hello.o KERNEL_DIR := /lib/modules/$(shell uname -r)/build PWD := $(shell pwd) all: make -C $(KERNEL_DIR) SUBDIRS=$(PWD) modules clean: rm *.o *.ko 然后執(zhí)行:make就編譯成功了,命令行不再加參數(shù),很省事。 注意:all: 和clean:下面的行,前面是一個(gè)TAB鍵 6、加載驅(qū)動(dòng): 執(zhí)行 insmod ./hello.ko 屏幕上沒反應(yīng)。(因?yàn)槲沂窃赪INDOWS上用遠(yuǎn)程終端連上去的嘛) OK,先讓時(shí)光倒流,回到加載驅(qū)動(dòng)以前,先另開一個(gè)窗口,執(zhí)行: tail -f /var/log/message 然后在原來的窗口里執(zhí)行: insmod ./hello.ko 哈哈,/var/log/message文件里面看見了盼望已久的hello world! 7、查看驅(qū)動(dòng): lsmod 看見 hello這個(gè)驅(qū)動(dòng)在其中 8、卸載驅(qū)動(dòng): rmmod hello 看見/var/log/message里顯示了goodbye |