LDD3學習筆記(一) --hello world模塊

 

Hello world 源程序

 

 說明

        init.h包含初始化和清除函數,module.h包含有可裝載模塊需要的大量符號和函數的定義。

        模塊定義了兩個函數, 一個在模塊加載到內核時被調用( hello_init )以及一個在模塊被去除時被調用( hello_exit ).

        另一個特別的宏 (MODULE_LICENSE) 是用來告知內核, 該模塊帶有一個自由的許可證。

        用到了一個內核函數:prinfk,內核運行時不依賴於C庫,內核模塊只能調用內核導出的函數。

 

Makefile 文件

 說明:

                 make -C $(KERNEL_DIR) M=`pwd` $(MAKE_ENV) modules

        這個命令開始是改變它的目錄到用 -C 選項提供的目錄下( 也就是內核源碼目錄 ). 它在那裏會發現內核的頂層 makefile. 這個 M= 選項使 makefile 在試圖建立模塊目標前, 回到你的模塊源碼目錄.讓內核頂層的Makefile包含模塊源代碼目錄下的makefile,包含以後獲取obj-m:=hello.o.(表明有一個模塊要從目標文件 hello.o 建立. 在從目標文件建立後結果模塊命名爲 hello.ko.)

 

Makefile文件也可以寫成下面這樣

obj-m:=hello.o

編譯時不能直接make,要寫成這樣  make -C 內核源代碼目錄 M=`pwd` modules

 

如果你有一個模塊名爲 module.ko, 是來自 2 個源文件( 姑且稱之爲, file1.c 和 file2.c ), 正確的書寫應當是:

obj-m := module.o
module-objs := file1.o file2.o
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章