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)