news 2026/6/10 1:49:24

RK3588如何搭建xenomai3+ethercat

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
RK3588如何搭建xenomai3+ethercat

使用的RK3588的分支版本是linux-6.1-stan-rkr6 内核版本是6.1.99 把瑞芯微的SDK更新到linux-6.1-stan-rkr6这个版本即可。

编译xenomai3的内核

请参考上一篇技术分享:技术分享 | RK3588如何增加Xenomai3实时补丁

修改ethercat

下载源码:

git clone https://gitlab.com/etherlab.org/ethercat.git # 使用这个tags的版本 git checkout 1.6.7 -b kehu

用通用驱动ec_generic.ko虽然也可以,但是1ms周期的抖动延时有20us左右,那就用专用的驱动让抖动延时更低一些,ethercat的源码把stmmac的驱动移植下就可以了。可以直接使用preempt_rt的RK已经适配过ethercat源码的stmmac的部分,把devices/stmm/文件夹复制过来然后./bootstrap把Makefile的文件给配置出来,编译的时候要使用--enable-stmmac-pci参数。

rtdm是实时性的接口,也是xenomai的接口,编译的时候发现rtdm是在ec_master里面。

编译驱动

交叉编译

SDK_DIR=/home/yangx/linux2/yangx/RK3588/IAC-RK3588-MB-kernel-6.1/ TOOLS_PATH=$SDK_DIR/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/CROSS_PATH=$TOOLS_PATH/binexport PATH=$TOOLS_PATH:$CROSS_PATH:$PATHexport CROSS_COMPILE=aarch64-none-linux-gnu-export ARCH=arm64KERNEL_SRC=/home/yangx/linux2/yangx/RK3588/IAC-RK3588-MB-kernel-6.1/kernel/xenomaiinstalldir=/home/yangx/linux2/yangx/RK3588/IAC-RK3588-MB-kernel-6.1/xenomai/build/usr/xenomai/xenomaidir=/home/yangx/linux2/yangx/RK3588/IAC-RK3588-MB-kernel-6.1/xenomai/./bootstrap./configure --prefix=/home/yangx/linux2/yangx/RK3588/IAC-RK3588-MB-kernel-6.1/ethercat/build/ --host=aarch64-none-linux-gnu --enable-kernel --with-linux-dir=${KERNEL_SRC} --enable-8139too=no --enable-stmmac-pci=yes --enable-generic=no --enable-wildcards=yes --enable-rtdm --with-xenomai-dir=${xenomaiinstalldir}mkdir -p buildmake ARCH=arm64 modules# 交叉编译这个库文件时一直提示缺少头文件,我就索性在3588里面编译export C_INCLUDE_PATH=${xenomaidir}/include/:$C_INCLUDE_PATHexport C_INCLUDE_PATH=${xenomaiinstalldir}/include:$C_INCLUDE_PATHexport C_INCLUDE_PATH=${xenomaiinstalldir}/include:${xenomaiinstalldir}/include/cobalt/:$C_INCLUDE_PATHexport LIBRARY_PATH=${xenomaiinstalldir}/lib/:$LIBRARY_PATHmake ARCH=arm64 CROSS_COMPILE=aarch64-none-linux-gnu- install DESTDIR=/home/yangx/linux2/yangx/RK3588/IAC-RK3588-MB-kernel-6.1/ethercat_igh/build/# 安装的时候有个systemctl的配置文件需要注意下make install systemdsystemunitdir=(编译后你需要存放的目录,和configure命令上的prefix下跟的参数需要一致)

RK3588本机编译

apt install autoconf automake # 把源码直接放到根目录下 ./bootstrap ./configure --with-linux-dir=/usr/src/linux-headers-6.1-rockchip --enable-rtdm=yes --disable-8139too --enable-generic --disable-e1000e --disable-igb --enable-kernel --disable-hrtimer --disable-eoe --with-xenomai-dir=/usr/xenomai --prefix=/opt/etherlab --enable-ec_master --enable-ec_slave make make modules make install

本机编译的时候会把服务什么的配置好,但是不想用的话,可以重新配置

insmod phylink.ko insmod pcs_xpcs.ko # 把网口的MAC地址填上,加载上这个ko,就会有/dev/EtherCAT0 节点。 insmod ec_master.ko main_devices=32:d4:b5:f9:e3:d5 insmod ec_stmmac.ko

insmod ec_stmmac.ko后的日志:

