0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于嵌入式Linux 和Docker平台测试CAN通信

星星科技指导员 来源:eetop 作者:toradex 2024-02-19 09:39 次阅读

1).简介

随着嵌入式设备的发展,由于部署更灵活应用方便等特性,原本在网络应用中广泛使用的docker技术也慢慢在一些嵌入式设备中应用,因此本文就基于嵌入式ARM平台使用集成docker技术的Liinux系统来测试CAN通信功能。

本文所演示的平台来自于Toradex Colibri iMX8X ARM嵌入式平台,这是一个基于NXP iMX8X ARM处理器,支持Cortex-A35和Coretex-M4架构的计算机模块平台。

2.准备

a).Colibri iMX8X 2GB WB ITARM核心版配合Colibri Evaluation载板,连接调试串口UART1(载板X27)到开发主机方便调试。

b). Colibri iMX8X通过Toradex Easy Installer安装包含Docker支持的Torizon Linux操作系统,目前最新的monthly发布TorizonCore 5.1.0-devel-202012+build.6

c).Apalis iMX8QM4GB 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接口

c3b43493ab6fcd4d5bb2e8a168433638.png

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 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权限做正确的设置以保证可以顺利加载。

审核编辑:黄飞

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • ARM
    ARM
    +关注

    关注

    134

    文章

    8653

    浏览量

    361844
  • 嵌入式
    +关注

    关注

    4983

    文章

    18294

    浏览量

    288569
  • CAN
    CAN
    +关注

    关注

    56

    文章

    2471

    浏览量

    459312
  • Linux
    +关注

    关注

    87

    文章

    10992

    浏览量

    206742
  • Docker
    +关注

    关注

    0

    文章

    437

    浏览量

    11603
收藏 人收藏

    评论

    相关推荐

    嵌入式Linux学习步骤

    Linux内核 编译并下载Linux应用程序  5、 嵌入式系统移植  Linux内核代码 平台相关代码分析 ARM
    发表于 05-04 15:01

    什么是嵌入式Linux

    relay、远程通信、医疗电子、交通运输、计算机外设、工业控制、航空领域等。五、嵌入式linux的优势嵌入式Linux的开发和研究是操作系
    发表于 01-23 11:59

    嵌入式Linux学习步骤

    下载Linux内核 编译并下载Linux应用程序5、嵌入式系统移植Linux内核代码 平台相关代码分析 ARM
    发表于 03-24 10:41

    嵌入式linux学习步骤

    Linux内核代码 平台相关代码分析 ARM平台介绍 平台移植的关键技术 移植Linux内核到 ARM
    发表于 09-12 14:23

    嵌入式linux学习步骤

    嵌入式系统移植Linux内核代码 平台相关代码分析 ARM平台介绍 平台移植的关键技术 移植Linux
    发表于 10-25 10:12

    嵌入式Linux学习步骤

    ARM平台 了解移植的概念 能够移植Linux内核移植Linux2.6内核到 ARM9开发板 6、嵌入式 Linux 下串口
    发表于 07-03 00:56

    初学者嵌入式linux系统的学习步骤

    嵌入式系统移植Linux内核代码 平台相关代码分析 ARM平台介绍 平台移植的关键技术 移植Linux
    发表于 01-18 10:34

    嵌入式linux学习步骤

    嵌入式系统移植Linux内核代码 平台相关代码分析 ARM平台介绍 平台移植的关键技术 移植Linux
    发表于 09-08 11:51

    工业嵌入式计算平台开发招聘

    西电移动计算与通信团队招聘:嵌入式软件开发(专职或兼职)研究方向:工业嵌入式计算平台开发。需求人数:1人要求:1、熟悉linux操作系统和
    发表于 10-12 09:32

    嵌入式Linux CAN的相关资料推荐

    文章目录前言CAN终端测试SocketCANC语言CAN发送示例C语言CAN接收示例微信公众号前言这是前篇:嵌入式
    发表于 10-27 09:40

    嵌入式Linux network的相关资料分享

    文章目录前言网络通信简介服务器程序客户端程序运行微信公众号前言这是前篇:嵌入式Linux i.MX开发板嵌入式Linux NFS
    发表于 11-05 09:29

    嵌入式系统测试教学实训平台由哪几部分组成

    使用手册等2.2教学实验箱凯云嵌入式系统测试教学实训平台实验箱由测件板(待测系统)、Andriod显示板、多功能接口板、串口通信板(RS232)、C
    发表于 12-21 08:09

    嵌入式系统安装docker的步骤

    系列文章目录docker 门外初体验–嵌入式系统安装docker(九)文章目录系列文章目录前言一、设计思路二、操作要点三、验证四、总结前言嵌入式开发精髓在于软硬件的结合,如果
    发表于 12-22 06:27

    嵌入式LinuxCAN接口调试

    CAN(Controller Area Network)总线是嵌入式设备最为常用的接口之一,常用于汽车以及工业自动化等嵌入式领域,因此本文就基于嵌入式
    发表于 04-29 16:40 3071次阅读

    嵌入式Linux CAN

    文章目录前言CAN终端测试SocketCANC语言CAN发送示例C语言CAN接收示例微信公众号前言这是前篇:嵌入式
    发表于 10-19 18:33 6次下载
    <b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b> <b class='flag-5'>CAN</b>