黄色三级免费_亚洲男女性高爱潮网站_婷婷五月天超碰日日草人人_人妻少妇精品无码专区无码_無碼少婦豐滿熟婦一區二區_午夜視頻一區_国产亚洲精品俞拍视频_污宅男666在线永久免费观看_午夜一级a成年大片在线_边摸边吃奶边做爽小视频

EsDA工控單板
EPC6450-AWI/EPC1107-LI/EPC3568系列工控板
MPC-ZC1迷你工控主板
Cortex?-A5,拖拽式開(kāi)發(fā),40pin擴(kuò)展引腳
2.5寸工控單板
EPC-6Y2C-L網(wǎng)絡(luò)控制器
Cortex?-A7,800MHz,8路串口,數(shù)字音頻
IoT-6Y2C-L物聯(lián)網(wǎng)關(guān)控制器
Cortex?-A7,800MHz,8路串口,支持藍(lán)牙
EPC-6G2C-L網(wǎng)絡(luò)控制器
Cortex?-A7,528MHz,8路串口,數(shù)字音頻
IoT-6G2C-L物聯(lián)網(wǎng)關(guān)控制器
Cortex?-A7,528MHz,8路串口,支持藍(lán)牙
3.5寸工控單板
IoT7000A-LI物聯(lián)網(wǎng)網(wǎng)關(guān)控制器
Cortex?-A7,雙MiniPCIe接口支持無(wú)線模塊擴(kuò)展
IoT-9608I-L網(wǎng)絡(luò)控制器
Cortex?-A8,800MHz,6種無(wú)線通訊方式
EPC-9600I-L工控主板
Cortex?-A8,800Mhz
IoT9000A-LI工控主板
Cortex?-A9,強(qiáng)勁編解碼,專(zhuān)注多媒體
IoT9100A-LI工業(yè)IoT網(wǎng)絡(luò)控制器Cortex?-A9,1GHz
SX-3568系列主板Cortex?-A55,雙核心GPU
MD-3568LI工控板Cortex?-A55,雙網(wǎng)口

五分鐘帶你掌握Linux編譯驅(qū)動(dòng)、內(nèi)核及應(yīng)用程序

小王是一名剛接觸Linux的新手,看了一些關(guān)于Linux驅(qū)動(dòng)的書(shū)籍之后,買(mǎi)了一塊Cortex?-A9的Arm?開(kāi)發(fā)板,準(zhǔn)備大干一場(chǎng)。編寫(xiě)了第一個(gè)屬于自己的驅(qū)動(dòng)程序并命名為hellodrv.c,程序源碼如下所示。

這個(gè)驅(qū)動(dòng)程序怎么編譯成可以在板子上跑的程序呢,小王經(jīng)過(guò)一番網(wǎng)上查詢,原來(lái)需要交叉編譯工具鏈,小王找到了光盤(pán)資料里的交叉編譯工具并按說(shuō)明正確安裝了交叉編譯工具。

編寫(xiě)Makefile

小王編寫(xiě)好的驅(qū)動(dòng)程序?yàn)閔ellodrv.c,要把該驅(qū)動(dòng)程序編譯為模塊,在同一目錄下新建了一個(gè)Makefile文件。編寫(xiě)的Makefile如下。

驅(qū)動(dòng)編譯

小王經(jīng)過(guò)查詢,編譯驅(qū)動(dòng)主要有兩種方式,一種是修改內(nèi)核源碼頂層目錄下的Makefile文件,另外也可以在編譯命令指定架構(gòu)及交叉編譯工具。

1. 修改Makefile

例如Linux內(nèi)核源碼的目錄為/home/vmuser/kernel-imx,打開(kāi)該目錄下的Makefile文件,找到ARCH及CROSS_COMPILE相關(guān)語(yǔ)句,修改為如下所示語(yǔ)句。

如果交叉編譯工具鏈未設(shè)置環(huán)境變量則CROSS_COMPILE設(shè)置為交叉編譯工具鏈的絕對(duì)路徑,設(shè)置如下。

ARCH ?=arm

CROSS_COMPILE ?=/opt/toolchain/bin/arm-none-linux-gnueabi-

