前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >米尔Remi Pi 实时系统与EtherCAT移植

米尔Remi Pi 实时系统与EtherCAT移植

原创
作者头像
用户10591265
发布2024-04-30 17:59:59
690
发布2024-04-30 17:59:59
举报
文章被收录于专栏:米尔电子米尔电子

1.概述

Remi Pi采用瑞萨RZ/G2L作为核心处理器,该处理器搭载双核Cortex-A55@1.2GHz+Cortex-M33@200MHz处理器,其内部集成高性能3D加速引擎Mail-G31 GPU(500MHz)和视频处理单元(支持H.264硬件编解码),16位的DDR4-1600 / DDR3L-1333内存控制器、千兆以太网控制器、USB、CAN、SD卡、MIPI-CSI等外设接口,在工业、医疗、电力等行业都得到广泛的应用。

在开发阶段,建议配合核心板配套的评估套件 MYD-YG2L23-8E1D-120-C-REMI来加速开发。评估套件的详细信息请访问:https://www.myir.cn/shows/23/14.html

2.实时内核设计

  • 实时补丁我们选择RT-Preempt来实现

2.1.?移植补丁

RT补丁可以从RT官网下载5.10.83对应的补丁

https://cdn.kernel.org/pub/linux/kernel/projects/rt/5.10/older/

  • 把补丁放到自己的工作目录下,然后解压,如图2-1:
代码语言:javascript
复制
hjx@myir-server:~/renesas/04_Sources$?tar?-xvf?patches-5.10.83-rt58.tar.gz

图2-1. 内核源码
图2-1. 内核源码
  • 进入到内核源码打补丁,如图2-2:
代码语言:javascript
复制
hjx@myir-server:~/renesas/04_Sources/myir-renesas-linux$?for?p?in?`ls?-1?../patches/*.patch`;?do?patch?-p1?<?$p;?done

图2-2. 打实时补丁
图2-2. 打实时补丁

编译内核源码

代码语言:javascript
复制
hjx@myir-server:~/renesas/04_Sources/myir-renesas-linux$?/opt/remi-sdk/environment-setup-aarch64-poky-linux
hjx@myir-server:~/renesas/04_Sources/myir-renesas-linux$?make?ARCH=arm64?mys_g2lx_defconfig
hjx@myir-server:~/renesas/04_Sources/myir-renesas-linux$?make?ARCH=arm64?Image?dtbs???-j16

更新编译得到的Image即可

2.2.?其他影响性能的配置

禁用CPU Freq自动调频,并设置主频为最高频率:

代码语言:javascript
复制
cd?/sys/devices/system/cpu/cpufreq/policy0
echo?userspace?>?scaling_governor
cat?scaling_max_freq??>?scaling_setspeed

(如不禁用cpufreq调频功能,系统会因动态调频产生极大的偶然延迟)

3.实时性测试

  • 空载测试
代码语言:javascript
复制
cyclictest?-p?99?-t?1?-d?100?-i?1000?-D?24h?-m?-a?-n

图3-1.空载测试
图3-1.空载测试
  • CPU&内存满载
代码语言:javascript
复制
cyclictest?-p?99?-t?1?-d?100?-i?1000?-D?24h?-m?-a?-n
  • 增加压力
代码语言:javascript
复制
stress-ng?--cpu?4?--cpu-method?all?--io?4?--vm?50?-d?5?--fork?4?--timeout?36000s

图3-2.满载测试
图3-2.满载测试

数据对比:

板卡

MYD-YG2LX-REMI

测试时间

120min

指令

cyclictest &stress-ng

空载

平均?8us最大?24us

满载

平均?13us最大?136us

表3-1.数据信息

4.EtherCAT IGH移植

4.1.?下载EtherCAT IGH源码

到官网下载1.5版本的EtherCAT源码,如图4-1:

https://gitlab.com/etherlab.org/ethercat/-/tree/stable-1.5?ref_type=heads

图4-1. 下载源码
图4-1. 下载源码

解压EtherCAT源码

