欢迎光临
我们一直在努力

EtherCAT主站教程1--Linux上部署IGH

       以下是一个在Linux系统上部署IgH EtherCAT主站的教程,专注于基本安装和配置,暂不考虑实时性能优化(如RT_PREEMPT或Xenomai补丁)。本教程以Ubuntu22.04(Orin_nano)系统为平台,基于IgH EtherCAT Master stable-1.6版本,适用于一般的开发或测试环境。

实验平台配置与编译环境:

  • 操作系统:Ubuntu 22.04(Humble)

  • 内核版本:

    ~$ uname -r
    5.15.148-tegra
    ~$ cat /etc/nv_tegra_release
    # R36 (release), REVISION: 4.3,

  • 工具和依赖:

    • 编译工具:build-essential

    • 内核头文件:linux-headers-$(uname -r)

    • Git和其他依赖

 运行以下命令安装必要的依赖:

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] jhf 的密码:
正在读取软件包列表… 完成
正在分析软件包的依赖关系树… 完成
正在读取状态信息… 完成
E: 无法定位软件包 linux-headers-5.15.148-tegra
E: 无法按照 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.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。

       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-hg
    cd ethercat-hg
    git 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 make
    sudo make modules
    sudo make install
    sudo make modules_install
    sudo depmod

     步骤 3:配置系统环境

    1、配置共享库路径:

    echo "/opt/etherlab/lib" | sudo tee -a /etc/ld.so.conf
    sudo /sbin/ldconfig -v

    2、复制 sysconfig 文件:

    sudo mkdir -p /etc/sysconfig
    sudo cp /opt/etherlab/etc/sysconfig/ethercat /etc/sysconfig/

    3、编辑 /etc/sysconfig/ethercat,设置网卡 MAC 地址和驱动:

    sudo nano /etc/sysconfig/ethercat
    sudo 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.service
    2、启动服务:
    sudo systemctl start ethercat.service
    3、检查服务状态:
    sudo systemctl status ethercat.service
    4、验证主站:
    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 命令。

    你可以通过以下命令将该路径添加到 PATH:

    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 规则等方式长期管理访问权限。

    # 创建 ethercat 组
    sudo groupadd ethercat

    # 将当前用户加入 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"

    保存并退出编辑器,然后重新加载 udev 规则:

    sudo udevadm control –reload

    重新启动系统,确保所有权限和设备驱动程序正确加载。

    2. 赋予设备文件权限(临时解决方法):

    如果你只想临时解决权限问题,可以通过 chmod 更改设备文件的权限:

    sudo chmod 666 /dev/EtherCAT0

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

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

    赞(0)
    未经允许不得转载:171主机测评 » EtherCAT主站教程1--Linux上部署IGH
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址