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