代码语言:javascript
复制
hjx@myir-server:~/renesas/04_Sources$?tar?-xvf?ethercat-stable-1.5.tar.bz2
hjx@myir-server:~/renesas/04_Sources$?cd?ethercat-stable-1.5
  • 加载sdk环境变量
代码语言:javascript
复制
hjx@myir-server:~/renesas/04_Sources/myir-renesas-linux$?source?/opt/remi-sdk/environment-setup-aarch64-poky-linux

4.2.?编译EtherCAT源码

  • 生成configure文件
代码语言:javascript
复制
hjx@myir-server:~/renesas/04_Sources/ethercat-stable-1.5$?./bootstrap
+?touch?ChangeLog
+?mkdir?-p?m4
+?autoreconf?-i
libtoolize:?putting?auxiliary?files?in?AC_CONFIG_AUX_DIR,?'autoconf'.
libtoolize:?copying?file?'autoconf/ltmain.sh'
libtoolize:?putting?macros?in?AC_CONFIG_MACRO_DIRS,?'m4'.
libtoolize:?copying?file?'m4/libtool.m4'
libtoolize:?copying?file?'m4/ltoptions.m4'
libtoolize:?copying?file?'m4/ltsugar.m4'
libtoolize:?copying?file?'m4/ltversion.m4'
libtoolize:?copying?file?'m4/lt~obsolete.m4'
configure.ac:56:?installing?'autoconf/ar-lib'
configure.ac:55:?installing?'autoconf/compile'
configure.ac:58:?installing?'autoconf/config.guess'
configure.ac:58:?installing?'autoconf/config.sub'
configure.ac:42:?installing?'autoconf/install-sh'
configure.ac:42:?installing?'autoconf/missing'
examples/dc_user/Makefile.am:?installing?'autoconf/depcomp'
  • configure设置
代码语言:javascript
复制
hjx@myir-server:~/renesas/04_Sources/ethercat-stable-1.5$?mkdir??output
hjx@myir-server:~/renesas/04_Sources/ethercat-stable-1.5$?./configure?--prefix=/home/hjx/renesas/04_Sources/ethercat-stable-1.5/output?--with-linux-dir=/home/hjx/renesas/04_Sources/myir-renesas-linux??--enable-8139too=no??--enable-generic=yes???--host=aarch64-poky-linux

(--prefix=/home/hjx/renesas/04_Sources/output?指定输出目录、--with-linux-dir=/home/hjx/renesas/04_Sources/myir-renesas-linux指定内核源码目录)

代码语言:javascript
复制
configure:?loading?site?script?/opt/remi-sdk/site-config-aarch64-poky-linux
checking?for?a?BSD-compatible?install...?/usr/bin/install?-c
checking?whether?build?environment?is?sane...?yes
checking?for?aarch64-poky-linux-strip...?aarch64-poky-linux-strip
checking?for?a?thread-safe?mkdir?-p...?/bin/mkdir?-p
checking?for?gawk...?gawk
checking?whether?make?sets?$(MAKE)...?yes
checking?whether?make?supports?nested?variables...?yes
checking?whether?make?supports?nested?variables...?(cached)?yes
checking?for?a?sed?that?does?not?truncate?output...?(cached)?sed
checking?for?aarch64-poky-linux-pkg-config...?no
checking?for?pkg-config...?/opt/remi-sdk/sysroots/x86_64-pokysdk-linux/usr/bin/pkg-config
checking?pkg-config?is?at?least?version?0.9.0...?yes
checking?whether?make?supports?the?include?directive...?yes?(GNU?style)
..........
...............
config.status:?creating?examples/xenomai/Makefile
config.status:?creating?examples/xenomai_posix/Makefile
config.status:?creating?include/Makefile
config.status:?creating?lib/Makefile
config.status:?creating?lib/libethercat.pcconfig.status:?creating?master/Kbuild
config.status:?creating?master/Makefileconfig.status:?creating?script/Makefile
config.status:?creating?script/init.d/Makefile
config.status:?creating?script/init.d/ethercat
config.status:?creating?script/sysconfig/Makefile
config.status:?creating?tool/Makefile
config.status:?creating?tty/Kbuild
config.status:?creating?tty/Makefile
config.status:?creating?config.h
config.status:?executing?depfiles?commands
config.status:?executing?libtool?commands
  • 编译源码
