"); //-->
By Toradex秦海
1). 简介
随着嵌入式设备的发展,由于部署更灵活应用方便等特性,原本在网络应用中广泛使用的docker技术也慢慢在一些嵌入式设备中应用,因此本文就基于嵌入式ARM平台使用集成docker技术的Liinux系统来测试CAN通信功能。
本文所演示的平台来自于Toradex Colibri iMX8X ARM嵌入式平台,这是一个基于NXP iMX8X ARM处理器,支持Cortex-A35和Coretex-M4架构的计算机模块平台。
2. 准备
a). Colibri iMX8X 2GB WB IT ARM核心版配合Colibri Evaluation 载板,连接调试串口UART1(载板X27)到开发主机方便调试。
b). Colibri iMX8X 通过Toradex Easy Installer 安装包含Docker支持的Torizon Linux操作系统,目前最新的monthly发布 TorizonCore 5.1.0-devel-202012+build.6
c). Apalis iMX8QM 4GB WB IT ARM核心版配合Ioxra 载板,连接调试串口UART1(载板X22)到开发主机方便调试。
d). Apalis iMX8QM同样通过Toradex Easy Installer安装标准嵌入式Linux 用于CAN接口测试时候对接,系统版本为Linux Reference Multimedia 5.1.0-devel-202012
3). 测试系统配置
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接口,需要通过如下device tree overlay配置修改为iMX8X的两个FlexCAN接口
./ device tree overlay的基本说明请参考这里,编译方法请参考这里。
./ overlay 源文件请参考如下链接
./ 将上述源文件编译好的overlay文件(可以从这里下载)根据这里的说明部署到Colibri iMX8X上
4). 部署CAN测试Docker image
a). 首先参考这里的说明在开发PC上面配置Docker编译环境
b). 在开发PC创建如下Dockerfile 用于进行CAN测试
-------------------------------
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文件,当然也可以上传到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标准包
-------------------------------
#!/bin/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权限做正确的设置以保证可以顺利加载。
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
LCD显示屏出现闪烁的原因与解决
第二届飞思卡尔智能车比赛全国第5名视频
Melexis扩展其IMC-Hall电流传感器芯片
Look! For Tornado提供run-time结构的图形显示以及与传统源级调试显示同步的C C++应用程序的执行状况
哪位需要触摸屏!跟我来啊!
第二届飞思卡尔智能车比赛全国第4名视频
抗水解:适用于苛刻环境下的耐用型PPA产品
长期抹黑中国新能源 蔚来法务部:“车曝台”一审败诉
被“群嘲”退出具身机器人后 朱啸虎公开发声:所有的AI应用都是套壳
第二届飞思卡尔智能车比赛全国第6名视频
华为智能汽车业务首次实现盈利:销售收入同比增长474%
lcd仿真器
全球营收快破万亿元 1年研发费1797亿!孟晚舟:华为2025年将以质取胜
龙旗科技集团招聘Linux智能手机研发工程师:图形库移植/GUI设计和应用工程师
高通时代即将终结!iPad Pro将搭载苹果自研基带芯片
COLOR 620型彩色显示器的电源电路图
松下TC-43P18G背投彩电电源电路
站长写得基于arm核的RTOS操作系统
led,key,i2c,uart,adc,rtc,wdt测试程序 -------------使用说明
长虹HP5188背投彩电电源电路
第二届飞思卡尔智能车比赛全国第3名视频
功率电感器的额定电流为什么有两种?
SUNLIHTSM-1416型彩色显示器的电源电路
比亚迪打假办公室:在印度投资建厂的信息不属实!
第二届飞思卡尔智能车比赛全国第7名视频
介绍如何在Linux上添加硬实时功能--好资料
四路输出12位 D A转换器DAC8420
LG PT-48A82背投彩电电源电路
阿法拉伐拓展卫生阀门产品组合,提高安全、效率与可靠性
TMS320F240 UCOS移植原代码---吐血推荐