前言:
在工业自动化、运动控制、机器人控制和高性能设备互联场景中,实时通信协议是系统稳定运行的关键。传统以太网虽然带宽高、成本低,但在确定性、周期性和实时性方面无法直接满足伺服驱动、IO 模块、运动轴控制等工业场景需求。EtherCAT 正是为此类场景设计的工业以太网协议。它通过高效的帧处理机制和主从通信模型,使多个从站设备能够在极短周期内完成过程数据交换,因此被广泛应用于:
伺服驱动控制
运动控制
机器人控制
工业 IO
数控系统
自动化产线
实时边缘控制
open-edge-platform/edge-ai-libraries 仓库中的 ethercat-masterstack 是 Edge Control Libraries 下的 Fieldbus 组件之一。它基于 IgH EtherCAT Master Stack,并针对工业边缘控制场景进行了优化,支持 Linux Kernel 5.x/6.x、Preempt-RT、Xenomai/Dovetail、Intel IGB/IGC/mGBE 驱动、用户态运行时和多主站配置。这是一个面向 Linux 实时工业控制系统的 EtherCAT 主站协议栈,用于实现高性能、低时延、确定性的现场总线通信。项目路径:
https://github.com/open-edge-platform/edge-ai-libraries/tree/main/libraries/edge-control-libraries/fieldbus/ethercat-masterstack
应用说明
该组件属于 open-edge-platform/edge-ai-libraries 总仓库的一部分。需要特别注意:总仓库采用 Apache-2.0 为主,但该 EtherCAT Master Stack 组件 README 中明确说明:
源码部分:GPL v2
用户态库:LGPL v2.1
因此,如果企业或产品中使用该组件,需要仔细评估 GPL/LGPL 许可要求,尤其是内核模块、用户态动态链接库和二次分发场景。
一、项目背景:为什么 EtherCAT Master Stack 重要?
在工业控制系统中,边缘控制器通常需要周期性读取传感器、IO 模块和伺服驱动状态,同时下发控制指令。例如:
读取编码器位置
读取 IO 输入状态
下发伺服目标位置
下发速度或转矩指令
同步多个运动轴
监控驱动器状态字
处理急停和故障信号
这些任务通常具有严格实时性要求。对于普通以太网通信,延迟和抖动不可控;而 EtherCAT 的优势在于:
高实时性
高同步精度
高带宽利用率
低通信开销
适合多从站级联
支持复杂工业拓扑
因此,在机器人、数控机床、半导体设备、包装机械、运动控制平台中,EtherCAT 主站是控制系统的核心部件之一。ethercat-masterstack 的意义在于:它为 Linux 边缘控制平台提供了一个开源、可扩展、适配实时内核的 EtherCAT 主站实现。
二、项目框架设计

