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

迅為IMX6Q開(kāi)發(fā)板-非設(shè)備樹(shù)內(nèi)核-單獨(dú)編譯內(nèi)核驅(qū)動(dòng)

發(fā)布時(shí)間:2020-12-2 11:26    發(fā)布者:就是塔塔
關(guān)鍵詞: 迅為 , IMX6Q
內(nèi)核驅(qū)動(dòng)不僅可以將驅(qū)動(dòng)編譯到內(nèi)核中,還可以動(dòng)態(tài)的編譯內(nèi)核驅(qū)動(dòng)。本文檔介紹如何以模塊的方式編譯內(nèi)核驅(qū)動(dòng)。
要?jiǎng)討B(tài)的編譯內(nèi)核,首先需要將內(nèi)核源碼編譯通過(guò),內(nèi)核的編譯請(qǐng)參考使用手冊(cè)第五章。
9.5.2.1 內(nèi)核和編譯器路徑
本節(jié)介紹內(nèi)核路徑、編譯器路徑
如下圖所示,作者的 android 源碼在“/home/imx6/iTOP-iMX6_android4.4.2”目錄下,內(nèi)核源碼在其中的“kernel_imx”目錄下。

進(jìn)入“kernel_imx”目錄,查看“build_android_kernel.sh”中的腳本文件,如下圖所示。

如上圖所示,我們可以得到一些信息,在后面編譯內(nèi)核模塊的時(shí)候,需要設(shè)置編譯目標(biāo)平臺(tái)為 arm,“export ARCH=arm”;編譯器的路徑為“$(pwd)/../prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin/arm-eabi-”。
9.5.2.2 Makefile 文件
作者在“/home/imx6”目錄下新建一個(gè)“imx_driver_modules”目錄,將要編譯的驅(qū)動(dòng)和 Makefile 文件放到這個(gè)目錄下。
Makefile 腳本文件:
obj-m += iTOP-iMX6_driver_hello.o
KDIR =/home/imx6/iTOP-iMX6_android4.4.2/kernel_imx
PWD ?= $(shell pwd)
all:
make -C $(KDIR) M=$(PWD) modules ARCH=arm
CROSS_COMPILE=$(KDIR)/../prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin/arm-eabi-
clean:

rm -rf modules.order *.o workqueue.o Module.symvers *.mod.c *.ko
腳本中:
第一行bj-m += iTOP-iMX6_driver_hello.o 表示編譯的源文件為 iTOP-iMX6_driver_hello.c,如果源文件名有變化,則需要修改成對(duì)應(yīng)的。
第二行:KDIR 參數(shù)指向?qū)?yīng)的內(nèi)核源碼目錄。作者的內(nèi)核源碼是在/home/imx6/iTOP-iMX6_android4.4.2/kernel_imx 目錄下,用戶要根據(jù)自己的具體情況來(lái)改。
第三行:PWD ?= $(shell pwd)表示將當(dāng)前目錄的路徑賦值給 PWD 變量,也就是/home/imx6/imx_driver_modules
第五行:其中 make -C $(KDIR) M=$(PWD) modules,表示將當(dāng)前目錄下的文件編譯為模塊,并且制定了內(nèi)核源碼的路徑;
其中 ARCH=arm 表示設(shè)置目標(biāo) CPU 類別為 arm,也就是編譯的依賴內(nèi)核和驅(qū)動(dòng)模塊目標(biāo) CPU 為 ARM
其中 CROSS_COMPILE=$(KDIR)/../prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin/arm-eabi-,表示設(shè)置編譯器路徑,$(KDIR)為/home/imx6/iTOP-iMX6_android4.4.2/kernel_imx,所以這里完整的路徑為“/home/imx6/iTOP-iMX6_android4.4.2/kernel_imx/../prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin/arm-eabi-”,正好指向作者內(nèi)核編譯器的路徑。
9.5.2.3 簡(jiǎn)單驅(qū)動(dòng)源碼
驅(qū)動(dòng)文件名稱為:iTOP-iMX6_driver_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);
驅(qū)動(dòng)源碼只有基本的入口和出口函數(shù)。加載和卸載的時(shí)候分別打印“Hello Worldenter!”和“Hello world exit!”。
9.5.2.4 模塊編譯
如下圖所示,將源碼拷貝到 Ubuntu 系統(tǒng)下。

使用命令“make”,如下圖所示,可以看到有“iTOP-iMX6_driver_hello.ko”文件生成。

使用命令“make clean”,可以刪除中間文件,如下圖所示。

