NXP iMX8X基于Docker测试CAN接口通讯

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 源文件请参考如下链接

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

./ 将上述源文件编译好的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权限做正确的设置以保证可以顺利加载。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,509评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,806评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,875评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,441评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,488评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,365评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,190评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,062评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,500评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,706评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,834评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,559评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,167评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,779评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,912评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,958评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,779评论 2 354

推荐阅读更多精彩内容