1.內核模塊的三大要素
1.1頭文件 <linux/init.h>和<linux/module.h>(和模塊相關的)
1.2加載模塊函數module_init():在insmod模塊是會調用這個函數
ps它的返回值爲0,如果返回非零值,就會認爲出錯
1.3卸載模塊函數module_exit();同上
2.代碼的編寫
2.1申明
MODULE_LICENSE("遵守的協議")一般是GPL
MODULE_AUTHOR("作者")
MODULE_DESCRIPTIOM("模塊功能描述")
MODULE_VERSION("v1.0")
2.2模塊傳遞參數
module_param(name,type(字符串型用charp),perm)
2.3輸出
而在模塊程序編寫中不使用printf而使用printk。例printk(KERN_WARNING”Hello World\n”)
2.4內核中導出使用的宏
EXPORT_SYMBOL()
EXPORT_SYMBOL_GPL()只能用於含有GPL許可證的
在其他程序調用extern
3.Makefile的編寫
一般分爲四部分
obj-m :=name1.o name2.o
name1-obj :=file1.c file2.c...(name1模塊石由多個c文件組成)
KDIR :=/內核代碼路徑
all:
make -C $(KDIR) M=$(PWD) modules CROSS_COMPILE=arm-linux- ARCH=arm
進入KDIR中執行編譯PWD中的模塊命令
clean:
rm -f
4.第一次在板子卸載模塊時提示沒有目錄
需要在lib/modules中有內核版本的目錄
使用 mkdir -p /lib/modules/$(uname -r)