9.5.2.5 模塊編譯常見(jiàn)問(wèn)題
在以模塊的方式編譯驅(qū)動(dòng)的過(guò)程中,新手可能會(huì)以下問(wèn)題。
1.內(nèi)核源碼沒(méi)有編譯或者內(nèi)核源碼路徑設(shè)置不正確。
如果內(nèi)核源碼沒(méi)有編譯,那么模塊將會(huì)提示缺少庫(kù)之類的錯(cuò)誤;如果路徑設(shè)置不正確,會(huì)提示找不到內(nèi)核。
2.源碼和 Makefile 文件在 Windows 下編寫(xiě),然后拷貝到 Ubuntu 上,由于編輯器不同導(dǎo)致轉(zhuǎn)碼錯(cuò)誤。
這種錯(cuò)誤比較容易解決,Make 編譯之后,系統(tǒng)會(huì)提示 Makefile 或者驅(qū)動(dòng)文件具體某一行出現(xiàn)問(wèn)題。使用 vim 編輯器打開(kāi)查看一下,就能找出一些亂碼,使用 vim 編輯器修正一下再編譯即可。
9.5.2.6 模塊加載和卸載
作者這里使用最小 linux 系統(tǒng)來(lái)測(cè)試模塊的加載和卸載,最小系統(tǒng)在使用手冊(cè)第十三章有介紹。在編譯模塊前,內(nèi)核源碼必須要編譯通過(guò),作者這里是在最小系統(tǒng)是加載模塊,那么內(nèi)核源碼也必須編譯為 qt 的內(nèi)核(最小系統(tǒng)使用的是 qt 的內(nèi)核),否則是無(wú)法加載的。
如下圖所示,將 ko 文件拷貝到 u 盤上,啟動(dòng)開(kāi)發(fā)板,將 U 盤插到開(kāi)發(fā)板上(靠近網(wǎng)口的usb 接口),使用命令“mkdir /mnt/udisk”新建文件夾,使用命令“mount /dev/sda1/mnt/udisk/”掛載盤符,使用命令“cp -r /mnt/udisk/iTOP-iMX6_driver_hello.ko ./”將驅(qū)動(dòng)模塊拷貝到開(kāi)發(fā)板。

然后使用命令“insmod iTOP-iMX6_driver_hello.ko”加載驅(qū)動(dòng)模塊,如下圖示,打印出“Hello World enter!”,表明模塊驅(qū)動(dòng)加載成功。

接著使用命令“rmmod iTOP-iMX6_driver_hello”卸載模塊,如下圖所示,發(fā)現(xiàn)提示沒(méi)有目錄“/lib/modules”,我們就按照提示新建目錄。

如下圖所示,使用命令“mkdir /lib/modules”新建目錄,再次使用命令“rmmodiTOP-iMX6_driver_hello”卸載驅(qū)動(dòng)模塊,發(fā)現(xiàn)仍然提示沒(méi)有“3.0.35-g0e09bb1-dirty”這個(gè)路徑。

如下圖所示,使用命令“mkdir /lib/modules/3.0.35-g0e09bb1-dirty”新建目錄,再次用命令“rmmod iTOP-iMX6_driver_hello”卸載驅(qū)動(dòng)模塊,發(fā)現(xiàn)打印信息“Hello worldexit!”,模塊卸載成功。

只要重新燒寫(xiě)系統(tǒng),這些新建目錄只需要建立一次即可。















本文地址:http://m.qingdxww.cn/thread-749474-1-1.html     【打印本頁(yè)】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,我們將根據(jù)著作權(quán)人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評(píng)論 登錄 | 立即注冊(cè)

廠商推薦

  • Microchip視頻專區(qū)
  • Dev Tool Bits——使用MPLAB® Discover瀏覽資源
  • Dev Tool Bits——使用條件軟件斷點(diǎn)宏來(lái)節(jié)省時(shí)間和空間
  • Dev Tool Bits——使用DVRT協(xié)議查看項(xiàng)目中的數(shù)據(jù)
  • Dev Tool Bits——使用MPLAB® Data Visualizer進(jìn)行功率監(jiān)視
  • 貿(mào)澤電子(Mouser)專區(qū)
關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美日韩欧美日韩 | 香蕉久久高清国产精品免费 | 欧美高清在线观看视频 | 国产精品特黄毛片 | 一区二区视频免费观看 | 亚洲另类网 | 日韩麻豆国产精品欧美 | 久久成人永久免费播放 | 1024手机看片国产旧版你懂的 | 国产永久在线视频 | 国产一毛片 | 精品一区二区免费视频 | 欧美日日 | poopoo的视频丨vk | 永久福利盒子日韩日韩免费看 | 2019国产精品视频 | 欧美日韩亚洲一区 | 2022国产麻豆剧传媒剧情 | 久国产精品久久精品国产四虎 | 国内一级一级毛片a免费 | 在线日韩欧美一区二区三区 | 久热中文字幕精品视频在线 | 星空影视免费观看高清 | 黄色成人影视 | 成人欧美一区二区三区黑人妖 | 岛国大片在线观看免费版 | 亚洲午夜一级毛片 | 国产欧美日韩综合一区二区三区 | 亚洲色图综合在线 | 天海翼一区二区在线观看 | 日日干天天操 | 夜夜夜噜噜噜 | 婷婷久久五月天 | 精品视频在线观看免费 | 精品免费福利视频 | 亚洲国产韩国一区二区 | 亚洲综合自拍 | 亚洲精品网站在线观看不卡无广告 | 国内国内在线精品视频 | 欧美亚洲 尤物久久 综合精品 | 日本亚洲最大的色成网站www |