我們的源程式是乙個簡單的程式:#include
#include
module_license("dual bsd/gpl");
static int hello_init(void)
static void hello_exit(void)
module_init(hello_init);
module_exit(hello_exit);
在編譯核心模組時,如有makefile檔案如下:
ifneq ($(kernelrelease),)
obj-m := hello.o
else
kdir := /lib/modules/$(shell uname -r)/build
pwd :=$(shell pwd)
default:
make -c $(kdir) m=$(pwd) modules
clean:
make -c $(kdir) m=$(pwd) clean
endif
kernelrelease是在核心原始碼的頂層makefile中定義的乙個變數,在第一次讀取執行此makefile時,kernelrelease
沒有被定義,所以make將讀取執行else之後的內容,如果make的目標是clean,直接執行clean操作,然後結束。
當make的目標為default時,/lib/modules/$(shell uname -r)/build是乙個指向核心源**/usr/src/linux的符號連線,
-c $(kdir)指明跳轉到核心原始碼目錄下讀取那裡的makefile;m=$(pwd) 表明在構造modules時,
返回到模組源**目錄,然後,modules目標指定obj-m變數中設定的模組。當從核心原始碼目錄返回時,kernelrelease已被定義,kbuild也被啟動去解析
kbuild語法的語句,make將繼續讀取else之前的內容。else之前的內容為kbuild語法的語句
鏈結obj-m := hello.o表示編譯連線後將生成hello.ko模組。
ps:ifneq ($(kernelrelease),)中ifneq和($(kernelrelease),)之間有乙個空格,
第乙個linux 驅動
以前看過很多次linux相關的資料,一直沒親自動手寫,今天通過半天努力,終於完成了乙個自己的linux小驅動 hello.c include include module license dual bsd gpl static int hello init void static void hell...
linux下的第乙個驅動
前段時間忙著學python語言,其實,學得不咋滴 從習慣的底層程式設計換到上層程式設計,不用考慮記憶體的東西,還不用申請變數,總感覺不太習慣,相信久了就會好了,不過已經基本可以看懂程式了,語言確實簡單。留著以後慢慢琢磨吧。現在需要學習linux下的驅動了,一直都想學,上學期學習迷茫期中,有個機會去廣...
第乙個Linux驅動 流水燈
本節介紹如何利用板載的led和linux的核心定時器實現乙個簡單的流水燈的驅動,所使用的開發板是tq2440,核心版本2.6.30.4。程式比較簡單,也沒涉及到什麼機制,直接上 了!關於定時器的使用模板可以參考 驅動程式 include include include include include...