EtherCAT主站教程1--Linux上部署IGH _linux ethercat
以下是一个在Linux系统上部署IgH EtherCAT主站的教程,专注于基本安装和配置,暂不考虑实时性能优化(如RT_PREEMPT或Xenomai补丁)。本教程以Ubuntu22.04(Orin_nano)系统为平台,基于IgH EtherCAT Master stable-1.6版本,适用于一般的开发或测试环境。
实验平台配置与编译环境:
-
操作系统:Ubuntu 22.04(Humble)
-
内核版本:
~$ uname -r5.15.148-tegra~$ cat /etc/nv_tegra_release# R36 (release), REVISION: 4.3,
-
工具和依赖:
-
编译工具:build-essential
-
内核头文件:linux-headers-$(uname -r)
-
Git和其他依赖
-
运行以下命令安装必要的依赖:
sudo apt updatesudo 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] jhf 的密码: 正在读取软件包列表... 完成正在分析软件包的依赖关系树... 完成正在读取状态信息... 完成 E: 无法定位软件包 linux-headers-5.15.148-tegraE: 无法按照 glob ‘linux-headers-5.15.148-tegra’ 找到任何软件包
需要下载源码进行编译安装。方式如下:
NVIDIA 通常在 L4T 发布包中提供内核源代码和头文件。你可以从 NVIDIA 开发者网站下载匹配的 L4T 源代码。
-
确定 L4T 版本:
cat /etc/nv_tegra_release
输出会显示类似 R35 (release), REVISION: 3.1 的信息,记录版本号(如 r35.3)。
2.下载内核源代码:
- 访问 NVIDIA L4T 开发者页面。
- 找到与你的 L4T 版本匹配的源代码包(例如 public_sources.tbz2)。
3.解压并安装头文件:
假设你下载了 public_sources.tbz2,执行以下命令:
tar -xjf public_sources.tbz2cd Linux_for_Tegra/sourcetar -xjf kernel_src.tbz2cd kernel/kernel-jammy-srcsudo make headers_install ARCH=arm64 INSTALL_HDR_PATH=/usr/src/linux-headers-$(uname -r)
这会将内核头文件安装到 /usr/src/linux-headers-5.15.148-tegra。
4.验证安装:
~$ ls /usr/src/linux-headers-$(uname -r)include
IgH EtherCAT 主站部署:
步骤 1:下载和准备 IgH 源代码
1、克隆 IgH EtherCAT Master 仓库:
git clone https://gitlab.com/etherlab.org/ethercat.git ethercat-hgcd ethercat-hggit checkout stable-1.6
2、运行 bootstrap 脚本:
./bootstrap
3、移动源代码到系统目录:
sudo mv ethercat-hg /usr/local/src/cd /usr/local/src/sudo ln -s /usr/local/src/ethercat-hg ~/ethercat
步骤 2:配置和编译
1、配置 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 的内置网卡。
2、 编译并安装:
sudo makesudo make modulessudo make installsudo make modules_installsudo depmod
步骤 3:配置系统环境
1、配置共享库路径:
echo \"/opt/etherlab/lib\" | sudo tee -a /etc/ld.so.confsudo /sbin/ldconfig -v
2、复制 sysconfig 文件:
sudo mkdir -p /etc/sysconfigsudo cp /opt/etherlab/etc/sysconfig/ethercat /etc/sysconfig/
3、编辑 /etc/sysconfig/ethercat,设置网卡 MAC 地址和驱动:
sudo nano /etc/sysconfig/ethercatsudo nano /opt/etherlab/etc/ethercat.conf
修改以下内容:
MASTER0_DEVICE=\"xx:xx:xx:xx:xx:xx\" # 替换为你的网卡 MAC 地址,使用 `ip link` 查看DEVICE_MODULES=\"generic\"
4、创建服务脚本链接:
sudo ln -s /opt/etherlab/etc/init.d/ethercat /etc/init.d/
步骤 4:设置并启动服务
1、启用服务:sudo systemctl enable ethercat.service2、启动服务:sudo systemctl start ethercat.service3、检查服务状态:sudo systemctl status ethercat.service4、验证主站:sudo /opt/etherlab/bin/ethercat master
运行过程问题:
问题一:
$ sudo /opt/etherlab/bin/ethercat slaves0 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 命令。
你可以通过以下命令将该路径添加到 PATH:
echo \'export PATH=$PATH:/opt/etherlab/bin\' >> ~/.bashrcsource ~/.bashrc
问题二:
~$ ethercat slavesFailed 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/EtherCAT0crw-rw-rw- 1 root root 488, 0 5月 23 15:58 /dev/EtherCAT0
接下来,使用以下命令将当前用户添加到该组(假设组名是 ethercat):
方法一:创建 ethercat 用户组并添加当前用户
这是一种通用且推荐的做法,尤其适用于你打算通过 udev 规则等方式长期管理访问权限。
# 创建 ethercat 组sudo groupadd ethercat# 将当前用户加入 ethercat 组sudo usermod -aG ethercat $USER# 查看是否添加成功groups $USER
然后设置 /dev/EtherCAT0 设备的所属组为 ethercat:
sudo chgrp ethercat /dev/EtherCAT0sudo chmod 660 /dev/EtherCAT0
在系统中,可能需要为 EtherCAT 设备配置 udev 规则来赋予合适的权限。可以创建一个规则文件,确保在设备插入时自动赋予权限:
sudo nano /etc/udev/rules.d/99-ethercat.rules
在文件中添加以下内容:
KERNEL==\"EtherCAT0\", MODE=\"0666\", GROUP=\"ethercat\"
保存并退出编辑器,然后重新加载 udev 规则:
sudo udevadm control --reload
重新启动系统,确保所有权限和设备驱动程序正确加载。
2. 赋予设备文件权限(临时解决方法):
如果你只想临时解决权限问题,可以通过 chmod 更改设备文件的权限:
sudo chmod 666 /dev/EtherCAT0
这将允许所有用户读取和写入该设备文件。请注意,这种方法并不推荐长期使用,因为它会使设备文件暴露给所有用户,存在安全风险。
有不明白之处或者建议欢迎留言!!!


