ethercat
注意:使用 EtherCAT 协议需要系统版本 V4.0.4及以上。
Native 驱动与 Generic 驱动
版本说明
RDK S100 V4.0.7 及以上版本默认使用 Native(hobot)EtherCAT 驱动,而非 Generic 驱动。
注意:本文档后续章节描述的 EtherCAT 使用方式(「使用前网络配置」、「EtherCAT使用指南」等)基于 Generic 驱动模式。如果您使用的是 V4.0.7 默认镜像,系统已预配置为 Native 驱动模式,请优先参考本章节的 Native 驱动使用说明。
RDK S600 V5.1.0 及以上版本默认使用 Native(hobot)EtherCAT 驱动,而非 Generic 驱动。
注意:本文档后续章节描述的 EtherCAT 使用方式(「使用前网络配置」、「EtherCAT使用指南」等)基于 Generic 驱动模式。如果您使用的是 V5.1.0 默认镜像,系统已预配置为 Native 驱动模式,请优先参考本章节的 Native 驱动使用说明。
Native 驱动与 Generic 驱动的区别
| 特性 | Native 驱动(ec_hobot) | Generic 驱动(ec_generic) |
|---|---|---|
| 驱动模块 | ec_hobot | ec_generic |
| 网络性能 | 更优(直接操作硬件,绕过 Linux 网络栈) | 标准 Linux 网络栈 |
| 与 gmac 驱动兼容性 | 互斥,需卸载 hobot_eth_super | 兼容,可共存 |
| 网口配置方式 | 必须使用 MAC 地址 | 支持网口名或 MAC 地址 |
| 网口在系统中的可见性 | 被 Native 驱动接管后,对应 MAC 的网口从 ip a 中消失 | 网口始终可见 |
Native 驱动使用步骤
网口 MAC 地址参考
以下为 S100/S600 的四个示例以太网口 MAC 地址:
| 网口 | MAC 地址 |
|---|---|
| eth0 | xx:xx:xx:xx:01:18 |
| eth1 | xx:xx:xx:xx:01:19 |
| eth2 | xx:xx:xx:xx:01:1a |
| eth3 | xx:xx:xx:xx:01:1b |
实际的 MAC 地址可能因硬件版本不同而略有差异。请以设备上 ip link show 命令输出为准。
Native 驱动配置步骤
步骤 1:确认配置文件
默认镜像中 /etc/ethercat.conf 已预配置为 Native 模式。如需切换 EtherCAT 使用的网口,修改 MASTER0_DEVICE 为对应网口的 MAC 地址:
Native 驱动只支持使用 Mac 地址进行配置。默认的 MASTER0_DEVICE 值为 ff:ff:ff:ff:ff:ff,在启用的时候默认使用 eth0 网口,请根据需求修改。
MASTER0_DEVICE="xx:xx:xx:xx:01:18" # eth0 的 MAC 地址
DEVICE_MODULES="hobot"
如需使用 eth1 作为 EtherCAT 网口:
MASTER0_DEVICE="xx:xx:xx:xx:01:19" # eth1 的 MAC 地址
DEVICE_MODULES="hobot"
SSH 连接注意事项:如果通过 SSH 远程连接开发板,使用 systemctl 或 ethercatctl 管理 ethercat 服务的时候。由于 gmac 驱动的卸载/重装,网络会短暂中断几秒(ping 会显示 Destination Host Unreachable),SSH 客户端通常会自动重连。这是正常现象,无需手动干预。
步骤 2:启动 EtherCAT
sudo systemctl start ethercat
sudo systemctl status ethercat
# 或者
sudo ethercatctl start
sudo ethercatctl status
正常输出示例:
● ethercat.service - EtherCAT Master Kernel Modules
Loaded: loaded (/usr/lib/systemd/system/ethercat.service; disabled; preset: enabled)
Drop-In: /etc/systemd/system/ethercat.service.d
└─prestart.conf
Active: active (exited) since Thu 2026-03-26 20:48:36 CST; 4s ago
Process: 6476 ExecStartPre=/sbin/rmmod hobot_eth_super (code=exited, status=0/SUCCESS)
Process: 6504 ExecStart=/sbin/ethercatctl start (code=exited, status=0/SUCCESS)
Main PID: 6504 (code=exited, status=0/SUCCESS)
步骤 3:验证
启动后,检查 ip a 可以发现被 EtherCAT 绑定的网口 MAC 地址已从内核协议栈中消失(不再出现在列表中):
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> ...
6: wlan0: <NO-CARRIER,BROADCAST,MULTICAST,UP> ...
7: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> ... # MAC 为未绑定的网口
8: eth1: <NO-CARRIER,BROADCAST,MULTICAST,UP> ... # MAC 为未绑定的网口
9: eth2: <NO-CARRIER,BROADCAST,MULTICAST,UP> ... # MAC 为未绑定的网口
# 注意:MAC 为 xx:xx:xx:xx:01:18 的 eth0 已不在列表中(被 Native 驱动接管)
检查 EtherCAT 主站状态:
$ sudo ethercat master
Master0
Phase: Idle
Active: no
Slaves: 1
Ethernet devices:
Main: xx:xx:xx:xx:01:18 (attached)
Link: UP
...
$ sudo ethercat slaves
0 0:0 PREOP + SSC-Device
步骤 4:停止 EtherCAT(切换回普通网络模式)
停止 EtherCAT 服务后,会自动加载 hobot_eth_super,所有网口恢复为普通网络模式:
sudo systemctl stop ethercat
切换 Native 驱动使用的网口
如需切换 EtherCAT 使用的网口,只需修改 /etc/ethercat.conf 中的 MASTER0_DEVICE 为对应网口的 MAC 地址,然后重启 EtherCAT 服务:
-
修改配置(例如从 eth0 切换到 eth1):
MASTER0_DEVICE="xx:xx:xx:xx:01:19" # 改为 eth1 的 MAC
DEVICE_MODULES="hobot" -
重启服务:
sudo systemctl restart ethercat -
验证新网口已生效:
sudo ethercat master
# 应显示新的 MAC 地址: Main: xx:xx:xx:xx:01:19 (attached)
Native 驱动的风险与影响
重要:由于 Native 驱动与 gmac 驱动互斥,涉及到网卡驱动的卸载与加载。在进行 Native 驱动与 generic 驱动切换的时候,必须先修改配置文件,然后重启系统完成驱动切换,否则可能会引起网络中断。
1. 与 gmac 驱动冲突
Native 驱动 ec_hobot 与系统的 hobot_eth_super(xgmac)驱动互斥,两者不能同时加载。启动 EtherCAT 前必须先卸载 hobot_eth_super,否则 EtherCAT 服务无法正常启动。
影响:卸载 hobot_eth_super 后,EtherCAT 主站绑定的网口被 Native 驱动接管,其余以太网口仍可正常使用(可配置 IP、用于 SSH 连接等)。但在 rmmod/modprobe hobot_eth_super 的瞬间,所有以太网口会短暂中断数秒后自动恢复,SSH 连接通常会自动重连。
2. 网口被 Native 驱动独占
当 Native 驱动启动后,配置文件中 MASTER0_DEVICE 绑定的 MAC 地址对应的网口将从 Linux 内核协议栈中消失(ip a 中不再显示该网口),完全 被 EtherCAT 独占。其余未绑定的网口仍然可见且可正常使用。
3. MAC 地址配置要求
Native 驱动模式下,/etc/ethercat.conf 中的 MASTER0_DEVICE 必须配置为对应网口的实际 MAC 地址(如 "xx:xx:xx:xx:01:18"),不能使用网口名(如 "eth0"),否则驱动无法正确绑定。
deb 包升级注意事项
升级 EtherCAT 相关 deb 包时,必须保证版本一致,同步升级以下两个包:
# 两个包必须同步升级,版本号必须匹配
dpkg -i hobot-ethercat_5.1.0-20260525160326_arm64.deb
dpkg -i linux-image-rdk-s600_6.1.158-rt58-DR-5.1.0-2605251554-g369e4b-gf8e87c-29_arm64.deb
如果只升级 hobot-ethercat 而不升级 linux-image,可能因内核模块版本不匹配导致驱动无法加载。
切换到 Generic 驱动模式
如果您需要使用 Generic 驱动模式(支持多网口 eth0/eth1、可与 gmac 驱动共存、可正常停止服务),请修改 /etc/ethercat.conf:
# 修改为 Generic 驱动配置
sudo sed -i 's/DEVICE_MODULES="hobot"/DEVICE_MODULES="generic"/' /etc/ethercat.conf
sudo sed -i 's/MASTER0_DEVICE=".*"/MASTER0_DEVICE="eth0"/' /etc/ethercat.conf
修改后重启设备生效。Generic 模式下的详细使用方式请参考后续章节(「使用前网络配置」起)。
使用前网络配置
注意:以下内容适用于 Generic 驱动模式。如果您使用的是 V4.0.7 默认的 Native 驱动模式,请参考上方「Native 驱动使用步骤」。
EtherCAT协议与以太网协议互斥,无法共存,开发板默认使用 eth0 作为 DHCP 管理接口,如果用户想使用 eth0 作为 EtherCAT 网络接口,可以使用下面的几种方案进行网络配置,点击查看使用eth0作为ethercat主站。
特别注意:RDK S100默认使用 eth0作为 DHCP 网口,如果用户原本使用 eth0作为 SSH 连接开发板的主要模式,在使用 eth0作为 EtherCAT 主站后,需要配置 eth1为 DHCP,或配置用户本地网络可用的固定 IP 作为 SSH 连接方式,并且将连接的网线改接到 eth1网口。 点击查看使用 eth0 作为主站时的 eth1 网络配置方案。
注意:以下内容适用于 Generic 驱动模式。如果您使用的是 V5.1.0 默认的 Native 驱动模式,请参考上方「Native 驱动使用步骤」。
EtherCAT协议与以太网协议互斥,无法共存,开发板默认使用 eth0 作为 DHCP 管理接口,如果用户想使用 eth0 作为 EtherCAT 网络接口,可以使用下面的几种方案进行网络配置,点击查看使用eth0作为ethercat主站。
特别注意:RDK S600默认使用 eth0作为 DHCP 网口,如果用户原本使用 eth0作为 SSH 连接开发板的主要模式,在使用 eth0作为 EtherCAT 主站后,需要配置 eth1为 DHCP,或配置用户本地网络可用的固定 IP 作为 SSH 连接方式,并且将连接的网线改接到 eth1网口。 点击查看使用 eth0 作为主站时的 eth1 网络配置方案。
EtherCAT 使用指南
本节内容适用于 Generic 驱动模式。如果您使用的是 Native 驱动模式,请参考上方「Native 驱动使用步骤」。
- 确认硬件连接:
- 从站已上电。
- 网线已接到你选择的主站网口(
eth0或eth1)。
- 选择主站网口(在选择主站端口前,请仔细阅读 使用前网络配置中的注意事项:
- 使用
eth0作为主站:看 使用 eth0 作为 EtherCAT 主站。 - 使用
eth1作为主站:看 使用 eth1 作为 EtherCAT 主站。
- 使用
- 启动 EtherCAT 主站(使用 ethercatctl):
sudo ethercatctl start
- 如果是 IgH 1.5.x(S100 固件默认版本),且配置了 NetworkManager 不管理主站网口,则在使用前需要先手动启用网口:
- 如果是 IgH 1.5.x(S600 固件默认版本),且配置了 NetworkManager 不管理主站网口,则在使用前需要先手动启用网口:
sudo ip link set dev eth0 up
# 若主站网口为 eth1,则替换为 eth1
- 使用用户层命令检查主站:
sudo ethercat master
# Sample output:
sunrise@ubuntu:~$ sudo ethercat master
Master0
Phase: Idle
Active: no
Slaves: 0
Ethernet devices:
Main: c8:30:76:63:2d:93 (attached)
Link: UP
Tx frames: 9477
Tx bytes: 568620
Rx frames: 0
Rx bytes: 0
Tx errors: 0
Tx frame rate [1/s]: 124 125 89
Tx rate [KByte/s]: 7.3 7.3 5.2
Rx frame rate [1/s]: 0 0 0
Rx rate [KByte/s]: 0.0 0.0 0.0
Common:
Tx frames: 9477
Tx bytes: 568620
Rx frames: 0
Rx bytes: 0
Lost frames: 9477
Tx frame rate [1/s]: 124 125 89
Tx rate [KByte/s]: 7.3 7.3 5.2
Rx frame rate [1/s]: 0 0 0
Rx rate [KByte/s]: 0.0 0.0 0.0
Loss rate [1/s]: 124 125 89
Frame loss [%]: 100.0 100.0 100.0
Distributed clocks:
Reference clock: None
DC reference time: 0
Application time: 0 - 配置 IgH 服务自启动:
sudo systemctl enable ethercat
EtherCAT 开发指南
软件栈
地瓜 RDK S100 默认提供 EtherCAT-IgH 1.5 版本软件栈(本节以 S100 为例,S600 同理)。EtherCAT-IgH软件栈是目前主流的开源 EtherCAT 主站协议。
EtherCAT 官网:EtherLab | EtherCAT EtherCAT 开源代码仓库:Gitlab | EtherLab - EtherCAT
编译和部署
V4.0.7 默认使用 Native 驱动(ec_hobot),该驱动已预编译在系统镜像中。以下 Host 端和板端构建说明适用于自行编译 EtherCAT 软件栈的场景。
V5.1.0 默认使用 Native 驱动(ec_hobot),该驱动已预编译在系统镜像中。以下 Host 端和板端构建说明适用于自行编译 EtherCAT 软件栈的场景。
Host 端构建
Host 端构建支持两种构建方式:
-
单独编译 debian 包并部署
# Construct debian package
./mk_debs.sh hobot-ethercat
# Deploy
## Transfer generated out/product/deb_packages/hobot-ethercat_<***>_arm64.deb package to RDK S100/S600, the "<***>" is the version string
## On RDK S100/S600, presuming debian package is transferred to /userdata
dpkg -i /userdata/hobot-ethercat_4.0.4-20250827135836_arm64.debhobot-ethercat 的构建包括内核模块+用户层应用两个大模块。内核模块构建依赖用户本地构建的内核输出物。在用户没有在本地构建过内核时会自动跳过内核模块的构建。
信息hobot-ethercatdebian 包中同时包含 Native 驱动(ec_hobot)和 Generic 驱动(ec_generic),通过/etc/ethercat.conf中的DEVICE_MODULES配置切换。 -
整编
默认 rdk-gen 构建系统在整编 disk 镜像后,镜像内会默认集成 hobot-ethercat debian 包,内部包括内核模块及用户层应用。
板端构建
- 下载源码:
git clone https://gitlab.com/etherlab.org/ethercat.git -b stable-1.5 - 构建
# Install build dependencies
sudo apt install automake libtool m4 autoconf
# Setup kernel module build environment
sudo apt install flex bison
sudo make -C /lib/modules/$(uname -r)/build prepare
# Setup build environment
cd ethercat
./bootstrap
./configure --enable-kernel --enable-generic --enable-igb --disable-eoe --enable-hrtimer --disable-8139too --with-linux-dir=/lib/modules/$(uname -r)/build/
# Compile and install
make -j
make modules -j
sudo make install
sudo make modules_install - 编辑
/usr/local/etc/ethercat.conf,添加以下内容:MASTER0_DEVICE="eth0" // Device or MAC
DEVICE_MODULES="generic"
使用 eth0 作为 EtherCAT 主站
修改 EtherCAT 配置文件使用 eth0 作为 EtherCAT 主站
首先修改 /etc/ethercat.conf 文件,使用 eth0 作为 EtherCAT 主站。
...
# Main Ethernet devices.
#
# The MASTER<X>_DEVICE variable specifies the Ethernet device for a master
# with index 'X'.
#
# Specify the MAC address (hexadecimal with colons) of the Ethernet device to
# use. Example: "00:00:08:44:ab:66"
#
# Alternatively, a network interface name can be specified. The interface
# name will be resolved to a MAC address using the 'ip' command.
# Example: "eth0"
#
# The broadcast address "ff:ff:ff:ff:ff:ff" has a special meaning: It tells
# the master to accept the first device offered by any Ethernet driver.
#
# The MASTER<X>_DEVICE variables also determine, how many masters will be
# created: A non-empty variable MASTER0_DEVICE will create one master, adding a
# non-empty variable MASTER1_DEVICE will create a second master, and so on.
#
# Examples:
# MASTER0_DEVICE="00:00:08:44:ab:66"
# MASTER0_DEVICE="eth0"
#
MASTER0_DEVICE="eth0"
#MASTER1_DEVICE=""
...
根据您的使用场景,选择合适的 eth0 网络接口配置方案:
方案概述
方案一:配置 NetworkManager 不管理 eth0 接口(推荐)
- 适用场景:需要 NetworkManager 管理其他网络接口,但不想让 eth0 被管理
- 前提条件:保留 NetworkManager 服务运行
- 优势:既能保留 NetworkManager 服务,又能避免对 EtherCAT 所使用接口产生干扰
- 注意:配置 NetworkManager 不管理 eth0 接口之后,对应的网口在系统启动的时候不会自动 up,使用时请参阅下方注意信息与配置方法进行使用。
目前板卡上预装的是 igh 1.5.x 的版本,默认没有办法实现网口自动 up/down, 需要手动启用 EtherCAT 所使用接口 eth0 网卡。 igh 在 1.6.4 及之后版本支持配置文件配置网口自动 up/down, 具体参考:自动启停网卡
方案二:使用 netplan 将 eth0 配置为静态IP地址
方案三:使用 netplan 将 eth0 配置为本地链路:保留 NetworkManager 服务运行,通过 netplan 配置 eth0
- 适用场景:需要 NetworkManager 管理其他网络接口
- 前提条件:保留 NetworkManager 对 eth0 的控制权限
- 提示:需要按照下述方案使用 netplan 对 EtherCAT 所使用的网络接口进行特殊配置
特别注意:不要关闭 NetworkManager 的自动启动,否则重启后系统无法自动 UP 所有网络接口!!!会有设备失联的风险!!!