代码语言:javascript
复制
hjx@myir-server:~/renesas/04_Sources/ethercat-stable-1.5$???make
make?all-recursive
make[1]:?Entering?directory?'/home/hjx/renesas/04_Sources/ethercat-stable-1.5'
Making?all?in?include
make[2]:?Entering?directory?'/home/hjx/renesas/04_Sources/ethercat-stable-1.5/include'
make[2]:?Nothing?to?be?done?for?'all'.
make[2]:?Leaving?directory?'/home/hjx/renesas/04_Sources/ethercat-stable-1.5/include'
Making?all?in?script
make[2]:?Entering?directory?'/home/hjx/renesas/04_Sources/ethercat-stable-1.5/script'
Making?all?in?init.d
make[3]:?Entering?directory?'/home/hjx/renesas/04_Sources/ethercat-stable-1.5/script/init.d'
make[3]:?Nothing?to?be?done?for?'all'.
make[3]:?Leaving?directory?'/home/hjx/renesas/04_Sources/ethercat-stable-1.5/script/init.d'
Making?all?in?sysconfig
make[3]:?Entering?directory?'/home/hjx/renesas/04_Sources/ethercat-stable-1.5/script/sysconfig'
make[3]:?Nothing?to?be?done?for?'all'.
make[3]:?Leaving?directory?'/home/hjx/renesas/04_Sources/ethercat-stable-1.5/script/sysconfig'
......
......
make[3]:?Leaving?directory?'/home/hjx/renesas/04_Sources/ethercat-stable-1.5/examples/user'
make[3]:?Entering?directory?'/home/hjx/renesas/04_Sources/ethercat-stable-1.5/examples'
make[3]:?Nothing?to?be?done?for?'all-am'.
make[3]:?Leaving?directory?'/home/hjx/renesas/04_Sources/ethercat-stable-1.5/examples'
make[2]:?Leaving?directory?'/home/hjx/renesas/04_Sources/ethercat-stable-1.5/examples'
make[2]:?Entering?directory?'/home/hjx/renesas/04_Sources/ethercat-stable-1.5'
make[2]:?Leaving?directory?'/home/hjx/renesas/04_Sources/ethercat-stable-1.5'
make[1]:?Leaving?directory?'/home/hjx/renesas/04_Sources/ethercat-stable-1.5'
  • 编译modules
代码语言:javascript
复制
hjx@myir-server:~/renesas/04_Sources/ethercat-stable-1.5$??make??modules
make[1]:?Entering?directory?'/home/hjx/renesas/04_Sources/myir-renesas-linux'
CC?[M]??/home/hjx/renesas/04_Sources/ethercat-stable-1.5/examples/mini/mini.o
LD?[M]??/home/hjx/renesas/04_Sources/ethercat-stable-1.5/examples/mini/ec_mini.o
CC?[M]??/home/hjx/renesas/04_Sources/ethercat-stable-1.5/master/cdev.o
CC?[M]??/home/hjx/renesas/04_Sources/ethercat-stable-1.5/master/coe_emerg_ring.o
CC?[M]??/home/hjx/renesas/04_Sources/ethercat-stable-1.5/master/datagram.o
...........
............
make[1]:?Leaving?directory?'/home/hjx/renesas/04_Sources/myir-renesas-linux'

编译通过会对应生成ethercat-stable-1.5/devices/ec_generic.ko和ethercat-stable-1.5/master/ec_master.ko

4.3.?安装EtherCAT

安装成功后前面指定/home/hjx/renesas/04_Sources/ethercat-stable-1.5/output目录下有编译生成的各种用户空间的文件。

