国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

iTOP-iMX6開發板-設備樹驅動-以module的方式編譯驅動

發布時間:2020-10-15 10:48    發布者:落風
內核驅動不僅可以將驅動編譯到內核中,還可以動態的編譯內核驅動。本文檔介紹如何以
模塊的方式編譯內核驅動。
以 module 的方式編譯驅動,需要以下幾個部分:
1 內核成功編譯過;
2 找到內核的 arm 編譯器;
3 編譯簡單驅動;
4 編譯簡單的 Makefile 文件,Makefile 文件中需要指向內核源碼目錄(成功編譯過的內核源碼目錄);
和文檔在一起的有“Makefile”、c 文件和 ko 文件,大家可以用來測試。
要動態的編譯內核,首先需要將內核源碼編譯通過,內核的編譯請參考使用手冊第五章。
1. 內核和編譯器路徑
本節介紹內核路徑、編譯器路徑。無論是 Qt 和 Ubuntu 的內核源碼,都是在 android 源碼包中,所以必須先解壓 android 源碼到 Ubuntu14.04 中。
如下圖所示,作者的 android 源碼在“/home/iMX6Q/iTOP-iMX6_android6.0.1”目錄下,內核源碼在其中的“kernel_imx”目錄下。
進入“kernel_imx”目錄,查看“build_android_kernel.sh”中的腳本文件,如下圖所示。

如上圖所示,我們可以得到一些信息,在后面編譯內核模塊的時候,需要設置編譯目標平臺為 arm,“export ARCH=arm”;
編譯器的路徑為“$(pwd)/../prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin/arm-linux-androideabi-”。理論上,應該使用這個編譯器,但是實際上以
modules 的方式編譯內核驅動的時候,使用這個編譯器,是無法編譯的!!
應該使用“../prebuilts/gcc/linux-x86/arm/arm-eabi-4.8/bin/arm-eabi-”這個編譯器才行,如下圖所示。

編譯器路徑為內核源碼目錄對應的../prebuilts/gcc/linux-x86/arm/arm-eabi-4.8/bin/arm-eabi-”,這是作者測試出來的,作者沒有太多時間深入研究編譯腳本,但是這個編譯器是可以的。前面紅色部分介紹的編譯器,會提示報錯,對于這個報錯,飛思卡爾官方給出的是簡單的回復“你使用了 android 的編譯器”,沒有提供更多的解釋,也沒有提示方法,不過作者測試了幾個內核驅動,都是可以正常 insmod 和 rmmod 的。

2. Makefile 和測試驅動源碼以及編譯
作者在“/home/imx6”目錄下新建一個“imx_driver_modules”目錄,將要編譯的驅動和 Makefile 文件放到這個目錄下。

2.1 Makefile
Makefile 腳本文件:
obj-m += iTOP_IMX6_treedriver_hello.o
KDIR =/home/iMX6Q/iTOP-iMX6_android6.0.1/kernel_imx
PWD ?= $(shell pwd)
all:
make -C $(KDIR) M=$(PWD) modules modules ARCH=arm
CROSS_COMPILE=$(KDIR)/../prebuilts/gcc/linux-x86/arm/arm-eabi-4.8/bin/arm-eabi-
clean:
rm -rf modules.order *.o workqueue.o Module.symvers *.mod.c *.ko
腳本中:
第一行bj-m += iTOP_IMX6_treedriver_hello.o 表示編譯的源文件為iTOP_IMX6_treedriver_hello.c,如果源文件名有變化,則需要修改成對應的。
第二行:KDIR 參數指向對應的內核源碼目錄。作者的內核源碼是在/home/iMX6Q/iTOP-iMX6_android6.0.1/kernel_imxx 目錄下,用戶要根據自己的具體情況來修改。
第三行:PWD ?= $(shell pwd)表示將當前目錄的路徑賦值給 PWD 變量,也就是/home/imx6_tree_driver/iTOP_IMX6_treedriver_hello。作者將會把 Makefile 文件和驅動源碼放到這個目錄下編譯。
第五行:其中 make -C $(KDIR) M=$(PWD) modules,表示將當前目錄下的文件編譯為模塊,并且制定了內核源碼的路徑;
其中 ARCH=arm 表示設置目標 CPU 類別為 arm,也就是編譯的依賴內核和驅動模塊目標 CPU 為 ARM
其中 CROSS_COMPILE=$(KDIR)/../prebuilts/gcc/linux-x86/arm/arm-eabi-4.8/bin/arm-eabi- ,這里的路徑,指向內核編譯器的路徑。
2.2 簡單驅動源碼
驅動文件名稱為:iTOP_IMX6_treedriver_hello.c,源碼如下:

