NXP iMX8X基于Docker測(cè)試CAN接口通訊

By Toradex秦海

1).?簡(jiǎn)介

隨著嵌入式設(shè)備的發(fā)展沪编,由于部署更靈活應(yīng)用方便等特性寸爆,原本在網(wǎng)絡(luò)應(yīng)用中廣泛使用的docker技術(shù)也慢慢在一些嵌入式設(shè)備中應(yīng)用苍凛,因此本文就基于嵌入式ARM平臺(tái)使用集成docker技術(shù)的Liinux系統(tǒng)來(lái)測(cè)試CAN通信功能龄寞。


本文所演示的平臺(tái)來(lái)自于Toradex Colibri iMX8X ARM嵌入式平臺(tái)壁拉,這是一個(gè)基于NXP iMX8X ARM處理器拐叉,支持Cortex-A35和Coretex-M4架構(gòu)的計(jì)算機(jī)模塊平臺(tái)。



2.?準(zhǔn)備

a).?Colibri iMX8X 2GB WB IT?ARM核心版配合Colibri Evaluation?載板扇商,連接調(diào)試串口UART1(載板X27)到開(kāi)發(fā)主機(jī)方便調(diào)試凤瘦。


b). Colibri iMX8X?通過(guò)Toradex Easy Installer?安裝包含Docker支持的Torizon Linux操作系統(tǒng),目前最新的monthly發(fā)布?TorizonCore 5.1.0-devel-202012+build.6


c).?Apalis iMX8QM?4GB WB IT ARM核心版配合Ioxra?載板案铺,連接調(diào)試串口UART1(載板X22)到開(kāi)發(fā)主機(jī)方便調(diào)試蔬芥。


d). Apalis iMX8QM同樣通過(guò)Toradex Easy Installer安裝標(biāo)準(zhǔn)嵌入式Linux?用于CAN接口測(cè)試時(shí)候?qū)樱到y(tǒng)版本為L(zhǎng)inux Reference Multimedia 5.1.0-devel-202012



3).?測(cè)試系統(tǒng)配置

a). Colibri iMX8X CAN接口對(duì)應(yīng)管腳說(shuō)明如下控汉,本文測(cè)試使用FlexCAN1接口


b).?測(cè)試系統(tǒng)如下硬件連接將Colibri iMX8X CAN1和Apalis iMX8QM CAN0接口進(jìn)行連接

./ Colibri Eva Board JP4和JP5跳線斷開(kāi)笔诵,將X9連接器?SODIMM_55和SODIMM_63管腳分別連接到X38連接器TX和RX插座。

./ Colibri Eva Board X2 Top DB9?管腳2和7通過(guò)兩端均配置120Ohm終端電阻的連線和Ixora載板X20管腳1和2連接姑子。


c). Colibri iMX8X TorizonCore linux系統(tǒng)默認(rèn)使能的是Colibri Evaluation Board載板上面的MCP2515 SPI CAN接口乎婿,需要通過(guò)如下device tree overlay配置修改為iMX8X的兩個(gè)FlexCAN接口

./ device tree overlay的基本說(shuō)明請(qǐng)參考這里,編譯方法請(qǐng)參考這里街佑。

./ overlay?源文件請(qǐng)參考如下鏈接

https://gitee.com/simonqin09/colibri_imx8x_flexcan/blob/master/colibri-imx8x_enable_flexcan_overlay.dts

./?將上述源文件編譯好的overlay文件(可以從這里下載)根據(jù)這里的說(shuō)明部署到Colibri iMX8X上



4).?部署CAN測(cè)試Docker image

a).?首先參考這里的說(shuō)明在開(kāi)發(fā)PC上面配置Docker編譯環(huán)境


b).?在開(kāi)發(fā)PC創(chuàng)建如下Dockerfile?用于進(jìn)行CAN測(cè)試

-------------------------------

ARG IMAGE_ARCH=arm64v8

# Use the parameter below for Arm 32 bits (like iMX6 and iMX7)

# ARG IMAGE_ARCH=arm32v7

FROM torizon/$IMAGE_ARCH-debian-shell:1.0

WORKDIR /home/torizon


RUN apt-get -y update && apt-get install -y \

??? nano \

??? python3 \

??? python3-pip \

??? python3-setuptools \

??? git \

??? iproute2 \

??? can-utils \

??? net-tools \

??? vim \

??? python3-can \