从 README 描述看,该组件的核心架构由三部分组成:
EtherCAT Master Stack
├── Master Module
├── Device Modules
└── Application
可以进一步理解为:
应用层控制程序
↓
Application Interface / EtherCAT Library / RTDM Library
↓
Master Module
↓
Device Interface
↓
Device Modules:igb / igc / dwmac_intel / generic
↓
EtherCAT Network
↓
EtherCAT Slaves:Servo Drive / IO / Sensor / Actuator
1. Master Module:主站核心模块
Master Module 是整个协议栈的核心,通常以内核模块形式存在。
它主要负责:
维护一个或多个 EtherCAT Master 实例
管理 EtherCAT 总线扫描和配置
处理周期性过程数据交换
提供 Device Interface
提供 Application Interface
管理从站状态机
同步主站与从站通信周期
在实时控制系统中,Master Module 负责把应用层的控制数据转换为 EtherCAT 帧,并通过指定网卡发送到 EtherCAT 网络。
2. Device Modules:EtherCAT 网卡驱动模块
Device Modules 是 EtherCAT-capable Ethernet device driver modules,也就是经过适配的网卡驱动模块。
它们的作用是:
把特定网卡交给 EtherCAT Master 使用
处理 EtherCAT 帧收发
支持高性能实时通信
允许 EtherCAT 设备和普通以太网设备并存
README 中列出的设备模块包括:
igb Intel I210 / I211 GbE Controller
igc Intel I225 / I226 GbE Controller
dwmac_intel Intel Core / Atom 平台部分 GbE 控制器
generic 通用驱动,性能较低
对于工业控制应用,推荐优先使用专用高性能驱动,例如 igb 或 igc,而不是 fallback 的 generic 驱动。
3. Application:用户控制应用
Application 是用户编写或生成的 EtherCAT 控制程序。
典型功能包括:
请求 EtherCAT Master
配置总线和从站
映射 PDO
读写过程数据
实现周期性控制任务
处理从站状态
管理伺服驱动状态机
Application 可以是:
内核模块
用户态程序
基于 EtherCAT library 的实时程序
基于 RTDM library 的 Xenomai 实时程序
这意味着该组件既支持 Preempt-RT 方式,也支持 Xenomai/Dovetail 实时环境。
三、关键功能解析与技术破局
1. 支持 Linux Kernel 5.x / 6.x
很多工业控制系统面临一个现实问题:老旧 EtherCAT 协议栈可能只支持较旧内核,迁移到新版本 Linux 时会遇到编译失败、接口不兼容或驱动适配问题。
ethercat-masterstack 明确支持 Linux Kernel 5.x / 6.x,这对现代工业边缘平台非常关键。
这意味着它更适合运行在较新的工业 PC、边缘控制器和实时 Linux 发行版上。
2. 支持 Preempt-RT
Preempt-RT 是 Linux 实时化的重要方案之一。它通过改造内核调度、锁机制和中断处理,使 Linux 具备更好的实时响应能力。
在 EtherCAT 场景中,Preempt-RT 的意义在于:
降低控制周期抖动
提高任务调度确定性
支持用户态实时控制程序
降低部署门槛
更接近标准 Linux 生态
对于很多工业边缘控制系统,Preempt-RT 是比 Xenomai 更易维护的方案。
3. 支持 Xenomai 3 / Dovetail
Xenomai 是工业实时控制领域常见的硬实时方案。Dovetail 是新一代 Xenomai 4 相关实时内核基础机制。
该组件支持 Xenomai 3 / Dovetail,说明其面向更严格的实时控制场景。
适合场景包括:
高精度多轴运动控制
高速伺服控制
机器人实时控制
数控插补控制
高速 IO 同步采集
在这些场景中,微秒级抖动可能直接影响设备运动质量或控制稳定性。
4. 迁移 IGB / IGC / mGBE 驱动到协议栈
README 中提到,该组件迁移了最新 IGB / IGC / mGBE 驱动到 stack。
这点非常重要,因为 EtherCAT 主站性能高度依赖网卡驱动。
不同网卡驱动的性能差异可能体现在:
收发延迟
中断处理
DMA 性能
时间戳能力
实时调度稳定性
多网卡绑定能力
链路恢复能力
对于 Intel I210/I211、I225/I226 等工业常用网卡,专门适配的驱动可以显著改善 EtherCAT 通信性能。
5. 支持用户态运行时
传统 EtherCAT 主站往往和内核模块强绑定,应用开发者需要理解内核接口或复杂实时机制。
该组件支持 user-mode runtime,意味着开发者可以在用户态编写控制应用,通过 EtherCAT library 或 RTDM library 与主站交互。
这带来几个好处:
应用开发更灵活
调试更方便
更易集成上层控制软件
更适合快速开发原型
降低内核模块开发门槛
对于工业边缘 AI + 控制融合场景,用户态接口尤其重要,因为 AI 推理、状态估计、轨迹规划等模块通常运行在用户态。
6. 支持多主站
该组件支持 multiple master,也就是多 EtherCAT Master。
这对于复杂工业系统很有价值,例如:
一张网卡控制一组伺服轴
另一张网卡控制远程 IO
一个主站用于运动控制
一个主站用于传感器采集
多个工艺模块独立运行
多主站能力可以提升系统扩展性,也方便把不同实时域隔离开来。
四、技术破局点总结
ethercat-masterstack 的技术价值不只是"能跑 EtherCAT",而是把开源 EtherCAT 主站带入现代工业边缘平台:
IgH EtherCAT Master 基础
+
Linux Kernel 5.x / 6.x 支持
+
Preempt-RT 支持
+
Xenomai / Dovetail 支持
+
Intel IGB / IGC / mGBE 驱动适配
+
用户态运行时
+
多主站能力
它解决的是工业实时控制中的一组典型工程难题:
如何在新内核上运行 EtherCAT 主站?
如何适配现代 Intel 工业网卡?
如何支持 Preempt-RT 和 Xenomai?
如何在用户态开发控制应用?
如何构建多主站工业控制系统?
这对于边缘控制、工业 AI、机器人和运动控制系统都有较高参考价值。
五、使用教程
以下流程基于 README 中的构建步骤整理。
1. 安装依赖
在 Ubuntu 上安装构建依赖:
sudo apt-get install autoconf automake git libtool build-essential libmodbus5 libmodbus-dev
这些依赖主要用于:
生成 configure 脚本
编译 C/C++ 代码
构建内核模块
支持 modbus 相关功能
处理 autotools 构建流程
2. 初始化子模块
进入 edge-ai-libraries 仓库根目录或对应组件目录后,执行:
git submodule init
git submodule update
这一步用于拉取 ighethercat 等子模块。
3. 安装补丁
README 中说明,需要运行脚本把优化补丁应用到 ighethercat 文件夹。
./install_ethercatlab_patched.sh patches/ighethercat.scc
补丁列表定义在:
patches/ighethercat.scc
这一步非常关键,因为该组件并不是直接原样使用 IgH EtherCAT,而是基于补丁进行了内核、驱动或功能适配。
4. 准备 Linux 内核源码目录
EtherCAT Master Stack 支持 out-of-tree kernel modules,也就是在 Linux 内核源码树外编译内核模块。
因此需要指定与当前运行内核匹配的内核源码目录:
export kernel_source_dir=<your_linux_kernel_source_directory>
注意:该内核源码必须已经配置并编译过,确保模块接口与当前内核一致。
可以通过以下命令查看当前内核版本:
uname -r
如果使用 Preempt-RT 或 Xenomai 内核,需要确保内核源码对应同一个实时内核版本。
5. 编译 Preempt-RT 版本
进入 ighethercat 目录:
cd ighethercat
./bootstrap
执行配置:
./configure \
--enable-sii-assign \
--disable-8139too \
--disable-eoe \
--enable-igb \
--enable-igc \
--with-linux-dir=${kernel_source_dir} \
--with-devices=8 \
--enable-hrtimer \
--enable-cycles
编译:
make modules all
参数说明:
--enable-igb 启用 Intel I210/I211 驱动支持
--enable-igc 启用 Intel I225/I226 驱动支持
--with-devices=8 支持最多 8 个设备
--enable-hrtimer 启用高精度定时器
--enable-cycles 启用周期计数相关功能
6. 编译 Xenomai / Dovetail 版本
如果使用 Xenomai/Dovetail 实时环境,配置命令如下:
cd ighethercat
./bootstrap
./configure \
--enable-sii-assign \
--disable-8139too \
--disable-eoe \
--enable-igb \
--enable-igc \
--with-linux-dir=${kernel_source_dir} \
--enable-rtdm \
--with-xenomai-dir=/usr/include/xenomai \
--with-xenomai-config=/usr/bin/xeno-config \
--with-devices=8 \
--enable-hrtimer \
--enable-cycles
编译:
make modules all
与 Preempt-RT 相比,Xenomai 版本额外启用了:
--enable-rtdm
--with-xenomai-dir
--with-xenomai-config
RTDM 是 Xenomai 中用于实时驱动模型的重要接口。
7. 安装软件
需要以 root 权限执行:
make install
make modules_install
depmod
这一步会安装:
EtherCAT 头文件
用户态库
服务脚本
内核模块
命令行工具
安装后可通过系统服务脚本启动 EtherCAT Master。
8. 配置 EtherCAT 设备
安装后会生成配置文件:
/etc/sysconfig/ethercat
这个文件用于配置一个或多个 EtherCAT Master。
常见配置项包括:
REBIND_NICS
MASTER0_DEVICE
MASTER1_DEVICE
DEVICE_MODULES
首先使用 lspci 查看网卡:
lspci | grep -i ethernet
再查看网卡 MAC 地址:
ip link
或者:
ifconfig
然后将选定网卡的 MAC 地址填入:
MASTER0_DEVICE
如果使用双主站,还需要配置:
MASTER1_DEVICE
并在 REBIND_NICS 中添加对应 PCI 地址。
9. 选择 Device Module
根据网卡类型修改 DEVICE_MODULES。
Intel I210/I211:
DEVICE_MODULES="igb"
Intel I225/I226:
DEVICE_MODULES="igc"
Intel Core / Atom 平台部分 GbE 控制器:
DEVICE_MODULES="dwmac_intel"
通用驱动:
DEVICE_MODULES="generic"
建议优先使用专用高性能驱动,只有在硬件不支持时再使用 generic。
10. 启动 EtherCAT Master 服务
启动:
/etc/init.d/ethercat start
停止:
/etc/init.d/ethercat stop
重启:
/etc/init.d/ethercat restart
查看状态:
/etc/init.d/ethercat status
11. 编译用户态应用:Preempt-RT Makefile 示例
如果是 Preempt-RT 用户态应用,可以使用如下 Makefile 模板:
CC = gcc
CFLAGS = -Wall -O3 -g -D_GNU_SOURCE -D_REENTRANT -fasynchronous-unwind-tables
LIBS = -lm -lrt -lpthread -lethercat -Wl,--no-as-needed -L/usr/lib
TARGET = test
SRCS = $(wildcard *.c)
OBJS = $(SRCS:.c=.o)
$(TARGET):$(OBJS)
$(CC) -o $@ $^ $(LIBS)
clean:
rm -rf $(TARGET) $(OBJS)
%.o:%.c
$(CC) $(CFLAGS) -o $@ -c $<
其中核心库是:
-lethercat
12. 编译用户态应用:Xenomai/Dovetail Makefile 示例
Xenomai/Dovetail 应用需要链接 RTDM 相关库:
CC = gcc
CFLAGS = -Wall -O3 -g -I/usr/include/xenomai/cobalt -I/usr/include/xenomai -D_GNU_SOURCE -D_REENTRANT -fasynchronous-unwind-tables -D__COBALT__ -D__COBALT_WRAP__
LIBS = -lm -lrt -lpthread -lethercat_rtdm -Wl,--no-as-needed -Wl,@/usr/lib/cobalt.wrappers -Wl,@/usr/lib/modechk.wrappers /usr/lib/xenomai/bootstrap.o -Wl,--wrap=main -Wl,--dynamic-list=/usr/lib/dynlist.ld -L/usr/lib -lcobalt -lmodechk
TARGET = test
SRCS = $(wildcard *.c)
OBJS = $(SRCS:.c=.o)
$(TARGET):$(OBJS)
$(CC) -o $@ $^ $(LIBS)
clean:
rm -rf $(TARGET) $(OBJS)
%.o:%.c
$(CC) $(CFLAGS) -o $@ -c $<
其中核心库是:
-lethercat_rtdm
六、适合哪些应用场景?
1. 工业边缘控制器
用于在 Linux 工控机上实现 EtherCAT 主站,与伺服驱动、IO 模块等工业设备通信。
2. 多轴运动控制
结合 PLCopen Motion、RTmotion 或自研控制算法,实现多轴同步控制。
3. 机器人实时控制
在机器人系统中,通过 EtherCAT 连接伺服驱动、力传感器、IO 模块。
4. 数控系统
适合 CNC、运动插补和实时伺服控制场景。
5. 工业 AI + 控制融合
在边缘设备上同时运行 AI 推理和实时控制,例如:
视觉检测
缺陷识别
轨迹规划
实时控制
EtherCAT 驱动执行
6. 实时 Linux 实验平台
适合研究 Preempt-RT、Xenomai、Dovetail 和 EtherCAT 实时通信性能。
七、项目优势与不足
优势
第一,基于成熟的 IgH EtherCAT Master。
IgH EtherCAT Master 是开源工业控制领域较常见的 EtherCAT 主站基础,生态和资料相对丰富。
第二,支持新内核。
支持 Linux Kernel 5.x/6.x,更适合现代工业边缘平台。
第三,支持两类实时方案。
同时覆盖 Preempt-RT 和 Xenomai/Dovetail,适用范围更广。
第四,适配 Intel 工业常用网卡。
支持 IGB、IGC、mGBE 等驱动,有利于提升通信性能。
第五,支持用户态开发。
通过用户态库或 RTDM 库,降低应用开发难度。
第六,支持多主站。
适合复杂控制系统和多总线场景。
不足
第一,部署复杂度较高。
需要内核源码、实时内核、网卡驱动、内核模块编译经验,对新手不算友好。
第二,许可证需要重点关注。
Master 源码为 GPL v2,用户态库为 LGPL v2.1,企业商用时需要法务和开源合规评估。
第三,硬件适配仍是关键。
EtherCAT 性能高度依赖网卡、驱动、实时内核和系统调优。
第四,文档更偏工程配置。
如果没有 EtherCAT、Linux 内核模块和实时 Linux 背景,直接上手可能会遇到较多问题。
第五,实时性能需要实测。
不同硬件平台、内核配置、BIOS 设置、CPU 隔离和网卡驱动都会影响最终控制周期抖动。
八、调试与避坑建议
1. 确认网卡型号
优先使用工业常见 Intel 网卡,例如:
Intel I210
Intel I211
Intel I225
Intel I226
不要随意使用 USB 网卡或普通消费级网卡做实时 EtherCAT 控制。
2. 确认实时内核
查看当前内核:
uname -a
如果使用 Preempt-RT,应确认内核带有 RT patch。
如果使用 Xenomai,应确认 Xenomai 工具链和内核配置正常。
3. 确认内核源码匹配
--with-linux-dir 指向的源码必须和当前运行内核一致,否则内核模块可能编译通过但加载失败。
4. 检查服务状态
/etc/init.d/ethercat status
如果服务启动失败,需要查看:
网卡 MAC 是否配置正确
DEVICE_MODULES 是否匹配
内核模块是否安装
depmod 是否执行
网卡是否被 NetworkManager 占用
5. 避免普通网络服务占用 EtherCAT 网卡
被 EtherCAT 使用的网卡最好不要同时承担普通 TCP/IP 网络通信。
建议:
一张网卡用于普通网络
一张专用网卡用于 EtherCAT
6. 做实时性能测试
实际部署前,应测试:
周期时间
抖动
丢帧
从站状态切换
长时间运行稳定性
异常断线恢复
CPU 占用
中断延迟
工业控制系统不能只看"能启动",更要看长期稳定性和实时确定性。
九、总结
ethercat-masterstack 是 open-edge-platform/edge-ai-libraries 中非常关键的工业边缘控制组件。
它的核心价值在于把开源 EtherCAT 主站能力与现代 Linux 实时控制环境结合起来,支持:
Linux Kernel 5.x/6.x
Preempt-RT
Xenomai/Dovetail
Intel IGB/IGC/mGBE 驱动
用户态运行时
多主站配置
对于工业 AI 与实时控制融合的系统来说,这类组件非常重要。AI 模型可以负责感知、识别、预测和规划,而 EtherCAT Master Stack 则负责把控制指令稳定、快速、确定性地传递到工业现场设备。
可以说,它处在"边缘智能"和"工业执行层"之间,是连接 AI 决策与物理控制的重要基础设施。
互动话题
你在工业控制项目中更关注 EtherCAT 主站的哪一点?
-
实时周期和抖动;
-
多轴同步性能;
-
网卡驱动适配;
-
Preempt-RT 与 Xenomai 的选择;
-
用户态开发便利性;
-
多主站支持;
-
与 AI 推理、视觉检测、运动控制的融合。
欢迎在评论区分享你的使用经验和踩坑记录。