[ 587.218264] rk_gmac-dwmac fe1b0000.ethernet eth0: Link is Up - 100Mbps/Full - flow control off [ 587.218282] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready [ 606.986538] ec_master: loading out-of-tree module taints kernel. [ 606.988109] EtherCAT: Master driver 1.6.0-rc1 unknown [ 606.988309] EtherCAT: 1 master waiting for devices. [ 615.636814] ec_generic: EtherCAT master generic Ethernet device module 1.6.0-rc1 unknown [ 615.636837] EtherCAT: Accepting 32:D4:B5:F9:E3:D5 as main device for master 0. [ 615.636854] ec_generic: Binding socket to interface 2 (eth0). [ 615.643519] EtherCAT 0: Starting EtherCAT-IDLE thread. [ 615.643688] EtherCAT 0: Link state of ecm0 changed to UP. [ 615.645179] EtherCAT 0: 3 slave(s) responding on main device. [ 615.645185] EtherCAT 0: Slave states on main device: INIT. [ 615.645586] EtherCAT 0: Scanning bus. [ 615.956631] EtherCAT 0: Bus scanning completed in 311 ms. [ 615.956634] EtherCAT 0: Using slave 0 as DC reference clock. [ 615.972223] EtherCAT 0: Slave states on main device: PREOP.

配置/etc/init.d:

mkdir /etc/sysconfig cp /opt/etherlab/etc/sysconfig/ethercat /etc/sysconfig/ cp /opt/etherlab/etc/init.d/ethercat /etc/init.d/ # 把模块放到系统目录 cp devices/ec_generic.ko /lib/modules/$(uname -r) cp master/ec_master.ko /lib/modules/(uname -r) depmod -a # 配置启动的网口MAC MASTER0_DEVICE=" " vi /etc/sysconfig/ethercat # 里面也有驱动类型的配置,配置之后可以自动加载ec_stmmac.ko,但是还是手动加载吧。 # 启动主站 服务启动需要modules的依赖文件 /etc/init.d/ethercat start /etc/init.d/ethercat status /etc/init.d/ethercat stop # 实际上是一个脚本,启动另一个脚本,ethercatctl的脚本,这个脚本实际上就是配置ethercat这个二进制文件参数的,通过这个二进制文件写入网口的MAC地址。

常用的ethercat命令:

# 查看主站状态 ethercat status # 查看从站状态 ethercat slaves # 查看从站的寄存器 ethercat cstruct

实际测试

测试程序:

export LD_LIBRARY_PATH=/usr/xenomai/lib/:/opt/etherlab/lib/:$LD_LIBRARY_PATH cd ./a taskset 0x4 ./a

Ethercat模块是EL1008,EL2008,网线直连RK3588和ethercat模块,1ms周期,10us的抖动延时。

如图所示:

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 10:49:16

计算机毕业设计springboot基于协同过滤算法的体育商品推荐系统 基于Spring Boot框架的体育用品推荐系统设计与实现 Spring Boot驱动下的体育商品个性化推荐系统研究

计算机毕业设计springboot基于协同过滤算法的体育商品推荐系统5y4vh9 (配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。随着互联网技术的飞速发展,体育用品市场的线上交…

作者头像 李华
网站建设 2026/6/9 16:42:30

OpenSubtitlesDownload终极指南:快速获取完美字幕的完整教程

OpenSubtitlesDownload终极指南:快速获取完美字幕的完整教程 【免费下载链接】OpenSubtitlesDownload Automatically find and download the right subtitles for your favorite videos! 项目地址: https://gitcode.com/gh_mirrors/op/OpenSubtitlesDownload …

作者头像 李华
网站建设 2026/6/10 10:50:42

如何快速掌握Mosby3:Android开发者的MVI架构完整指南

如何快速掌握Mosby3:Android开发者的MVI架构完整指南 【免费下载链接】mosby A Model-View-Presenter / Model-View-Intent library for modern Android apps 项目地址: https://gitcode.com/gh_mirrors/mo/mosby 想要构建更稳定、更易维护的Android应用吗&a…

作者头像 李华
网站建设 2026/6/10 10:52:06

大模型上下文工程:让AI更精准的实用技巧,收藏级学习指南

上下文工程是优化提供给大语言模型的tokens效用以获得更佳结果的方法。随着LLM应用复杂化,仅靠提示词工程已不够。上下文工程面临上下文腐蚀和有限注意力预算的挑战。其目标是使用少而高信号密度的tokens。实践包括:设计清晰系统提示词、定义职责单一的工…

作者头像 李华
网站建设 2026/6/10 12:27:17

10分钟掌握UniVRM:Unity中VRM模型的终极使用指南

10分钟掌握UniVRM:Unity中VRM模型的终极使用指南 【免费下载链接】UniVRM UniVRM is a gltf-based VRM format implementation for Unity. English is here https://vrm.dev/en/ . 日本語 はこちら https://vrm.dev/ 项目地址: https://gitcode.com/gh_mirrors/un…

作者头像 李华
网站建设 2026/6/10 12:25:47

力扣--回溯篇(1)

回溯 1.理论基础 递归下面就是回溯。 回溯搜索法,其实是一个纯暴力搜索。 回溯解决的问题:组合问题,切割问题,子集问题,排列问题,棋盘问题 递归函数没有返回值,终止条件单层搜索逻辑&#…

作者头像 李华