&& apt-get clean && apt-get autoremove && rm -rf /var/lib/apt/lists/*

-------------------------------


c).?如下編譯并打包成離線Docker image文件谢翎,當(dāng)然也可以上傳到dockerhub上面通過(guò)在線的方式在設(shè)備安裝

-------------------------------

$ docker build -t can-test-torizon .

$ docker save -o can-test-torizon.tar can-test-torizon

-------------------------------


e).?將上面打包好的docker image復(fù)制到Colibri iMX8x設(shè)備上面捍靠,并安裝并運(yùn)行

-------------------------------

### load docker image

$ docker load -i can-test-torizon.tar

### check docker image

$ docker images

REPOSITORY?????????? TAG???????????????? IMAGE ID??????????? CREATED???????????? SIZE

can-test-torizon???? latest????????????? 3f1a2122de1c??????? 10 minutes ago????? 236MB

### run docker image

$ docker run -it --rm --name=can-test-torizon --net=host --cap-add="NET_ADMIN" -v /dev:/dev -v /tmp:/tmp -v /run/udev/:/run/udev/ can-test-torizon

-------------------------------



5). CAN通訊測(cè)試

a).?在上述Colibri iMX8x啟動(dòng)的docker image里面使能can1接口

-------------------------------

### set can1 interface up

/home/torizon# ip link set can1 type can bitrate 1000000

/home/torizon# ip link set can1 up

### check can1 interface

/home/torizon# ifconfig can1

can1: flags=193<UP,RUNNING,NOARP>? mtu 16

??????? unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00? txqueuelen 10? (UNSPEC)

??????? RX packets 0? bytes 0 (0.0 B)

??????? RX errors 0? dropped 0? overruns 0? frame 0

??????? TX packets 0? bytes 0 (0.0 B)

??????? TX errors 0? dropped 0 overruns 0? carrier 0? collisions 0

??????? device interrupt 69?

-------------------------------


b).?繼續(xù)在docker image里面創(chuàng)建如下”can-test.sh”腳本用于間隔50ms連續(xù)發(fā)送CAN標(biāo)準(zhǔn)包

-------------------------------

#!/bin/bash


for ((i=1; i<=20; i++))

do

cansend can1 01F#1122334455667788

sleep 0.05

done

-------------------------------


c).?在Apalis iMX8QM Linux下運(yùn)行下面命令使能can0接口并準(zhǔn)備進(jìn)行CAN包接收

-------------------------------

root@apalis-imx8:~# ip link set can0 type can bitrate 1000000

root@apalis-imx8:~# ip link set can0 up

root@apalis-imx8:~# candump can0

-------------------------------


d).?在colibri imx8x docker內(nèi)執(zhí)行上面創(chuàng)建的腳本發(fā)送CAN包

-------------------------------

/home/torizon# chmod +x can-test.sh

/home/torizon# ./can-test.sh

-------------------------------


e). Apalis iMX8QM接收到對(duì)應(yīng)的CAN包

-------------------------------

root@apalis-imx8:~# candump can0

? can0? 01F?? [8]? 11 22 33 44 55 66 77 88

? can0? 01F?? [8]? 11 22 33 44 55 66 77 88

? can0? 01F?? [8]? 11 22 33 44 55 66 77 88

? can0? 01F ??[8]? 11 22 33 44 55 66 77 88

? can0? 01F?? [8]? 11 22 33 44 55 66 77 88

? can0? 01F?? [8]? 11 22 33 44 55 66 77 88

? can0? 01F?? [8]? 11 22 33 44 55 66 77 88

? can0? 01F?? [8]? 11 22 33 44 55 66 77 88

? can0? 01F?? [8]? 11 22 33 44 55 66 77 88

? can0? 01F?? [8]? 11 22 33 44 55 66 77 88

? can0? 01F?? [8]? 11 22 33 44 55 66 77 88

? can0? 01F?? [8]? 11 22 33 44 55 66 77 88

? can0? 01F?? [8]? 11 22 33 44 55 66 77 88

? can0? 01F?? [8]? 11 22 33 44 55 66 77 88

? can0? 01F?? [8]? 11 22 33 44 55 66 77 88

? can0? 01F?? [8]? 11 22 33 44 55 66 77 88

? can0? 01F?? [8]? 11 22 33 44 55 66 77 88

? can0? 01F?? [8]? 11 22 33 44 55 66 77 88

? can0? 01F?? [8]? 11 22 33 44 55 66 77 88

? can0? 01F?? [8]? 11 22 33 44 55 66 77 88

-------------------------------


f).?將發(fā)送和接收互換后測(cè)試也同樣結(jié)果

-------------------------------

### Apalis iMX8QM?發(fā)送

root@apalis-imx8:~# ./can-test.sh

### Colibri iMX8x接收

/home/torizon# candump can1

? can1? 01F?? [8]? 11 22 33 44 55 66 77 88

? can1? 01F?? [8]? 11 22 33 44 55 66 77 88

? can1? 01F?? [8]? 11 22 33 44 55 66 77 88

? can1? 01F?? [8]? 11 22 33 44 55 66 77 88

? can1? 01F?? [8]? 11 22 33 44 55 66 77 88

? can1? 01F?? [8]? 11 22 33 44 55 66 77 88

? can1? 01F?? [8]? 11 22 33 44 55 66 77 88

? can1? 01F?? [8]? 11 22 33 44 55 66 77 88

? can1? 01F?? [8]? 11 22 33 44 55 66 77 88

? can1? 01F?? [8]? 11 22 33 44 55 66 77 88

? can1? 01F?? [8]? 11 22 33 44 55 66 77 88

? can1? 01F?? [8]? 11 22 33 44 55 66 77 88

? can1? 01F?? [8]? 11 22 33 44 55 66 77 88

? can1? 01F?? [8]? 11 22 33 44 55 66 77 88

? can1? 01F?? [8]? 11 22 33 44 55 66 77 88

? can1? 01F?? [8]? 11 22 33 44 55 66 77 88

? can1? 01F?? [8]? 11 22 33 44 55 66 77 88

? can1? 01F?? [8]? 11 22 33 44 55 66 77 88

? can1? 01F?? [8]? 11 22 33 44 55 66 77 88

? can1? 01F?? [8]? 11 22 33 44 55 66 77 88

-------------------------------



6).?總結(jié)

本文使用NXP iMX8X嵌入式平臺(tái)配合嵌入式Linux?和Docker平臺(tái)測(cè)試CAN通信,相比原生CAN通信森逮,利用Docker技術(shù)可以更靈活的用包管理方式安裝所需的組件榨婆,同時(shí)在不同平臺(tái)遷移也相對(duì)更簡(jiǎn)單,但需要注意的是在Docker環(huán)境下訪問(wèn)主機(jī)外設(shè)需要對(duì)cgroup權(quán)限做正確的設(shè)置以保證可以順利加載褒侧。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末良风,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子闷供,更是在濱河造成了極大的恐慌烟央,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,539評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件歪脏,死亡現(xiàn)場(chǎng)離奇詭異吊档,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)唾糯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門(mén)怠硼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人移怯,你說(shuō)我怎么就攤上這事香璃。” “怎么了舟误?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,871評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵葡秒,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我嵌溢,道長(zhǎng)眯牧,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,963評(píng)論 1 295
  • 正文 為了忘掉前任赖草,我火速辦了婚禮学少,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘秧骑。我一直安慰自己版确,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布乎折。 她就那樣靜靜地躺著绒疗,像睡著了一般。 火紅的嫁衣襯著肌膚如雪骂澄。 梳的紋絲不亂的頭發(fā)上吓蘑,一...
    開(kāi)封第一講書(shū)人閱讀 51,763評(píng)論 1 307
  • 那天,我揣著相機(jī)與錄音坟冲,去河邊找鬼磨镶。 笑死溃蔫,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的棋嘲。 我是一名探鬼主播,決...
    沈念sama閱讀 40,468評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼矩桂,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼沸移!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起侄榴,我...
    開(kāi)封第一講書(shū)人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤雹锣,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后癞蚕,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體蕊爵,經(jīng)...
    沈念sama閱讀 45,850評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評(píng)論 3 338
  • 正文 我和宋清朗相戀三年桦山,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了攒射。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,144評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡恒水,死狀恐怖会放,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情钉凌,我是刑警寧澤咧最,帶...
    沈念sama閱讀 35,823評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站御雕,受9級(jí)特大地震影響矢沿,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜酸纲,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評(píng)論 3 331
  • 文/蒙蒙 一捣鲸、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧闽坡,春花似錦摄狱、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,026評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至宪迟,卻和暖如春酣衷,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背次泽。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,150評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工穿仪, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留席爽,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,415評(píng)論 3 373
  • 正文 我出身青樓啊片,卻偏偏與公主長(zhǎng)得像只锻,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子紫谷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容