跳到主要内容 Linux 上部署 IgH EtherCAT 主站指南 | 极客日志
Shell / Bash
Linux 上部署 IgH EtherCAT 主站指南 在 Ubuntu 22.04 系统上部署 IgH EtherCAT 主站的完整流程。内容涵盖内核头文件编译安装、IgH 源码获取与编译、系统环境配置及服务启动。同时针对常见运行错误(如命令未找到、权限拒绝)提供了具体的排查与解决方案,适用于一般开发或测试环境。
CryptoLab 发布于 2026/3/28 更新于 2026/4/16 3 浏览以下是一个在 Linux 系统上部署 IgH EtherCAT 主站的教程,专注于基本安装和配置,暂不考虑实时性能优化(如 RT_PREEMPT 或 Xenomai 补丁)。本教程以 Ubuntu 22.04(Orin Nano)系统为平台,基于 IgH EtherCAT Master stable-1.6 版本,适用于一般的开发或测试环境。
实验平台配置与编译环境
操作系统 :Ubuntu 22.04(Humble)
工具和依赖 :
编译工具:build-essential
内核头文件:linux-headers-$(uname -r)
Git 和其他依赖
~$ uname -r
5.15.148-tegra
~$ cat /etc/nv_tegra_release
sudo apt update
sudo apt install -y build-essential linux-headers-$(uname -r) git autoconf automake libtool
Arm64 架构的处理器,linux-headers-$(uname -r)无.deb 包可供直接下载。会出现如下报错信息:
~$ sudo apt install -y linux-headers-$(uname -r)
[sudo ] 用户的密码:
正在读取软件包列表... 完成
正在分析软件包的依赖关系树... 完成
正在读取状态信息... 完成
E: 无法定位软件包 linux-headers-5.15.148-tegra
E: 无法按照 glob 'linux-headers-5.15.148-tegra' 找到任何软件包
NVIDIA 通常在 L4T 发布包中提供内核源代码和头文件。你可以从 NVIDIA 开发者网站下载匹配的 L4T 源代码。
cat /etc/nv_tegra_release
输出会显示类似 R35 (release), REVISION: 3.1 的信息,记录版本号(如 r35.3)。
访问 NVIDIA 开发者页面。
找到与你的 L4T 版本匹配的源代码包(例如 public_sources.tbz2)。
假设你下载了 public_sources.tbz2,执行以下命令:
tar -xjf public_sources.tbz2
cd Linux_for_Tegra/source
tar -xjf kernel_src.tbz2
cd kernel/kernel-jammy-src
sudo make headers_install ARCH=arm64 INSTALL_HDR_PATH=/usr/src/linux-headers-$(uname -r)
这会将内核头文件安装到 /usr/src/linux-headers-5.15.148-tegra。
~$ ls /usr/src/linux-headers-$(uname -r)/include
IgH EtherCAT 主站部署
步骤 1:下载和准备 IgH 源代码
克隆 IgH EtherCAT Master 仓库:
git clone https://gitlab.com/etherlab.org/ethercat.git ethercat-hg
cd ethercat-hg
git checkout stable-1.6
sudo mv ethercat-hg /usr/local/src/
cd /usr/local/src/
sudo ln -s /usr/local/src/ethercat-hg ~/ethercat
步骤 2:配置和编译
配置 IgH,使用通用驱动(generic)以兼容 Tegra 的以太网接口:
cd /usr/local/src/ethercat-hg
./configure --enable-8139too=no --prefix=/opt/etherlab --enable-generic=yes --build=aarch64-linux-gnu
--build=aarch64-linux-gnu:指定架构为 ARM64(Tegra 设备通常是 64 位)。
--enable-generic=yes:使用通用以太网驱动,适合 Tegra 的内置网卡。
sudo make
sudo make modules
sudo make install
sudo make modules_install
sudo depmod
步骤 3:配置系统环境 echo "/opt/etherlab/lib" | sudo tee -a /etc/ld.so.conf
sudo /sbin/ldconfig -v
sudo mkdir -p /etc/sysconfig
sudo cp /opt/etherlab/etc/sysconfig/ethercat /etc/sysconfig/
编辑 /etc/sysconfig/ethercat,设置网卡 MAC 地址和驱动:
sudo nano /etc/sysconfig/ethercat
sudo nano /opt/etherlab/etc/ethercat.conf
MASTER0_DEVICE="xx:xx:xx:xx:xx:xx"
DEVICE_MODULES="generic"
sudo ln -s /opt/etherlab/etc/init.d/ethercat /etc/init.d/
步骤 4:设置并启动服务
sudo systemctl enable ethercat.service
sudo systemctl start ethercat.service
sudo systemctl status ethercat.service
sudo /opt/etherlab/bin/ethercat master
运行过程问题
问题一 $ sudo /opt/etherlab/bin/ethercat slaves
0 0:0 PREOP + CD02 EtherCAT Drive (CoE)
1 0:1 PREOP + SV660_1Axis_00916
$ ethercat slaves
bash: ethercat: command not found
解决方案
1. 检查 EtherCAT 是否正确安装 首先确认 EtherCAT 工具是否已经安装,并且安装路径正确。如果你是通过 EtherLab 的方式安装的,可以查看 /opt/etherlab/bin/ethercat 是否存在。
$ ls /opt/etherlab/bin/ethercat
/opt/etherlab/bin/ethercat
2. 将 EtherCAT 添加到 PATH 环境变量中 如果 /opt/etherlab/bin/ethercat 存在,你需要确保该路径被添加到当前用户的 PATH 中,这样你才能直接在命令行中运行 ethercat 命令。
echo 'export PATH=$PATH:/opt/etherlab/bin' >> ~/.bashrc
source ~/.bashrc
问题二 ~$ ethercat slaves
Failed to obtain number of masters: Failed to open master device /dev/EtherCAT0: Permission denied
遇到的错误 Failed to obtain number of masters: Failed to open master device /dev/EtherCAT0: Permission denied 是由于当前用户没有足够的权限访问 /dev/EtherCAT0 设备文件,导致无法执行 EtherCAT 相关的操作。
解决方法
1. 将当前用户添加到 ethercat 用户组 通常,EtherCAT 设备文件(例如 /dev/EtherCAT0)需要特定的权限才能访问。通过将当前用户添加到与 EtherCAT 设备相关的用户组,通常可以解决权限问题。
首先,查找 ethercat 所属的用户组,通常为 ethercat 或 plugdev:
~$ ls -l /dev/EtherCAT0
crw-rw-rw- 1 root root 488, 0 5 月 23 15:58 /dev/EtherCAT0
接下来,使用以下命令将当前用户添加到该组(假设组名是 ethercat):
方法一:创建 ethercat 用户组并添加当前用户
这是一种通用且推荐的做法,尤其适用于你打算通过 udev 规则等方式长期管理访问权限。
sudo groupadd ethercat
sudo usermod -aG ethercat $USER
groups $USER
然后设置 /dev/EtherCAT0 设备的所属组为 ethercat:
sudo chgrp ethercat /dev/EtherCAT0
sudo chmod 660 /dev/EtherCAT0
在系统中,可能需要为 EtherCAT 设备配置 udev 规则来赋予合适的权限。可以创建一个规则文件,确保在设备插入时自动赋予权限:
sudo nano /etc/udev/rules.d/99-ethercat.rules
KERNEL=="EtherCAT0" , MODE="0666" , GROUP="ethercat"
sudo udevadm control --reload
重新启动系统,确保所有权限和设备驱动程序正确加载。
2. 赋予设备文件权限(临时解决方法) 如果你只想临时解决权限问题,可以通过 chmod 更改设备文件的权限:
sudo chmod 666 /dev/EtherCAT0
这将允许所有用户读取和写入该设备文件。请注意,这种方法并不推荐长期使用,因为它会使设备文件暴露给所有用户,存在安全风险。
微信扫一扫,关注极客日志 微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
相关免费在线工具 Base64 字符串编码/解码 将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
Base64 文件转换器 将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
Markdown转HTML 将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
HTML转Markdown 将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
JSON 压缩 通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online
JSON美化和格式化 将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online