> 技术文档 > EtherCAT主站教程1--Linux上部署IGH _linux ethercat

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 源代码。

  1. 确定 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 所属的用户组,通常为 ethercatplugdev

~$ 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

这将允许所有用户读取和写入该设备文件。请注意,这种方法并不推荐长期使用,因为它会使设备文件暴露给所有用户,存在安全风险。

有不明白之处或者建议欢迎留言!!!

直播主播培训