tiny6410上第一個hello module驅動程序

買了tiny6410的開發板很久了,一直沒有開始弄,現在想學了又沒有了時間,只有利用週末的時間來學習,也打算開始用博客記錄自己的學習過程,要不然就都忘了。這個是最簡單的hello的驅動程序,自己按照友善之臂的例子一點點來的,寫一點遇到的問題。

1.首先在驅動目錄下建立模塊的源文件,這裏命名爲  my_mini6410_hello_module.c  

假設linux目錄爲linux-2.6.38   則文件存放在linux-2.6.38/drivers/char/

按照例子中的程序照着寫了個代碼 分別是 模塊的加載和卸載。

/*  file begin   my_mini6410_hello_module.c      */

static int __init my_hello_module_init(void)  /* init 前面有兩個下劃線    裝載時調用的函數*/

{

printk("hello ! \n");

return 0;

}

static void __exit my_hello_module_cleanup(void) /* 卸載時調用的函數 */

{

printk("bye !\n");

}

module_init(my_hello_module_init);  /* 這裏應該是掛接函數 */

module_exit(my_hello_module_cleanup);

MODULE_LICENSE("GPL");

/*  file end  */

 

2    將新的module加入編譯的內核代碼樹,

在char目錄下打開Kconfig配置文件   vi Kconfig

看到有類似  config   XXXX

                             XXXX 的地方按照同樣的方式爲自己的module添加一個配置。

代碼如下  :

config MY_MINI6410_HELLO_MODULE   /* 這個名字會在下面的makefile中使用到,和具體的代碼文件關聯 */

            tristate “my mini6410 hello module”   /* 這個名字是在使用 make menuconfig配置時顯示的模塊的名字 */

            depends on CPU_S3C6410

            help

                 this is my hello module

保存退出,在linux-2.6.38 目錄下 使用make menuconfig命令打開圖形菜單,在Device Drivers -> Character Drivers菜單中看到剛剛添加的項了,

使用空格鍵切換到M模式,選擇編譯爲模塊方式, “*”是編譯爲內核中。確定保存。

3.修改makefile文件

在上面修改後添加了編譯選項,但是還需要修改makefile文件,使得真正的將my_mini6410_hello_module.c這個文件編譯進去。使得內核的編譯選項和真正的源文件真正聯繫起來。

在char目錄下打開Makefile文件  : vi Makefile

按照同樣的格式  添加:

obj -$(CONFIG_MY_MINI6410_HELLO_MODULE)         +=   my_mini6410_hello_module.o    /* 這裏可以看出括號裏的大寫部分是kconfig中的配置項名,=後面則爲文件名 相同的.o文件名*/

4 。執行make ,在執行make modules。

這時my_mini6410_hello_module.ko就應該出現在 char目錄下了。通過ftp下載到開發板上,放在開發板  /lib/modules/ 'uname -r' / 下。

 uname -r 根據單板使用的內核不同而不同,必須使用這個目錄,沒有的話新建這樣的目錄。我的是2.6.38-FriendlyARM

5  按照說明書上的指示,我直接使用下面命令

modprobe my_mini6410_hello_module  並沒有出現意料中的打新hello,呵呵  而是出現了錯誤信息:   modprobe: module './my_mini6410_hello_module' not found,

通過在網上搜索知道在編譯並準備好一個內核模塊後,使用modprobe裝載之前需要更新依賴關係:

depmod  

這個命令會重新生成 modules.dep  這個依賴文件

這時再運行   modprobe my_mini6410_hello_module 即出現了期待的打印信息。

使用 rmmod my_mini6410_hello_module    出現了卸載模塊的打印信息。

至此我的第一個hello的驅動就這樣結束了。

 

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