跳到主要内容

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_hobotGeneric 驱动(ec_generic
驱动模块ec_hobotec_generic
网络性能更优(直接操作硬件,绕过 Linux 网络栈)标准 Linux 网络栈
与 gmac 驱动兼容性互斥,需卸载 hobot_eth_super兼容,可共存
网口配置方式必须使用 MAC 地址支持网口名或 MAC 地址
网口在系统中的可见性被 Native 驱动接管后,对应 MAC 的网口ip a 中消失网口始终可见

Native 驱动使用步骤

网口 MAC 地址参考

以下为 S100/S600 的四个示例以太网口 MAC 地址:

网口MAC 地址
eth0xx:xx:xx:xx:01:18
eth1xx:xx:xx:xx:01:19
eth2xx:xx:xx:xx:01:1a
eth3xx: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 服务:

  1. 修改配置(例如从 eth0 切换到 eth1):

    MASTER0_DEVICE="xx:xx:xx:xx:01:19"  # 改为 eth1 的 MAC
    DEVICE_MODULES="hobot"
  2. 重启服务:

    sudo systemctl restart ethercat
  3. 验证新网口已生效:

    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 驱动使用步骤」。

  1. 确认硬件连接:
    • 从站已上电。
    • 网线已接到你选择的主站网口(eth0eth1)。
  2. 选择主站网口(在选择主站端口前,请仔细阅读 使用前网络配置中的注意事项
  3. 启动 EtherCAT 主站(使用 ethercatctl):
    sudo ethercatctl start
  1. 如果是 IgH 1.5.x(S100 固件默认版本),且配置了 NetworkManager 不管理主站网口,则在使用前需要先手动启用网口:
  1. 如果是 IgH 1.5.x(S600 固件默认版本),且配置了 NetworkManager 不管理主站网口,则在使用前需要先手动启用网口:
sudo ip link set dev eth0 up
# 若主站网口为 eth1,则替换为 eth1
  1. 使用用户层命令检查主站:
    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
  2. 配置 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 端构建支持两种构建方式:

  1. 单独编译 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.deb

    hobot-ethercat 的构建包括内核模块+用户层应用两个大模块。内核模块构建依赖用户本地构建的内核输出物。在用户没有在本地构建过内核时会自动跳过内核模块的构建。

    信息

    hobot-ethercat debian 包中同时包含 Native 驱动(ec_hobot)和 Generic 驱动(ec_generic),通过 /etc/ethercat.conf 中的 DEVICE_MODULES 配置切换。

  2. 整编
    默认 rdk-gen 构建系统在整编 disk 镜像后,镜像内会默认集成 hobot-ethercat debian 包,内部包括内核模块及用户层应用。

板端构建

  1. 下载源码:
    git clone https://gitlab.com/etherlab.org/ethercat.git -b stable-1.5
  2. 构建
    # 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
  3. 编辑/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 所有网络接口!!!会有设备失联的风险!!!

方案一:配置 NetworkManager 不管理 eth0 接口(推荐)

  1. 创建 NetworkManager 配置文件,将 eth0 设置为非托管状态:

    信息

    重要:配置文件中的节名(section name)必须以 device- 开头。

    示例(用户工具自己需求进行更改):

    vim /etc/NetworkManager/conf.d/99-unmanaged-devices.conf

    修改为如下内容:

    [device-eth0-unmanaged]
    match-device=interface-name:eth0
    managed=0
  2. 重启系统以清除 NetworkManager 的设备状态缓存:

    sudo reboot
    信息

    重启会清除 /run/NetworkManager/devices/ 目录中的状态。这样可以防止 NetworkManager 对设置为非托管的设备使用该目录中已存在的连接。

  3. 验证配置(重启后): 查看网络接口状态,可以看到 eth0 已经是不管理的状态了:

    sunrise@ubuntu:~$ sudo nmcli device status
    DEVICE TYPE STATE CONNECTION
    eth1 ethernet connected netplan-eth1
    lo loopback connected (externally) lo
    wlan0 wifi disconnected --
    p2p-dev-wlan0 wifi-p2p disconnected --
    eth2 ethernet unavailable --
    eth3 ethernet unavailable --
    eth0 ethernet unmanaged --

    此时查看 IP 地址,可以看到 eth0 是 DOWN 状态:

    sunrise@ubuntu:~$ sudo ip a
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute
    valid_lft forever preferred_lft forever
    2: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 82:89:02:ec:a0:75 brd ff:ff:ff:ff:ff:ff
    altname end2
    3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 26:36:26:6f:d5:bf brd ff:ff:ff:ff:ff:ff permaddr 52:a7:fa:6c:50:16
    altname end3
    inet 192.168.127.10/24 brd 192.168.127.255 scope global noprefixroute eth1
    valid_lft forever preferred_lft forever
    inet6 fe80::2436:26ff:fe6f:d5bf/64 scope link
    valid_lft forever preferred_lft forever
    ...
  4. 启动 IgH EtherCAT 主站:

    # 启动 EtherCAT 服务
    sudo ethercatctl start

    # 查看服务状态
    sudo ethercatctl status

    示例输出:

    sudo ethercatctl status
    # sample output
    Checking for EtherCAT master 1.5.3
    Master0 running

    sudo ethercat master
    # sample output
    Master0
    Phase: Idle
    Active: no
    Slaves: 0
    Ethernet devices:
    Main: 82:89:02:ec:a0:75 (attached)
    Link: DOWN
    Tx frames: 0
    Tx bytes: 0
    Rx frames: 0
    Rx bytes: 0
    Tx errors: 0
    Tx frame rate [1/s]: 0 0 0
    Tx rate [KByte/s]: 0.0 0.0 0.0
    Rx frame rate [1/s]: 0 0 0
    Rx rate [KByte/s]: 0.0 0.0 0.0
    Common:
    Tx frames: 0
    Tx bytes: 0
    Rx frames: 0
    Rx bytes: 0
    Lost frames: 0
    Tx frame rate [1/s]: 0 0 0
    Tx rate [KByte/s]: 0.0 0.0 0.0
    Rx frame rate [1/s]: 0 0 0
    Rx rate [KByte/s]: 0.0 0.0 0.0
    Loss rate [1/s]: 0 0 0
    Frame loss [%]: 0.0 0.0 0.0
    Distributed clocks:
    Reference clock: None
    DC reference time: 0
    Application time: 0
    2000-01-01 00:00:00.000000000

    sunrise@ubuntu:~$ sudo ethercat slaves
    # 此时没有检测到从站
  5. 手动启用 eth0 网卡(IgH 1.5.x 需要):

    sudo ip link set dev eth0 up

    启用后再次检查,此时 EtherCAT 工作正常:

    sunrise@ubuntu:~$ sudo ip a
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute
    valid_lft forever preferred_lft forever
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 82:89:02:ec:a0:75 brd ff:ff:ff:ff:ff:ff
    altname end2
    inet6 fe80::8089:2ff:feec:a075/64 scope link
    valid_lft forever preferred_lft forever
    3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 26:36:26:6f:d5:bf brd ff:ff:ff:ff:ff:ff permaddr 52:a7:fa:6c:50:16
    altname end3
    inet 192.168.127.10/24 brd 192.168.127.255 scope global noprefixroute eth1
    valid_lft forever preferred_lft forever
    inet6 fe80::2436:26ff:fe6f:d5bf/64 scope link
    valid_lft forever preferred_lft forever
    ...

    sunrise@ubuntu:~$ sudo ethercat master
    Master0
    Phase: Idle
    Active: no
    Slaves: 1
    Ethernet devices:
    Main: 82:89:02:ec:a0:75 (attached)
    Link: UP
    Tx frames: 5236
    Tx bytes: 373552
    Rx frames: 5235
    Rx bytes: 373492
    Tx errors: 0
    Tx frame rate [1/s]: 249 313 77
    Tx rate [KByte/s]: 14.6 22.0 5.4
    Rx frame rate [1/s]: 249 313 77
    Rx rate [KByte/s]: 14.6 22.0 5.4
    Common:
    Tx frames: 5236
    Tx bytes: 373552
    Rx frames: 5235
    Rx bytes: 373492
    Lost frames: 0
    Tx frame rate [1/s]: 249 313 77
    Tx rate [KByte/s]: 14.6 22.0 5.4
    Rx frame rate [1/s]: 249 313 77
    Rx rate [KByte/s]: 14.6 22.0 5.4
    Loss rate [1/s]: 0 0 0
    Frame loss [%]: 0.0 0.0 0.0
    Distributed clocks:
    Reference clock: Slave 0
    DC reference time: 0
    Application time: 0
    2000-01-01 00:00:00.000000000

    sunrise@ubuntu:~$ sudo ethercat slaves
    0 0:0 PREOP + SSC-Device-ADDOUT
    提示

    此时可以看到 Link: UPSlaves: 1,EtherCAT 从站已成功识别并正常工作。

如果你使用的是 EtherCAT igh 主站1.6.4以上的版本,可以参考自动启停网卡(EtherCAT igh 主站1.6.4版本之后支持)进行配置。

方案二:使用 netplan 将 eth0 配置为静态 IP 地址

点击这里展开更多内容
  1. 修改配置文件 /etc/netplan/01-hobot-net.yaml 如下(以下配置作为示例,用户自行按需配置):
    root@ubuntu:/etc/netplan# cat 01-hobot-net.yaml
    network:
    version: 2
    renderer: NetworkManager
    ethernets:
    eth0:
    addresses:
    - "192.168.127.10/24"
    nameservers:
    addresses:
    - 10.9.1.2
    - 8.8.8.8
    - 8.8.4.4
    macaddress: "52:e9:e0:57:b8:59"
    eth1:
    addresses:
    - "192.168.127.11/24"
    nameservers:
    addresses:
    - 10.9.1.2
    - 8.8.8.8
    - 8.8.4.4
    macaddress: "22:60:87:8c:4d:8d"
  2. 应用配置文件
    netplan generate
    netplan apply
  3. 查看 ip 地址信息
    root@ubuntu:/etc/netplan# ip a
    # Sample output:
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
    valid_lft forever preferred_lft forever
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 52:e9:e0:57:b8:59 brd ff:ff:ff:ff:ff:ff permaddr c6:34:76:c1:e0:b4
    inet 192.168.127.10/24 brd 192.168.127.255 scope link noprefixroute eth0
    valid_lft forever preferred_lft forever
    inet6 fe80::50e9:e0ff:fe57:b859/64 scope link
    valid_lft forever preferred_lft forever
    3: eth1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
    link/ether ca:03:43:37:17:52 brd ff:ff:ff:ff:ff:ff

方案三:使用 netplan 将 eth0 配置为本地链路

点击这里展开更多内容
  1. 修改配置文件 /etc/netplan/01-hobot-net.yaml 如下:(以下配置作为示例,用户自行按需配置):
    root@ubuntu:/etc/netplan# cat 01-hobot-net.yaml
    network:
    version: 2
    renderer: NetworkManager
    ethernets:
    eth0:
    #nameservers:
    # addresses:
    # - 10.9.1.2
    # - 8.8.8.8
    # - 8.8.4.4
    dhcp4: false
    dhcp6: false
    macaddress: "52:e9:e0:57:b8:59"
    eth1:
    addresses:
    - "192.168.127.11/24"
    nameservers:
    addresses:
    - 10.9.1.2
    - 8.8.8.8
    - 8.8.4.4
    macaddress: "22:60:87:8c:4d:8d"
  2. 应用配置文件
    netplan generate
    netplan apply
  3. 查看 ip 地址信息
    root@ubuntu:/etc/netplan# ip a
    # Sample output:
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
    valid_lft forever preferred_lft forever
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 52:e9:e0:57:b8:59 brd ff:ff:ff:ff:ff:ff permaddr c6:34:76:c1:e0:b4
    inet 169.254.245.98/16 brd 169.254.255.255 scope link noprefixroute eth0
    valid_lft forever preferred_lft forever
    inet6 fe80::50e9:e0ff:fe57:b859/64 scope link
    valid_lft forever preferred_lft forever
    3: eth1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
    link/ether ca:03:43:37:17:52 brd ff:ff:ff:ff:ff:ff

使用 eth0 作为主站时的 eth1 网络配置方案

以下部分网络配置只提供 eth1 的配置,eth0 的配置可参考上方 使用-eth0-作为-ethercat-主站

配置 eth1 为 DHCP

点击这里展开更多内容
network:
version: 2
renderer: NetworkManager
ethernets:
eth0:
# 参考上面进行配置
eth1:
nameservers:
addresses:
- 10.9.1.2
- 8.8.8.8
- 8.8.4.4
dhcp4: true
dhcp6: true
macaddress: "26:36:26:6f:d5:bf"

配置 eth1 为静态 IP

点击这里展开更多内容
network:
version: 2
renderer: NetworkManager
ethernets:
eth0:
# 参考上面进行配置
eth1:
addresses:
- "192.168.127.11/24"
routes:
- to: default
via: "192.168.127.1"
nameservers:
addresses:
- 10.9.1.2
- 8.8.8.8
- 8.8.4.4
macaddress: "26:36:26:6f:d5:bf"

使用 eth1 作为 EtherCAT 主站

使用 eth1 作为 EtherCAT 主站的网络配置与上述使用 eth0 作为 EtherCAT 主站类似,下方只展示推荐使用方案。

修改 EtherCAT 配置文件使用 eth1 作为 EtherCAT 主站

首先修改 /etc/ethercat.conf 使用 eth1 作为 EtherCAT 主站

...
# Main Ethernet devices.
#
# The MASTER<X>_DEVICE variable specifies the Ethernet device for a master
# with index 'X'.
#
# Example: "eth1"
#
# 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="eth1"
#
MASTER0_DEVICE="eth1"
#MASTER1_DEVICE=""
...
注意

注意:RDK S100 默认使用 eth0 作为 DHCP 网口,eth1 为静态 IP 配置,用户可以直接按照下方步骤配置 NetworkManager 不管理 eth1 接口(推荐)

注意

注意:RDK S600 默认使用 eth0 作为 DHCP 网口,eth1 为静态 IP 配置,用户可以直接按照下方步骤配置 NetworkManager 不管理 eth1 接口(推荐)

配置 NetworkManager 不管理 eth1 接口(推荐)

  1. 创建 NetworkManager 配置文件,将 eth1 设置为非托管状态:

    信息

    重要:配置文件中的节名(section name)必须以 device- 开头。

    示例(用户工具自己需求进行更改):

    vim /etc/NetworkManager/conf.d/99-unmanaged-devices.conf

    修改为如下内容:

    [device-eth1-unmanaged]
    match-device=interface-name:eth1
    managed=0
  2. 重启系统以清除 NetworkManager 的设备状态缓存:

    sudo reboot
    信息

    重启会清除 /run/NetworkManager/devices/ 目录中的状态。这样可以防止 NetworkManager 对设置为非托管的设备使用该目录中已存在的连接。

  3. 验证配置(重启后): 查看网络接口状态,可以看到 eth1 已经是不管理的状态了:

    sunrise@ubuntu:~$ sudo nmcli device status
    nmcli device status
    DEVICE TYPE STATE CONNECTION
    lo loopback connected (externally) lo
    wlan0 wifi disconnected --
    p2p-dev-wlan0 wifi-p2p disconnected --
    eth0 ethernet unavailable --
    eth2 ethernet unavailable --
    eth3 ethernet unavailable --
    eth1 ethernet unmanaged --

    此时查看 IP 地址,可以看到 eth0 是 DOWN 状态:

    sunrise@ubuntu:~$ sudo ip a
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute
    valid_lft forever preferred_lft forever
    2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
    link/ether c6:40:e8:32:f0:8a brd ff:ff:ff:ff:ff:ff
    altname end2
    3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether c2:97:53:60:e3:5b brd ff:ff:ff:ff:ff:ff
    altname end3
    ...
  4. 启动 IgH EtherCAT 主站:

    # 启动 EtherCAT 服务
    sudo ethercatctl start

    # 查看服务状态
    sudo ethercatctl status

    示例输出:

    sunrise@ubuntu:~$ sudo ethercatctl start
    [ 458.587518] ec_generic: Binding socket to interface 3 (eth1).

    sunrise@ubuntu:~$ sudo ethercatctl status
    Checking for EtherCAT master 1.5.3
    Master0 running

    sunrise@ubuntu:~$ sudo ethercat master
    Master0
    Phase: Idle
    Active: no
    Slaves: 0
    Ethernet devices:
    Main: c2:97:53:60:e3:5b (attached)
    Link: DOWN
    Tx frames: 0
    Tx bytes: 0
    Rx frames: 0
    Rx bytes: 0
    Tx errors: 0
    Tx frame rate [1/s]: 0 0 0
    Tx rate [KByte/s]: 0.0 0.0 0.0
    Rx frame rate [1/s]: 0 0 0
    Rx rate [KByte/s]: 0.0 0.0 0.0
    Common:
    Tx frames: 0
    Tx bytes: 0
    Rx frames: 0
    Rx bytes: 0
    Lost frames: 0
    Tx frame rate [1/s]: 0 0 0
    Tx rate [KByte/s]: 0.0 0.0 0.0
    Rx frame rate [1/s]: 0 0 0
    Rx rate [KByte/s]: 0.0 0.0 0.0
    Loss rate [1/s]: 0 0 0
    Frame loss [%]: 0.0 0.0 0.0
    Distributed clocks:
    Reference clock: None
    DC reference time: 0
    Application time: 0
    2000-01-01 00:00:00.000000000

    sunrise@ubuntu:~$ sudo ethercat slaves
    # 此时没有检测到从站
  5. 手动启用 eth1 网卡(IgH 1.5.x 需要):

    sudo ip link set dev eth1 up

    启用后再次检查,此时 EtherCAT 工作正常:

    sunrise@ubuntu:~$ sudo ip a
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute
    valid_lft forever preferred_lft forever
    2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
    link/ether c6:40:e8:32:f0:8a brd ff:ff:ff:ff:ff:ff
    altname end2
    3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether c2:97:53:60:e3:5b brd ff:ff:ff:ff:ff:ff
    altname end3
    inet6 fe80::c097:53ff:fe60:e35b/64 scope link
    valid_lft forever preferred_lft forever
    ...

    sunrise@ubuntu:~$ sudo ethercat master
    Master0
    Phase: Idle
    Active: no
    Slaves: 1
    Ethernet devices:
    Main: c2:97:53:60:e3:5b (attached)
    Link: UP
    Tx frames: 7071
    Tx bytes: 483524
    Rx frames: 7070
    Rx bytes: 483464
    Tx errors: 0
    Tx frame rate [1/s]: 249 280 98
    Tx rate [KByte/s]: 14.6 18.1 6.5
    Rx frame rate [1/s]: 249 280 98
    Rx rate [KByte/s]: 14.6 18.1 6.5
    Common:
    Tx frames: 7071
    Tx bytes: 483524
    Rx frames: 7070
    Rx bytes: 483464
    Lost frames: 0
    Tx frame rate [1/s]: 249 280 98
    Tx rate [KByte/s]: 14.6 18.1 6.5
    Rx frame rate [1/s]: 249 280 98
    Rx rate [KByte/s]: 14.6 18.1 6.5
    Loss rate [1/s]: 0 -0 0
    Frame loss [%]: 0.0 -0.0 0.0
    Distributed clocks:
    Reference clock: Slave 0
    DC reference time: 0
    Application time: 0
    2000-01-01 00:00:00.000000000

    sunrise@ubuntu:~$ sudo ethercat slaves
    0 0:0 PREOP + SSC-Device-ADDOUT
    提示

    此时可以看到 Link: UPSlaves: 1,EtherCAT 从站已成功识别并正常工作。

如果你使用的是 EtherCAT igh 主站1.6.4以上的版本,可以参考自动启停网卡(EtherCAT igh 主站1.6.4版本之后支持)进行配置。

FAQ

自动启停网卡(EtherCAT igh 主站1.6.4版本之后支持)

信息

新版本支持:新版本的 EtherCAT igh 主站(1.6.4版本之后)配置与启动脚本支持自动 up 端口(在启动脚本中添加了 ip link set dev eth0 up 命令)。如果您的版本不支持自动启用,可以手动执行上述命令。

  1. 修改 /etc/ethercat.conf 将对应的网口添加到 UPDOWN_INTERFACES 变量中。例如添加 eth0 接口,这样在执行 ethercatctl startethercatctl stop 的时候,会自动 UP/DOWN 对应的网络接口。
    #
    # List of interfaces to bring up and down automatically.
    #
    # Specify a space-separated list of interface names (such as eth0 or
    # enp0s1) that shall be brought up on `ethercatctl start` and down on
    # `ethercatctl stop`.
    #
    # When using the generic driver, the corresponding Ethernet device has to be
    # activated before the master is started, otherwise all frames will time out.
    # This the perfect use-case for `UPDOWN_INTERFACES`.
    #
    UPDOWN_INTERFACES="eth0"