linux-內核-將內核模塊編譯進內核

大綱:
1.交叉編譯環境搭建
2.內核模塊的編寫
3.將開發板連接上PC串口測試,加載模塊
4.內核模塊參數
5.總結
一.編譯環境的搭建
交叉編譯軟件地址:
http://cloud.189.cn/t/VBvYbqMnueei
1.把交叉編譯安裝包通過ssh服務上傳到linux的/opt目錄下
2.解壓到當前目錄

tar -xvf  gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux.tar.xz

解壓後得到
這裏寫圖片描述
3.修改當前目錄下/bashrc文件,將交叉編譯路徑加入到環境變量中,在文件的最後一行添加
這裏寫圖片描述
這裏寫圖片描述
4.保存退出後執行source命令跟新
5.測試環境變量來檢查交叉編譯工具是否安裝成功
這裏寫圖片描述
但是出現了上面的報錯。解決方法如下
http://www.cnblogs.com/jycboy/p/4926538.html
這裏我只是安裝了
sudo apt-get install libc6:i386 libstdc++6:i386 libncurses5:i386 zlib1g:i386
問題就解決好啦
這裏寫圖片描述
二.內核模塊的編寫
首先要下載相應的內核,在內核基礎裏面我已經介紹過啦,這裏就不贅述啦
這裏我的內核源碼路徑是
這裏寫圖片描述
1.這裏我是一簡單的測試代碼,不涉及是字符驅動設備還是塊驅動設備等,所以隨便放在哪個驅動的目錄下,新建一個hellowold.c文件
這裏寫圖片描述
helloworld.c的文件內容如下

#include<linux/init.h>
#include<linux/module.h>
static int hello_init(void){
    printk(KERN_WARNING"hello world!\n");
    return 0;
    }
static int hello_exit(void){
    printk(KERN_INFO"Goodbye world!\n");
    }   
module_init(hello_init);
module_init(hello_exit);

2.修改Makefile文件
這裏寫圖片描述

這裏寫圖片描述
3.修改Kconfig文件
模仿上面的內容寫了下面的版塊
這裏寫圖片描述
4.在build.sh文件裏面添加
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- modules
這裏寫圖片描述
這裏寫圖片描述
5.在\linux-imx_share\目錄下執行make ARCH=arm menuconfig
這個時候我出現瞭如下報錯:
這裏寫圖片描述
解決方法如下:
http://blog.csdn.net/yueashuxia/article/details/52960658
我是直接sudo apt-get install libncurses5-dev
然後再執行make ARCH=arm menuconfig
出現以下目錄:
這裏寫圖片描述
爲了快速搜索出我寫的內核模塊程序,輸入/,填寫config的名稱進行搜索
這裏寫圖片描述

這裏寫圖片描述
6.進入到相應路徑下找到自己的模塊,改成M,保存退出
這裏寫圖片描述
7.執行./build.sh,編譯成功
這裏寫圖片描述
三.將開發板連接上PC串口測試,加載模塊
1.下載工具–securecrt
http://cloud.189.cn/t/q6BZ3q6fueEv這裏寫圖片描述
2.給開發板通電啓動
3.上傳編譯生成的helloworld.ko文件
這裏寫圖片描述
4.加載模塊到開發板
這裏寫圖片描述
5.查看
這裏寫圖片描述
6.卸載rmmod helloworld.ko
四.內核模塊參數
通過宏module_param指定模塊參數,模塊參數用於在模塊加載時傳遞參數給模塊
module_param(name,type,perm)
name:模塊參數名稱
type:參數類型int ,charp,bool
perm:模塊參數的訪問權限
S_IRUGO任何用戶對/sys/module中出現的該參數具有讀權限
S_IWUSR允許root用戶修改/sys/module中出現的參數
舉例:
module_param(a,int,S_IRUGO);
module_param(st,charp,S_IWUSR);
五.總結
1.應用程序從頭main到尾執行任務,執行結束後從內存中消失,內核模塊則是現在內核中註冊自己以便服務將來的某個請求,然後他的初始化函數結束,此時模塊仍然存在於內核中,直到卸載函數被調用,模塊才從內核中消失
2.printk在內核中使用,printf在應用程序中使用
優先級

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