2014年4月13日 星期日

[嵌入式系統]Ch7-1 Linux驅動程式Lesson2 - hello world驅動程式撰寫與掛載

開發linux driver注意事項:
開發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");//模組巨集宣告描述
MODULE_LICENSE("GPL");//模組巨集宣告憑證
MODULE_VERSION("V0.1");//宣告driver版本

extern void sub();//引用到其他模組的函式
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);
module_exit(main_exit);
======================make結果===========================
產生出main.ko main.mod.c main.mod.o main.o modules.order Module.symvers
檔案用途:
========================================================
Linux下掛載driver的相關命令如下:
1. 掛載:insmod <檔名>
2. 狀態:lsmod
3. 卸載:rmmod <名稱>
========================================================
Kconfig 編輯後可以新增並啟動組態選項得選單
存放位子說明:
編譯出來後可以將Makefile與helloworld.c搬到目的資料夾(build image target)
make並產生images
產生出來後,燒至target device
並用debug board切換至以下目錄找到helloworld.ko

/lib/modules/2.6.35.xxx/kernel/drivers/helloworld/helloworld.ko
並輸入insmod helloworld.ko
就可以看到hello,world了 大功告成!!!





沒有留言:

張貼留言