代码语言:javascript
复制
hjx@myir-server:~/renesas/04_Sources/ethercat-stable-1.5$?make?install
Making?install?in?include
make[1]:?Entering?directory?'/home/hjx/renesas/04_Sources/ethercat-stable-1.5/include'
make[2]:?Entering?directory?'/home/hjx/renesas/04_Sources/ethercat-stable-1.5/include'
make[2]:?Nothing?to?be?done?for?'install-exec-am'.
/bin/mkdir?-p?'/home/hjx/renesas/04_Sources/ethercat-stable-1.5/output/include'/
usr/bin/install?-c?-m?644?ecrt.h?ectty.h?'/home/hjx/renesas/04_Sources/ethercat-stable-1.5/output/include'
make[2]:?Leaving?directory?'/home/hjx/renesas/04_Sources/ethercat-stable-1.5/include'
make[1]:?Leaving?directory?'/home/hjx/renesas/04_Sources/ethercat-stable-1.5/include'
Making?install?in?script
make[1]:?Entering?directory?'/home/hjx/renesas/04_Sources/ethercat-stable-1.5/script'
Making?install?in?init.d
make[2]:?Entering?directory?'/home/hjx/renesas/04_Sources/ethercat-stable-1.5/script/init.d'
make[3]:?Entering?directory?'/home/hjx/renesas/04_Sources/ethercat-stable-1.5/script/init.d'
make[3]:?Nothing?to?be?done?for?'install-exec-am'
............
..........
make[3]:?Leaving?directory?'/home/hjx/renesas/04_Sources/ethercat-stable-1.5/examples'
make[2]:?Leaving?directory?'/home/hjx/renesas/04_Sources/ethercat-stable-1.5/examples'
make[1]:?Leaving?directory?'/home/hjx/renesas/04_Sources/ethercat-stable-1.5/examples'
make[1]:?Entering?directory?'/home/hjx/renesas/04_Sources/ethercat-stable-1.5'
make[2]:?Entering?directory?'/home/hjx/renesas/04_Sources/ethercat-stable-1.5'
make[2]:?Nothing?to?be?done?for?'install-exec-am'.
make[2]:?Nothing?to?be?done?for?'install-data-am'.
make[2]:?Leaving?directory?'/home/hjx/renesas/04_Sources/ethercat-stable-1.5'
make[1]:?Leaving?directory?'/home/hjx/renesas/04_Sources/ethercat-stable-1.5'

4.4.?将EtharCAT相关文件打包

在/home/hjx/renesas/04_Sources/ethercat-stable-1.5/output目录下创建modules文件夹,并复制ec_generic.ko和ec_master.ko到modules下

代码语言:javascript
复制
hjx@myir-server:~/renesas/04_Sources/ethercat-stable-1.5$??mkdir?-p?output/modules
hjx@myir-server:~/renesas/04_Sources/ethercat-stable-1.5$??cp?devices/ec_generic.ko??output/modules/
hjx@myir-server:~/renesas/04_Sources/ethercat-stable-1.5$??cp?master/ec_master.ko???output/modules/
hjx@myir-server:~/renesas/04_Sources/ethercat-stable-1.5$?ls?output
bin?etc??include??lib??modules??sbin?share
  • 压缩output输出文件
代码语言:javascript
复制
hjx@myir-server:~/renesas/04_Sources/ethercat-stable-1.5$?tar?-jcvf?output.tar.bz2?
output/??
output/etc/
output/etc/ethercat.conf
output/etc/init.d/
output/etc/init.d/ethercat
output/etc/sysconfig/
output/etc/sysconfig/ethercat
output/sbin/
output/sbin/ethercatctl
output/include/
output/include/ectty.h
output/include/ecrt.h
output/modules/
output/modules/ec_master.ko
output/modules/ec_generic.ko
output/share/
output/share/bash-completion/
output/share/bash-completion/completions/
output/share/bash-completion/completions/ethercat
output/bin/
output/bin/ethercat
output/lib/
output/lib/libethercat.so
output/lib/pkgconfig/
output/lib/pkgconfig/libethercat.pc
output/lib/libethercat.so.1.2.0
output/lib/cmake/
output/lib/cmake/ethercat/
output/lib/cmake/ethercat/ethercat-config.cmake
output/lib/libethercat.a
output/lib/libethercat.la
output/lib/libethercat.so.1
hjx@myir-server:~/renesas/04_Sources/ethercat-stable-1.5$?ls?output.tar.bz2
output.tar.bz2