#include
#include
MODULE_LICENSE("Dual BSD/GPL");
MODULE_AUTHOR("iTOPEET_dz");
static int hello_init(void)
{
printk(KERN_EMERG "Hello World enter!\n");
return 0;
}
static void hello_exit(void)
{
printk(KERN_EMERG "Hello world exit!\n");
}
module_init(hello_init);
module_exit(hello_exit);
驅動源碼只有基本的入口和出口函數。加載和卸載的時候分別打印“Hello Worldenter!”和“Hello world exit!”。

2.3 編譯
將源碼和 Makefile 文件拷貝到 Ubuntu14 系統下。
使用命令“make”,如下圖所示,可以看到有“iTOP_IMX6_treedriver_hello.ko”文件生成。


使用命令“make clean”,可以刪除中間文件。
3.模塊編譯常見問題
在以模塊的方式編譯驅動的過程中,新手可能會以下問題。
1.內核源碼沒有編譯或者內核源碼路徑設置不正確。
如果內核源碼沒有編譯,那么模塊將會提示缺少庫之類的錯誤;如果路徑設置不正確,會提示找不到內核。
2.源碼和 Makefile 文件在 Windows 下編寫,然后拷貝到 Ubuntu 上,由于編輯器不同導致轉碼錯誤。
這種錯誤比較容易解決,Make 編譯之后,系統會提示 Makefile 或者驅動文件具體某一行出現問題。使用 vim 編輯器打開查看一下,就能找出一些亂碼,使用 vim 編輯器修正一下再編譯即可。

4. 模塊加載和卸載
作者這里使用最小 linux 系統來測試模塊的加載和卸載,最小系統在使用手冊第十三章有介紹。在編譯模塊前,內核源碼必須要編譯通過,作者這里是在最小系統是加載模塊,那么內核源碼也必須編譯為 qt 的內核(最小系統使用的是 qt 的內核),否則是無法加載的。
如下圖所示,將驅動模塊拷貝到開發板(作者采用的是 nfs 共享目錄的方式,關于 nfs 大家可以參考群共享中 nfs 相關的文檔,設備樹和非設備的 Ubuntu 都通用。也可以用 tf 卡或者 U 盤)。


然后使用命令“insmod iTOP_IMX6_treedriver_hello.ko”加載驅動模塊,如下圖示,打印出“Hello World enter!”,表明模塊驅動加載成功。


接著使用命令“rmmod iTOP_IMX6_treedriver_hello”卸載模塊,如下圖所示,發現提示沒有目錄 4.1.15,這里我們新建“/lib/modules/4.1.15”。


如下圖所示,使用命令“mkdir /lib/modules/4.1.15”新建目錄,再次使用命令“rmmod iTOP_IMX6_treedriver_helloello”卸載驅動模塊。


發現打印信息“Hello world exit!”,模塊卸載成功。
只要重新燒寫系統,這些新建目錄只需要建立一次即可。


本文地址:http://m.qingdxww.cn/thread-605624-1-1.html     【打印本頁】

本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
您需要登錄后才可以發表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區
  • 利用SAM E54 Xplained Pro評估工具包演示CAN轉USB橋接器以及基于CAN的主機和自舉程序應用程序
  • 使用SAM-IoT Wx v2開發板演示AWS IoT Core應用程序
  • 使用Harmony3加速TCP/IP應用的開發培訓教程
  • 集成高級模擬外設的PIC18F-Q71家族介紹培訓教程
  • 貿澤電子(Mouser)專區
關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产一区福利 | 岛国一区二区 | 欧美三级久久 | 日韩a级片在线观看 | 青青青青久久久久国产的 | 国产一区日韩二区欧美三区 | 青青草草 | 久久91精品国产一区二区 | 亚洲人成一区二区不卡 | 久久9966e这里只有精品 | 欧美成人交tv免费观看 | 欧美亚洲一区二区三区四 | 热@国产| 大伊香蕉精品视频在线75 | 香蕉久久夜色精品国产2020 | 手机在线精品视频 | 精品久久久久中文字幕日本 | 少妇美女极品美軳人人体 | 亚洲国产高清人在线 | 四虎影院在线网址 | 欧美国产日本 | 四虎在线最新永久免费播放 | 欧美精品久久一区二区三区 | 欧美一区二区三区不卡 | 欧美日韩在线成人免费 | 久久成年片色大黄全免费网站 | 久久久久久久久女黄 | 欧美色久| 成人在线午夜 | 日本视频一区二区三区 | 欧美日韩极品 | 天天襙| 国产一区日韩二区欧美三 | 日本中文字幕高清 | 在线免费观看欧美 | 在线视频亚洲欧美 | 国产精品高清一区二区 | 欧美va亚洲va香蕉在线 | 日本高清免费h色视频在线观看 | 久久九九热视频 | 无限资源第一页2018在线播放 |