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

devtools/2024/12/23 8:42:49/

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来加速开发。评估套件的详细信息请访问:Remi Pi 瑞米派 - 瑞萨第一款MPU生态板卡 - 深圳市米尔电子有限公司

2.实时内核设计

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

2.1. 移植补丁

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

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

  • 把补丁放到自己的工作目录下,然后解压,如图2-1:

hjx@myir-server:~/renesas/04_Sources$ tar -xvf patches-5.10.83-rt58.tar.gz


图2-1. 内核源码

  • 进入到内核源码打补丁,如图2-2:

hjx@myir-server:~/renesas/04_Sources/myir-renesas-linux$ for p in `ls -1 ../patches/*.patch`; do patch -p1 < $p; done


图2-2. 打实时补丁

  • 编译内核源码

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自动调频,并设置主频为最高频率:

cd /sys/devices/system/cpu/cpufreq/policy0
echo userspace > scaling_governor
cat scaling_max_freq  > scaling_setspeed

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

3.实时性测试

  • 空载测试

cyclictest -p 99 -t 1 -d 100 -i 1000 -D 24h -m -a -n


图3-1.空载测试

  • CPU&内存满载

cyclictest -p 99 -t 1 -d 100 -i 1000 -D 24h -m -a -n

  • 增加压力

stress-ng --cpu 4 --cpu-method all --io 4 --vm 50 -d 5 --fork 4 --timeout 36000s


图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:

Files · stable-1.5 · EtherLab / EtherCAT Master · GitLab

图4-1. 下载源码

  • 解压EtherCAT源码

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环境变量

hjx@myir-server:~/renesas/04_Sources/myir-renesas-linux$ source /opt/remi-sdk/environment-setup-aarch64-poky-linux

4.2. 编译EtherCAT源码

  • 生成configure文件

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设置

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指定内核源码目录)

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

  • 编译源码

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

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目录下有编译生成的各种用户空间的文件。

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下

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输出文件

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传到开发板上,然后解压出来。

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目录不用复制)

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地址

root@myir-remi-1g:~# depmod
root@myir-remi-1g:~# modprobe ec_master main_devices=1E:ED:19:27:1A:B3

4.6.2. 启动EtherCAT

root@myir-remi-1g:~# /etc/init.d/ethercat start
Starting EtherCAT master 1.5.2 done

至此所有步骤完成。


米尔瑞米派 Remi Pi

瑞萨第一款MPU生态板卡,兼容树莓派扩展模块

采用瑞萨RZ/G2L工业级处理器,便于企业客户产品开发;

Remi Pi兼容树莓派所有配件,方便产品原型搭建和创新应用;

更多的工业接口,兼顾开发、学习和实际应用;

软件系统丰富,支持Debian/Ubuntu/Linux等。


http://www.ppmy.cn/devtools/25475.html

相关文章

让新手变中手的ChatGPT 使用方法

让新手变中手的ChatGPT 使用方法 已经要一年了,没想到这篇还是一样有用。看到许多依然是一句话就要问出结果的教学,就知道AI 进步很快,但人的学习速度还需要更多时间。 以下为去年原版内容加上新的两招更新,希望帮助你使用ChatGPT 更好用,当未来文字可直接生成影像时,你…

OceanBase开发者大会实录-杨传辉:携手开发者打造一体化数据库

本文来自2024 OceanBase开发者大会&#xff0c;OceanBase CTO 杨传辉的演讲实录—《携手开发者打造一体化数据库》。完整视频回看&#xff0c;请点击这里&#xff1e;> 各位 OceanBase 的开发者&#xff0c;大家上午好&#xff01;今天非常高兴能够在上海与大家再次相聚&…

报错:图片验证码接口对接vue+springboot(下一个笔记会记录整个验证码的代码)

问题&#xff1a;空指针异常ai: 根据错误堆栈信息中提供的方法调用位置&#xff0c;看起来空指针异常是在 AuthCodeServiceImpl 类的 authUserCoded 方法的第 41 行发生的。 为了解决这个问题&#xff0c;你可以检查 AuthCodeServiceImpl 类中 authUserCoded 方法的第 41 行&am…

MySQL数据库进阶篇一(存储引擎、索引)

目录 一、存储引擎1.1、MySQL体系结构&#xff1a;连接层&#xff0c;Server层&#xff0c;引擎层&#xff0c;存储层1.2、存储引擎1.2.1、存储引擎&#xff1a;InnoDB(MySQL 5.5后默认的存储引擎)1.2.2、存储引擎&#xff1a;MyISAM (MySQL早期默认存储引擎)1.2.3、存储引擎&a…

普乐蛙元宇宙VR体验馆设备集体亮相VR文旅景区展

普乐蛙全国巡展又双叒叕开始了! 这次来到的是“好客山东”↓↓ 山东2024休闲旅游产业展 4月25日至27日&#xff0c;2024休闲旅游产业展在临沂国际博览中心举办。本次展会以“潮购文旅好品&#xff0c;乐享时尚生活”为主题&#xff0c;汇聚全国文旅产业上下游500多家企业、上万…

ubuntu18源码安装postgresql15.2数据库

由于官方的源只能安装到pg10这个版本&#xff0c;整了好一会没有成功就改为源码安装了。 下载源代码源码并解压 wget https://ftp.postgresql.org/pub/source/v15.2/postgresql-15.2.tar.gztar -xf postgresql-15.2.tar.gz cd postgresql-15.2/ 安装C相关开发库和编译工具 ap…

深度解析 Spring 源码:从BeanDefinition源码探索Bean的本质

文章目录 一、BeanDefinition 的概述1.1 BeanDefinition 的定位1.2 BeanDefition 的作用 二、BeanDefinition 源码解读2.1 BeanDefinition 接口的主要方法2.2 BeanDefinition 的实现类2.2.1 实现类的区别2.2.2 setBeanClassName()2.2.3 getDependsOn()2.2.4 setScope() 2.3 Bea…

敏捷之Scrum开发

目录 一、什么是 Scrum 1.1 Scrum 的定义 二、Scrum 迭代开发过程 2.1 迭代开发过程说明 2.1.1 开发方法 2.1.1.1 增量模型 2.1.1.1.1 定义 2.1.1.1.2 模型方法说明 2.1.1.2 迭代模型 2.1.1.2.1 定义 2.1.1.2.2 模型方法说明 2.1.2 迭代过程 2.1.2.1 产品需求Produ…