修改完之后,直接執(zhí)行make命令,生成了hellodrv.ko文件。

2. 在編譯命令指定

執(zhí)行如下命令進(jìn)行編譯。

$make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-

這種方式也可以生成hellodrv.ko,可是驅(qū)動(dòng)要依賴(lài)于內(nèi)核才能跑起來(lái),小王于是開(kāi)始了Linux內(nèi)核的配置及編譯。

Linux內(nèi)核配置及編譯

編譯內(nèi)核時(shí)指定架構(gòu)和交叉編譯工具的方式同編譯模塊一樣,經(jīng)過(guò)上面的操作,小王已經(jīng)輕車(chē)熟路了。小王還學(xué)會(huì)了首先導(dǎo)環(huán)境變量然后進(jìn)行編譯的方法。

$export ARCH=arm

$export CROSS_COMPILE=arm-none-linux-gnueabi-

在首次進(jìn)行配置編譯之前,需要清除之前編譯生成的文件,可用如下命令進(jìn)行清除。

$make distclean

接下來(lái)進(jìn)行內(nèi)核的配置,內(nèi)核的配置可以使用如下命令中的一個(gè)。

$make config #基于文本的最為傳統(tǒng)的配置界面,不推薦使用

$make menuconfig #基于文本菜單的配置界面

$make xconfig #要求QT被安裝

$make gconfig #要求GTK+被安裝

這四種方式中,值得推薦的是make menuconfig,它不依賴(lài)于QT或GTK+,且非常直觀。使用make menuconfig命令后,會(huì)進(jìn)入如圖1所示的界面,在該界面根據(jù)需求對(duì)需要編譯進(jìn)內(nèi)核的選項(xiàng)進(jìn)行裁剪。對(duì)于bool型選項(xiàng),按Y或者N決定是否選擇編譯進(jìn)內(nèi)核。[*]表示選中,[]表示未選中。對(duì)于tristate型選項(xiàng),根據(jù)需求可以有Y、M、N三種選擇,<*>表示靜態(tài)編譯,表示編譯為模塊,<>表示不編譯進(jìn)內(nèi)核。表示編譯為模塊,

圖1內(nèi)核配置界面

配置完成后,選擇保存,然后退出。配置后會(huì)生成.config文件,該文件保存了配置信息,供Makefile在編譯內(nèi)核時(shí)使用。

在配置界面我們根據(jù)需求把需要的功能以及相應(yīng)設(shè)備驅(qū)動(dòng)的支持等配置好,然后進(jìn)行內(nèi)核及設(shè)備樹(shù)的編譯。內(nèi)核及設(shè)備樹(shù)編譯用以下命令。

$make zImage /* 編譯為zImage鏡像 */

$make imx6dl-sabresd.dtb /* 單獨(dú)編譯某個(gè)設(shè)備數(shù) */

$make dtbs /* 編譯所有的設(shè)備樹(shù) */

為了加快編譯速度可以在編譯命令后加“-j”選項(xiàng),例如PC的CPU為4核,則編譯命令如下。

$make zImage -j4

如果要把某些驅(qū)動(dòng)編譯為模塊,則使用如下命令。

$make modules

針對(duì)相應(yīng)的開(kāi)發(fā)板,廠家一般都會(huì)有默認(rèn)的配置,這些配置文件位于內(nèi)核源碼arch/arm/configs目錄下。例如使用如下的默認(rèn)配置。

$make imx_v7_defconfig

如果已有.config文件,可以使用如下命令載入既有的.config配置文件。

$make oldconfig

內(nèi)核及設(shè)備樹(shù)編譯完成后將會(huì)生成zImage和相應(yīng)的dtb文件,按照廠家提供的燒寫(xiě)方式將鏡像燒寫(xiě)到目標(biāo)板。

應(yīng)用程序編譯及文件傳輸

應(yīng)用程序編譯

例如需要編譯的應(yīng)用程序文件為test.c,需要把該程序編譯放到Arm?開(kāi)發(fā)板上運(yùn)行。編譯命令如下。

$arm-none-linux-gnueabi-gcc test.c -o test

