0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于嵌入式Linux 和Docker平臺測試CAN通信

星星科技指導(dǎo)員 ? 來源:eetop ? 作者:toradex ? 2024-02-19 09:39 ? 次閱讀

1).簡介

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

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

2.準(zhǔn)備

a).Colibri iMX8X 2GB WB ITARM核心版配合Colibri Evaluation載板,連接調(diào)試串口UART1(載板X27)到開發(fā)主機方便調(diào)試。

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

c).Apalis iMX8QM4GB WB IT ARM核心版配合Ioxra載板,連接調(diào)試串口UART1(載板X22)到開發(fā)主機方便調(diào)試。

d). Apalis iMX8QM同樣通過Toradex Easy Installer安裝標(biāo)準(zhǔn)嵌入式Linux用于CAN接口測試時候?qū)?,系統(tǒng)版本為Linux Reference Multimedia 5.1.0-devel-202012

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

a). Colibri iMX8X CAN接口對應(yīng)管腳說明如下,本文測試使用FlexCAN1接口

c3b43493ab6fcd4d5bb2e8a168433638.png

b).測試系統(tǒng)如下硬件連接將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系統(tǒng)默認(rèn)使能的是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文件(可以從這里下載)根據(jù)這里的說明部署到Colibri iMX8X上

4).部署CAN測試Docker image

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

b).在開發(fā)PC創(chuàng)建如下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文件,當(dāng)然也可以上傳到dockerhub上面通過在線的方式在設(shè)備安裝

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

$ docker build -t can-test-torizon .

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

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

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

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

### 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).繼續(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下運行下面命令使能can0接口并準(zhǔ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接收到對應(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ā)送和接收互換后測試也同樣結(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嵌入式平臺配合嵌入式Linux和Docker平臺測試CAN通信,相比原生CAN通信,利用Docker技術(shù)可以更靈活的用包管理方式安裝所需的組件,同時在不同平臺遷移也相對更簡單,但需要注意的是在Docker環(huán)境下訪問主機外設(shè)需要對cgroup權(quán)限做正確的設(shè)置以保證可以順利加載。

審核編輯:黃飛

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • ARM
    ARM
    +關(guān)注

    關(guān)注

    134

    文章

    9105

    瀏覽量

    367895
  • 嵌入式
    +關(guān)注

    關(guān)注

    5086

    文章

    19141

    瀏覽量

    305928
  • CAN
    CAN
    +關(guān)注

    關(guān)注

    57

    文章

    2756

    瀏覽量

    463870
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11314

    瀏覽量

    209773
  • Docker
    +關(guān)注

    關(guān)注

    0

    文章

    474

    瀏覽量

    11867
收藏 人收藏

    評論

    相關(guān)推薦

    工業(yè)嵌入式計算平臺開發(fā)招聘

    西電移動計算與通信團隊招聘:嵌入式軟件開發(fā)(專職或兼職)研究方向:工業(yè)嵌入式計算平臺開發(fā)。需求人數(shù):1人要求:1、熟悉linux操作系統(tǒng)和
    發(fā)表于 10-12 09:32

    嵌入式Linux CAN的相關(guān)資料推薦

    文章目錄前言CAN終端測試SocketCANC語言CAN發(fā)送示例C語言CAN接收示例微信公眾號前言這是前篇:嵌入式
    發(fā)表于 10-27 09:40

    嵌入式Linux network的相關(guān)資料分享

    文章目錄前言網(wǎng)絡(luò)通信簡介服務(wù)器程序客戶端程序運行微信公眾號前言這是前篇:嵌入式Linux i.MX開發(fā)板嵌入式Linux NFS
    發(fā)表于 11-05 09:29

    嵌入式系統(tǒng)測試教學(xué)實訓(xùn)平臺由哪幾部分組成

    使用手冊等2.2教學(xué)實驗箱凱云嵌入式系統(tǒng)測試教學(xué)實訓(xùn)平臺實驗箱由測件板(待測系統(tǒng))、Andriod顯示板、多功能接口板、串口通信板(RS232)、C
    發(fā)表于 12-21 08:09

    嵌入式系統(tǒng)安裝docker的步驟

    系列文章目錄docker 門外初體驗–嵌入式系統(tǒng)安裝docker(九)文章目錄系列文章目錄前言一、設(shè)計思路二、操作要點三、驗證四、總結(jié)前言嵌入式開發(fā)精髓在于軟硬件的結(jié)合,如果
    發(fā)表于 12-22 06:27

    PXA255上的嵌入式Linux應(yīng)用平臺說明

    PXA255上的嵌入式Linux應(yīng)用平臺說明
    發(fā)表于 03-28 09:52 ?28次下載

    嵌入式Linux

    嵌入式Linux隨著Linux的迅速發(fā)展,嵌入式Linux現(xiàn)在已經(jīng)有許多的版本,包括強實時的嵌入式
    發(fā)表于 06-17 00:36 ?948次閱讀

    嵌入式LINUX開發(fā)基礎(chǔ)知識

    嵌入式LINUX簡介,嵌入式LINUX開發(fā)平臺簡介,嵌入式L
    發(fā)表于 07-31 21:34 ?261次下載

    Linux嵌入式系統(tǒng)與硬件平臺的關(guān)系

    Linux嵌入式系統(tǒng)與硬件平臺的關(guān)系
    發(fā)表于 09-25 15:08 ?10次下載

    嵌入式LinuxCAN接口調(diào)試

    CAN(Controller Area Network)總線是嵌入式設(shè)備最為常用的接口之一,常用于汽車以及工業(yè)自動化等嵌入式領(lǐng)域,因此本文就基于嵌入式
    發(fā)表于 04-29 16:40 ?3279次閱讀

    嵌入式Linux CAN

    文章目錄前言CAN終端測試SocketCANC語言CAN發(fā)送示例C語言CAN接收示例微信公眾號前言這是前篇:嵌入式
    發(fā)表于 10-19 18:33 ?6次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b> <b class='flag-5'>CAN</b>

    嵌入式linux和桌面linux的區(qū)別

    嵌入式linux和桌面linux的區(qū)別主要區(qū)別是:1. 硬件平臺嵌入式Linux一般是Mips
    發(fā)表于 10-20 15:36 ?4次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>linux</b>和桌面<b class='flag-5'>linux</b>的區(qū)別

    嵌入式linux開發(fā)環(huán)境搭建(Docker版,基于iTop 4412開發(fā)板)

    嵌入式linux開發(fā)環(huán)境搭建(Docker版,基于iTop 4412開發(fā)板)文章目錄嵌入式linux開發(fā)環(huán)境搭建(
    發(fā)表于 11-01 16:57 ?0次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>linux</b>開發(fā)環(huán)境搭建(<b class='flag-5'>Docker</b>版,基于iTop 4412開發(fā)板)

    嵌入式linux讀寫can收發(fā)簡單示例基于socket can

    嵌入式linux讀寫can簡單示例
    發(fā)表于 11-01 17:07 ?14次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>linux</b>讀寫<b class='flag-5'>can</b>收發(fā)簡單示例基于socket <b class='flag-5'>can</b>

    嵌入式Linux network

    文章目錄前言網(wǎng)絡(luò)通信簡介服務(wù)器程序客戶端程序運行微信公眾號前言這是前篇:嵌入式Linux i.MX開發(fā)板嵌入式Linux NFS
    發(fā)表于 11-02 10:51 ?15次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b> network