By Toradex秦海
http://www.Sina.com/http://www.Sina.com /
随着嵌入式应用的发展,由于部署更加灵活、应用方便等特性,原本在网络APP应用中广泛使用的docker技术也在一些嵌入式应用中逐渐得到应用,因此本文基于嵌入式ARM平台对docker技术
本演示的平台由Toradex Colibri iMX8X ARM嵌入式平台提供。 Toradex Colibri iMX8X ARM是基于NXP iMX8X ARM处理器并支持Cortex-A35和Coretex-M4体系结构的计算机模块平台。
http://www.Sina.com/http://www.Sina.com /
a ).Colibri iMX8X 2GB WB ITARM核心版与Colibri Evaluation承载板配合使用,方便将调试串行UART1(承载板X27 )连接到开发主机进行调试。
b ).Colibri iMX8X通过Toradex Easy Installer安装了包括Docker支持在内的Torizon Linux操作系统,当前最新的monthly是torizoncore5.1.0- -
c ).Apalis iMX8QM4GB WB IT ARM核心版与Ioxra承载板配合使用,便于将调试串行UART1(承载板X22 )连接到开发主机进行调试。
d ).Apalis iMX8QM也同样通过Toradex Easy Installer安装标准嵌入式Linux,用于CAN接口测试时的坞站。 系统版本为linuxreferencemultimedia5.1.0- devel-202012
http://www.Sina.com/http://www.Sina.com /
a ).Colibri iMX8X CAN接口管脚说明如下。 本文测试和使用FlexCAN1接口
b )测试系统通过以下硬件连接连接Colibri iMX8X CAN1和Apalis iMX8QM CAN0接口
断开./Colibri Eva Board JP4和JP5跳线,将X9连接器SODIMM_55和SODIMM_63针脚分别连接到X38连接器TX和RX插座。
./Colibri Eva Board X2 Top DB9引脚2和7通过两端配置120Ohm端接电阻的连接和Ixora承载板X20引脚1和2连接。
c ).Colibri iMX8X TorizonCore linux系统上默认启用的是Colibri Evaluation Board承载板上方的MCP2515 SPI CAN接口,其中包括
. /设备树概述的基本说明见此处,编译方法见此处。
./overlay源文件请参考以下链接
3359 gitee.com/Simon Qin 09/colibri _ imx8x _ flex can/blob/master/colibri-imx8x _ enable _ flex can _ overlay
. /编译了上述源文件的overlay文件(可以从这里下载) (按照此处的说明部署到Colibri iMX8X ) ) ) ) ) ) ) ) )。
3358 www.Sina.com/http://www.Sina.com/http://www.Sina.com/http://www.Sina.com /
a ) .首先参考这里的说明在开发PC上配置Docker编译环境
b ) .在开发PC上为CAN测试创建以下文档文件
-------------请参阅
ARG IMAGE_ARCH=arm64v8
# usetheparameterbelowforarm 32位(like imx6and imx7)。
# ARG IMAGE_ARCH=arm32v7
fromto rizon/$ image _ arch-debian-shell :1.0
WORKDIR /home/torizon
runapt-get-yupdateapt-get install-y
nano () )。
python3
python3-pip
python3-setuptools
git
iproute2
> can-utilsnet-tools
vim
python3-can
&& apt-get clean && apt-get autoremove && rm -rf /var/lib/apt/lists/*
-------------------------------
c). 如下编译并打包成离线Docker image文件,当然也可以上传到dockerhub上面通过在线的方式在设备安装
-------------------------------
$ docker build -t can-test-torizon .
$ docker save -o can-test-torizon.tar can-test-torizon
-------------------------------
e). 将上面打包好的docker image复制到Colibri iMX8x设备上面,并安装并运行
-------------------------------
### 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通讯测试
a). 在上述Colibri iMX8x启动的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). 继续在docker image里面创建如下”can-test.sh”脚本用于间隔50ms连续发送CAN标准包
-------------------------------
#!/dydqyg/bash
for ((i=1; i<=20; i++))
do
cansend can1 01F#1122334455667788
sleep 0.05
done
-------------------------------
c). 在Apalis iMX8QM Linux下运行下面命令使能can0接口并准备进行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内执行上面创建的脚本发送CAN包
-------------------------------
/home/torizon# chmod +x can-test.sh
/home/torizon# ./can-test.sh
-------------------------------
e). Apalis iMX8QM接收到对应的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). 将发送和接收互换后测试也同样结果
-------------------------------
### Apalis iMX8QM 发送
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). 总结
本文使用NXP iMX8X嵌入式平台配合嵌入式Linux 和Docker平台测试CAN通信,相比原生CAN通信,利用Docker技术可以更灵活的用包管理方式安装所需的组件,同时在不同平台迁移也相对更简单,但需要注意的是在Docker环境下访问主机外设需要对cgroup权限做正确的设置以保证可以顺利加载。