娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

iTOP-iMX6開發(fā)板-設(shè)備樹驅(qū)動-以module的方式編譯驅(qū)動

發(fā)布者:WhisperingWaves最新更新時間:2025-03-07 來源: cnblogs關(guān)鍵字:module  編譯驅(qū)動 手機(jī)看文章 掃描二維碼
隨時隨地手機(jī)看文章

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

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

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

2. Makefile 和測試驅(qū)動源碼以及編譯
作者在“/home/imx6”目錄下新建一個“imx_driver_modules”目錄,將要編譯的驅(qū)動和 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,如果源文件名有變化,則需要修改成對應(yīng)的。
第二行:KDIR 參數(shù)指向?qū)?yīng)的內(nèi)核源碼目錄。作者的內(nèi)核源碼是在/home/iMX6Q/iTOP-iMX6_android6.0.1/kernel_imxx 目錄下,用戶要根據(jù)自己的具體情況來修改。
第三行:PWD ?= $(shell pwd)表示將當(dāng)前目錄的路徑賦值給 PWD 變量,也就是/home/imx6_tree_driver/iTOP_IMX6_treedriver_hello。作者將會把 Makefile 文件和驅(qū)動源碼放到這個目錄下編譯。
第五行:其中 make -C $(KDIR) M=$(PWD) modules,表示將當(dāng)前目錄下的文件編譯為模塊,并且制定了內(nèi)核源碼的路徑;
其中 ARCH=arm 表示設(shè)置目標(biāo) CPU 類別為 arm,也就是編譯的依賴內(nèi)核和驅(qū)動模塊目標(biāo) CPU 為 ARM
其中 CROSS_COMPILE=$(KDIR)/../prebuilts/gcc/linux-x86/arm/arm-eabi-4.8/bin/arm-eabi- ,這里的路徑,指向內(nèi)核編譯器的路徑。
2.2 簡單驅(qū)動源碼
驅(qū)動文件名稱為: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);
驅(qū)動源碼只有基本的入口和出口函數(shù)。加載和卸載的時候分別打印“Hello Worldenter!”和“Hello world exit!”。

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


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

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


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


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


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


發(fā)現(xiàn)打印信息“Hello world exit!”,模塊卸載成功。
只要重新燒寫系統(tǒng),這些新建目錄只需要建立一次即可。

關(guān)鍵字:module  編譯驅(qū)動 引用地址:iTOP-iMX6開發(fā)板-設(shè)備樹驅(qū)動-以module的方式編譯驅(qū)動

上一篇:迅為6818開發(fā)板-Qt4.7-4G_EC20的移植
下一篇:迅為4412開發(fā)板QtE系統(tǒng)源碼-支持HDMI顯示

推薦閱讀最新更新時間:2025-04-23 16:09

利用BGA封裝的低EMI μModule穩(wěn)壓器可簡化設(shè)計(jì)
簡介 擁擠的應(yīng)用板上很難再集成高性能DC-DC POL轉(zhuǎn)換器。此外,電磁干擾(EMI)也是元件密度較高時不能忽視的問題,因此可選擇的電源解決方案十分有限。 LTM8074 μModule?穩(wěn)壓器能夠輕松克服這些限制因素。它設(shè)計(jì)緊湊,體積小巧,能夠輕松裝入PCB正面或背面的有限空間。LTM8074采用Silent Switcher?架構(gòu),無需安裝額外的濾波或屏蔽元件,即可通過嚴(yán)格的EMI測試,有助于簡化設(shè)計(jì)和生產(chǎn)。 1.2 A Silent Switcher μModule穩(wěn)壓器 LTM8074是一款完整的超低EMI、高壓輸入和輸出、DC-DC降壓開關(guān)電源。它采用符合RoHS標(biāo)準(zhǔn)的4 mm × 4 mm × 1.92 m
[電源管理]
利用BGA封裝的低EMI μ<font color='red'>Module</font>穩(wěn)壓器可簡化設(shè)計(jì)
跟我寫ARM處理器之一:從寫module arm開始
我決定把我寫ARM處理器的經(jīng)驗(yàn)分享給大家。不是自賣自夸,我這個核是非常好的核。一個證明方法是下載入FPGA,看她是不是能工作。這種證明方法,我已經(jīng)做到了。大家如果可以下載整個工程文件,稍微改造一下,即能驗(yàn)證是否成功。但是這還不是推廣她的方法。因?yàn)閷τ诖蠖鄶?shù)人來說,只是知其然不知其所以然。人們對于不熟悉、不了解的事情,總是覺得神秘,那么對于她的應(yīng)用,就會大打折扣。推廣她的最好的方法,就是讓她成為人人能夠輕松寫的核。我希望以此推動大家對于SOC設(shè)計(jì)的熱情。可以想象,如果最神秘,最復(fù)雜的CPU核,都可以輕松的寫出來的話,那么還有什么能夠難得到我們的呢? 在寫之前,我要申明兩點(diǎn)精神。這兩點(diǎn)精神當(dāng)然不是我創(chuàng)造的,我只是引用起來,讓大家更
[單片機(jī)]
智能型PXI Switch Module 在自動化測控系統(tǒng)中的應(yīng)用
前言 使用繼電器模塊(Relay Switch Module)做為信號切換,廣泛地應(yīng)用于IC測試、電力監(jiān)測管理、工業(yè)流程與交通控制領(lǐng)域。 近年來隨著消費(fèi)性電子產(chǎn)品走向多樣化,生命周期縮短,價(jià)格(Cost)、速度(Speed)、靈活性(Flexibility),成為自動測試設(shè)備(Automated Test Equipment, ATE)生存競爭的首要課題。于工業(yè)控制及相關(guān)應(yīng)用領(lǐng)域,價(jià)昂、封閉規(guī)格的專用控制系統(tǒng)則面臨PC-Based測控解決方案開放、價(jià)廉與高效能的挑戰(zhàn)。 本文將借著對繼電器信號切換的技術(shù)簡介與實(shí)例應(yīng)用,使讀者了解架構(gòu)于PXI系統(tǒng)之上的智能型PXI Switch Module,對于高效
[測試測量]
小廣播
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號

 
EEWorld服務(wù)號

 
汽車開發(fā)圈

 
機(jī)器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務(wù)審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 澄城县| 雷波县| 甘肃省| 老河口市| 融水| 黑山县| 兴海县| 梅河口市| 沁源县| 沙湾县| 密山市| 阆中市| 滨海县| 龙井市| 昆山市| 五寨县| 望城县| 古丈县| 清河县| 武义县| 团风县| 冕宁县| 汉沽区| 辽阳市| 阜新市| 平潭县| 麻江县| 宝兴县| 澜沧| 浏阳市| 昌平区| 麦盖提县| 兖州市| 安远县| 云阳县| 竹溪县| 保亭| 永春县| 林州市| 留坝县| 富顺县|