內核模塊的開發

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)




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章