這是一個(gè)非常簡(jiǎn)單的程序,并且只有一個(gè)文件,所以可以采用直接輸入命令進(jìn)行交叉編譯。如果工程較大,這種方式就不可取了,通常需要編寫(xiě)Makefile文件,通過(guò)make程序來(lái)進(jìn)行工程管理。應(yīng)用程序的Makefile范例如下。

編寫(xiě)完Makefile后執(zhí)行make命令即可生成目標(biāo)文件test。

文件傳輸

編譯生成的可執(zhí)行文件可以通過(guò)TFTP,NFS等方式下載到開(kāi)發(fā)板,關(guān)于TFTP,NFS服務(wù)器在PC上的搭建可參考網(wǎng)絡(luò)上相關(guān)文章,這里不贅述。

1.NFS文件傳輸

將目標(biāo)板接入局域網(wǎng)或通過(guò)交叉網(wǎng)線與PC主機(jī)相連,設(shè)定目標(biāo)板的IP,使之與主機(jī)在同一網(wǎng)段,然后進(jìn)行遠(yuǎn)程mount操作。將需要傳輸?shù)奈募旁赑C機(jī)搭建的NFS服務(wù)器目錄下。在開(kāi)發(fā)板上執(zhí)行如下操作。

root@M6708-T:~#ifconfig eth0 192.168.1.136 #設(shè)定開(kāi)發(fā)板IP

root@M6708-T:~#ping 192.168.1.168 #ping主機(jī)IP

root@M6708-T:~#mount -t nfs 192.168.1.168:/home/vmuser/nfs/mnt/-o nolock

在進(jìn)行遠(yuǎn)程掛載之前,最好先用ping命令檢查網(wǎng)絡(luò)通信是否正常,只有在能ping通的情況下,才能進(jìn)行正常掛載,否則請(qǐng)檢查網(wǎng)絡(luò)。如果在已經(jīng)ping通的情況下,遠(yuǎn)程掛載出現(xiàn)錯(cuò)誤,請(qǐng)檢查主機(jī)和目標(biāo)機(jī)的其它設(shè)置。

2.TFTP文件傳輸

把需要傳輸?shù)奈募旁赑C機(jī)的tftp服務(wù)器目錄下。TFTP下載命令格式如下。

root@M6708-T: ~#tftp -g -r server-file server-ip

例如:下載IP為192.168.1.168的tftp服務(wù)器的hellodrv.ko文件,在開(kāi)發(fā)板的當(dāng)前目錄下執(zhí)行如下命令。

root@M6708-T: ~#tftp -g -r hellodrv.ko 192.168.1.168

通過(guò)以上任一方式將在PC機(jī)上編譯完成的驅(qū)動(dòng)模塊hellodrv.ko和test應(yīng)用程序拷貝到目標(biāo)板上。

驅(qū)動(dòng)模塊的加載及移除

執(zhí)行如下命令把驅(qū)動(dòng)模塊動(dòng)態(tài)加載進(jìn)內(nèi)核。

$insmod hellodrv.ko

查看加載的模塊使用如下命令。

$lsmod #查看內(nèi)核中的模塊信息

$modinfo hellodrv.ko #查看模塊的描述信息

如需要移除模塊使用如下命令。

$rmmod hellodrv

IoT9000A-LI是廣州致遠(yuǎn)電子有限公司開(kāi)發(fā)的基于M6708-T系列核心板的Arm?工控主板,核心板標(biāo)配處理器為i.MX 6U,Cortex?-A9簡(jiǎn)單雙核。板上集成了大量的外設(shè)接口,包括千兆以太網(wǎng)、音頻、USB、HDMI、LVDS、LCD、miniPCIE、攝像頭、CAN信號(hào)、UART信號(hào)等接口,同時(shí)整合的多功能HD視頻引擎可提供1080P 60fps視頻解碼、1080P 30fps視頻編碼,并帶有2D、3D圖形引擎,可滿足消費(fèi)電子、工業(yè)和汽車(chē)車(chē)載娛樂(lè)系統(tǒng)等新一代應(yīng)用,以及醫(yī)療應(yīng)用的豐富圖形和高響應(yīng)需求。

IoT9000A-LI工控主板產(chǎn)品如下圖所示。