開發linux driver編譯linux核心不可缺少src 且編譯的driver版本與kernel版本必須相近甚至相同
Makefile編譯程式的批次檔,方便開發使用,該檔案內容如下:
obj-m += main.o
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
2.主程式
#include
#include
MODULE_AUTHOR(
"K.H"
);//模組巨集宣告作者
MODULE_DESCRIPTION(
"Linux Device Driver"
);
//模組巨集宣告描述extern void sub();//引用到其他模組的函式
MODULE_LICENSE(
"GPL"
);
//模組巨集宣告憑證
MODULE_VERSION("V0.1");//宣告driver版本
static
int
__init main_init(
void
)//
__init(代表初始化後就可以丟棄的程式碼){
printk(
"Steward's driver tutorial, Hello, world!"
);
//模組專屬的printf函式
sub();//引用到其他模組的函式
return
0;
}
static
void
__exit main_exit(
void
)//
__exit =額外的副程式參數{
}module_init(main_init);
/lib/modules/2.6.35.xxxmodule_exit(main_exit);
======================make結果===========================
產生出main.ko main.mod.c main.mod.o main.o modules.order Module.symvers
檔案用途:
========================================================
Linux下掛載driver的相關命令如下:1. 掛載:insmod <檔名>2. 狀態:lsmod3. 卸載:rmmod <名稱>========================================================
Kconfig 編輯後可以新增並啟動組態選項得選單
存放位子說明:
編譯出來後可以將Makefile與helloworld.c搬到目的資料夾(build image target)
make並產生images
產生出來後,燒至target device
並用debug board切換至以下目錄找到helloworld.ko/kernel/drivers/helloworld/helloworld.ko
並輸入insmod helloworld.ko
就可以看到hello,world了 大功告成!!!
沒有留言:
張貼留言