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

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

3天内不再提示

【技术分享】RK3588如何搭建xenomai3+ethercat

启扬ARM嵌入式开发 2025-12-11 17:26 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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

88362788-d673-11f0-8ce9-92fbcf53809c.png


编译xenomai3的内核

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

修改ethercat

下载源码:

gitclonehttps://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/binexportPATH=$TOOLS_PATH:$CROSS_PATH:$PATHexportCROSS_COMPILE=aarch64-none-linux-gnu-exportARCH=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里面编译exportC_INCLUDE_PATH=${xenomaidir}/include/:$C_INCLUDE_PATHexportC_INCLUDE_PATH=${xenomaiinstalldir}/include:$C_INCLUDE_PATHexportC_INCLUDE_PATH=${xenomaiinstalldir}/include:${xenomaiinstalldir}/include/cobalt/:$C_INCLUDE_PATHexportLIBRARY_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=32b5e3: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 waitingfordevices.
[ 615.636814] ec_generic: EtherCAT master generic Ethernet device module 1.6.0-rc1 unknown
[ 615.636837] EtherCAT: Accepting 32B5E3:D5 as main deviceformaster 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 completedin311 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


实际测试

测试程序:

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


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

如图所示:


884ad570-d673-11f0-8ce9-92fbcf53809c.jpg
/ 启扬智能自媒体矩阵 /

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

    关注

    19

    文章

    1378

    浏览量

    43490
  • RK3588
    +关注

    关注

    8

    文章

    497

    浏览量

    7066
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    瑞芯微RK3588开发板RK3588 EVB和RK3588S EVB解读

    瑞芯微RK3588开发板RK3588 EVB和RK3588S EVB解读 瑞芯微旗舰芯RK3588系列开发板受到广大开发者伙伴的关注和问询。针对相关的开发板功能、操作指南等问题,我们一
    的头像 发表于 09-22 15:54 2.2w次阅读
    瑞芯微<b class='flag-5'>RK3588</b>开发板<b class='flag-5'>RK3588</b> EVB和<b class='flag-5'>RK3588</b>S EVB解读

    RK3588 PCB推荐叠层及阻抗设计

    近期华秋电子联合瑞芯微、凡亿重磅发布了:《RK3588 PCB设计指导白皮书》,帮助开发者更好地规范利用RK3588开发产品,提高所设计的PCB质量,在实战中巩固及提高PCB设计水平。本文
    发表于 08-10 09:32 1761次阅读
    <b class='flag-5'>RK3588</b> PCB推荐叠层及阻抗设计

    迅为RK3588开发板实时系统编译-Preemption系统/ Xenomai系统编译-获取Linux源码包

    “iTOP-3588 全能板\\\\02_ 【iTOP-RK3588 开发板】开发资料\\\\02_iTOP-3588 开发板搭建好编译环境的 Ubuntu20.04 虚拟机镜像”路径
    发表于 01-09 11:03

    基于 RK3588 debian 搭建 RK3588 Kernel 编译环境

    /24"#192.168.31.xxx为RK3588的IP 地址LISTENER=""ZEROCONFIG="false"3、在服务器端和客户端启动
    发表于 03-22 16:28

    RK3588J和RK3588是什么关系?

    RK3588J是不是一个开发板的名字,里面的SOC是RK3588?还是RK3588J属于RK3588的子系列?
    发表于 03-13 14:22

    RK3588RK3588S之间的区别是什么

    RK3588RK3588S的区别: RK3588S是RK3588的低配版,其区别类似RK3568跟RK
    发表于 03-10 19:22 3w次阅读

    RK3588-MIPI屏幕调试笔记:RK3588-MIPI-DSI

    RK3588-MIPI屏幕调试笔记:RK3588-MIPI-DSI
    的头像 发表于 06-10 10:31 7149次阅读
    <b class='flag-5'>RK3588</b>-MIPI屏幕调试笔记:<b class='flag-5'>RK3588</b>-MIPI-DSI

    【LGA封装RK3588核心板】基于RK3588,小而强大的ArmSom-W3 CORE BOARD

    Armsom-RK3588 LGA Core board 是一款基于Rockchip RK3588芯片平台,采用LGA(506pin)封装设计的一款极小尺寸的RK3588核心板。
    的头像 发表于 07-03 16:08 2973次阅读
    【LGA封装<b class='flag-5'>RK3588</b>核心板】基于<b class='flag-5'>RK3588</b>,小而强大的ArmSom-W<b class='flag-5'>3</b> CORE BOARD

    rk3588rk3588s的区别

    rk3588rk3588s的区别 Rockchip是一家专业的半导体公司,成立于2001年,总部位于中国深圳,主要从事集成电路的设计、开发和销售。他们的热门产品RK3588RK3588
    的头像 发表于 08-15 16:44 2w次阅读

    RK35883588s的区别

    RK35883588s的区别 Rockchip RK3588RK3588s是两种功能强大且广受欢迎的片上系统(SoC)解决方案,用于一系列设备,包括智能电视、高性能平板电脑、笔记本
    的头像 发表于 08-15 17:03 2.8w次阅读

    RK3588系列有多少型号?

    RK3588系列有多少型号? RK3588是瑞芯微推出的一款长线产品,属于高性能处理器领域的顶尖产品。它从2020年开始进入市场,现已成为市场上最热门的处理器之一。该产品因其高效能、强大的计算能力
    的头像 发表于 08-15 17:04 6160次阅读

    迅为电子RK3588S与RK3588硬件性能区别及板卡选型

    迅为电子RK3588S与RK3588硬件性能区别及板卡选型
    的头像 发表于 06-25 15:30 5780次阅读
    迅为电子<b class='flag-5'>RK3588</b>S与<b class='flag-5'>RK3588</b>硬件性能区别及板卡选型

    RK3588!黑神话悟空,启动?-迅为电子RK3588开发板

    RK3588!黑神话悟空,启动?-迅为电子RK3588开发板
    的头像 发表于 08-30 14:13 1984次阅读
    <b class='flag-5'>RK3588</b>!黑神话悟空,启动?-迅为电子<b class='flag-5'>RK3588</b>开发板

    RK3588参数与主要特性 RK3588数据手册解读

    RK3588参数与主要特性 RK3588数据手册解读
    的头像 发表于 05-19 18:34 9744次阅读
    <b class='flag-5'>RK3588</b>参数与主要特性  <b class='flag-5'>RK3588</b>数据手册解读

    技术分享 | RK3588增加Xenomai3实时补丁

    Xenomai是一套为嵌入式系统设计的实时开发框架,通过“双内核”架构,让Linux既能处理复杂的通用任务,又能可靠地完成那些对响应时间有极端要求的任务,广泛用于工业自动化、机器人、航空航天等对实时性要求极高的场景。本篇文章以启扬RK3588开发板为例,分享如何增加
    的头像 发表于 11-27 17:29 1235次阅读
    <b class='flag-5'>技术</b>分享 | <b class='flag-5'>RK3588</b>增加<b class='flag-5'>Xenomai3</b>实时补丁