至此IGH交叉编译完成,下面是在对应arm目标板上的操作。

4.5.?移植EtherCAT相关库到开发板

将上面制作好的output.tar.bz2传到开发板上,然后解压出来。

代码语言:javascript
复制
root@myir-remi-1g:~#?tar?-xvf?output.tar.bz2output/
output/
etc/output/
etc/ethercat.conf
output/etc/init.d/
output/etc/init.d/ethercat
output/etc/sysconfig/
output/etc/sysconfig/ethercat
output/sbin/
output/sbin/ethercatctl
output/include/
output/include/ectty.h
output/include/ecrt.h
output/modules/
output/modules/ec_master.ko
output/modules/ec_generic.ko
output/share/
output/share/bash-completion/
output/share/bash-completion/completions/
output/share/bash-completion/completions/ethercat
output/bin/
output/bin/ethercat
output/lib/
output/lib/libethercat.so
output/lib/pkgconfig/
output/lib/pkgconfig/libethercat.pc
output/lib/libethercat.so.1.2.0
output/lib/cmake/
output/lib/cmake/ethercat/
output/lib/cmake/ethercat/ethercat-config.cmake
output/lib/libethercat.a
output/lib/libethercat.la
output/lib/libethercat.so.1

将output目录下各文件目录的内容复制到板子根文件系统根目录下相应目录下,例如:cp bin/ethercat /bin/(include目录不用复制)

代码语言:javascript
复制
root@myir-remi-1g:~/output#?ls
bin?etc??include??lib??modules??sbin??share
root@myir-remi-1g:~/output#?cp?bin/ethercat?/bin/
root@myir-remi-1g:~/output#?cp?etc/ethercat.conf?/etc/
root@myir-remi-1g:~/output#?cp?etc/init.d/*??/etc/init.d
root@myir-remi-1g:~/output#?cp?-r?etc/sysconfig/?/etc/
root@myir-remi-1g:~/output#?cp??lib/libethercat.*?/lib64/
root@myir-remi-1g:~/output#?cp?-r?lib/pkgconfig?/lib64/
root@myir-remi-1g:~/output#?cp?modules/ec_master.ko?/lib/modules/5.10.83-cip1-yocto-standard/
root@myir-remi-1g:~/output#?cp?sbin/ethercatctl??/sbin/

4.6.?启动EtherCAT

4.6.1.?配置主站的MAC地址

代码语言:javascript
复制
root@myir-remi-1g:~#?depmod
root@myir-remi-1g:~#?modprobe?ec_master?main_devices=1E:ED:19:27:1A:B3

4.6.2.?启动EtherCAT

代码语言:javascript
复制
root@myir-remi-1g:~#?/etc/init.d/ethercat?start
Starting?EtherCAT?master?1.5.2?done

至此所有步骤完成。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.概述
  • 2.实时内核设计
    • 2.1.?移植补丁
      • 2.2.?其他影响性能的配置
      • 3.实时性测试
      • 4.EtherCAT IGH移植
        • 4.1.?下载EtherCAT IGH源码
          • 4.2.?编译EtherCAT源码
            • 4.3.?安装EtherCAT
              • 4.4.?将EtharCAT相关文件打包
                • 4.5.?移植EtherCAT相关库到开发板
                  • 4.6.?启动EtherCAT
                    • 4.6.1.?配置主站的MAC地址
                    • 4.6.2.?启动EtherCAT
                相关产品与服务
                媒体处理
                媒体处理(Media Processing Service,MPS)是一种云端音视频处理服务。基于腾讯多年音视频领域的深耕,为您提供极致的编码能力,大幅节约存储及带宽成本、实现全平台播放,同时提供视频截图、音视频增强、内容理解、内容审核等能力,满足您在各种场景下对视频的处理需求。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
                http://www.vxiaotou.com