跳到主要内容

EtherCAT IgH

IgH EtherCAT 主站通过构建 Linux 字符设备,应用程序通过访问字符设备,实现与 EtherCAT 主站模块通信。

IgH EtherCAT 开发包配套 ethercat 命令行工具。这个工具可以直接在 Linux 用户层访问和配置从站,比如设置从站地址、显示总线配置、显示 PDO 数据、读写 SDO 参数等。

文档参考:Rockchip_Use_Guide_Linux_EtherCAT_IgH_CN.pdf

IgH 官网:IgH EtherCAT

获取 EtherCAT 主站源码

通过 Git 获取 EtherCAT 源码。如果无法获取,请发送邮件至 support@neardi.com 申请。

git clone http://git.neardi.com/app/linux/rockchip/ethercat_igh

ethercat_igh 源码目录放到 SDK/kernel/ 目录下。源码目录大致如下:

neardi@ubuntu2204-pc:~/sdk/rk3576_linux6.1_next/kernel/ethercat_igh$ ls
AUTHORS COPYING Doxyfile.in globals.h Kbuild.in master script
bootstrap COPYING.LESSER ethercat.spec.in include lib NEWS TODO
CodingStyle.md devices examples INSTALL Makefile.am README.EoE tool
configure.ac documentation FEATURES.md INSTALL.md Makefile.kbuild README.md tty

构建环境与编译

这里暂时不涉及 Preempt-RT 补丁。实时内核准备可以参考 实时内核

修改 kernel 配置

进入 kernel/arch/arm64/configs/ 目录,修改 rockchip_linux_defconfig

CONFIG_STMMAC_ETH=y

改为:

CONFIG_STMMAC_ETH=m

然后重新编译 kernel,并单独烧录进开发板。

安装构建依赖

sudo apt update
sudo apt install -y autoconf automake libtool

配置交叉编译链

这里需要使用绝对路径:

export CROSS_COMPILE=/sdk/rk3576_linux6.1_next/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-

创建工具安装目录

mkdir install

生成 configure 配置文件

sudo chmod +x bootstrap
./bootstrap

生成 Makefile

./configure \
--prefix=/sdk/rk3576_linux6.1_next/kernel/ethercat_igh/install \
--host=aarch64-none-linux-gnu \
--with-linux-dir=../../kernel \
--enable-stmmac=yes \
--enable-8139too=no \
--enable-generic=no \
--enable-wildcards=yes \
--enable-static \
CC=${CROSS_COMPILE}gcc \
CXX=${CROSS_COMPILE}g++ \
AR=${CROSS_COMPILE}ar \
LD=${CROSS_COMPILE}ld \
RANLIB=${CROSS_COMPILE}ranlib

参数说明:

参数说明
--prefix指定安装路径,编译出来的工具和库会安装到这里。
--host指定目标架构。
--with-linux-dir指定 kernel 源码路径。
--enable-stmmac开启 stmmac 网口驱动。
--enable-8139too脚本默认打开这个项,PI3 不需要,关闭。
--enable-generic关闭通用以太网驱动。
--enable-wildcards开启 EtherCAT 从站通配符功能。
--enable-static编译静态库。

编译

make -j8

编译内核模块:

make ARCH=arm64 \
CROSS_COMPILE=/sdk/rk3576_linux6.1_next/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu- \
modules -j8

安装

sudo make install

安装完成后,ethercat_igh/install 目录会出现下面这些文件:

neardi@ubuntu2204-pc:~/sdk/rk3576_linux6.1_next/kernel/ethercat_igh/install$ ls
bin etc include lib sbin share

EtherCAT 源码目录下会生成:

master/ec_master.ko
devices/stmmac/ec_stmmac.ko

安装驱动并生成 /dev/EtherCAT0

拷贝内核模块

kernel/drivers/net/pcs/pcs_xpcs.c 模块化编译生成的 pcs_xpcs.ko 拷贝到 Neardi Pi 3。

拷贝工具和库

kernel/ethercat_igh/install 拷贝到开发板,然后执行:

sudo cp bin/ethercat /usr/bin/
sudo chmod +x /usr/bin/ethercat
sudo cp lib/libethercat.so* /usr/lib/
sudo ldconfig

加载驱动

先查看 EtherCAT 网口的 MAC 地址,可以通过 ifconfig 查看:

ifconfig

也可以在 u-boot 命令行查看。系统上电后持续按 Ctrl+C 进入 u-boot 命令行,执行:

pri ethaddr

查看完成后执行 boot 启动 kernel。

然后按顺序加载驱动,main_devices 改成实际 EtherCAT 网口的 MAC 地址:

sudo insmod pcs_xpcs.ko
sudo insmod ec_master.ko main_devices=62:36:B8:01:5B:59
sudo insmod ec_stmmac.ko

将 SoC 调整为性能模式:

echo performance | sudo tee $(find /sys/ -name '*governor')

确认节点是否生成:

ls /dev/EtherCAT0

能看到 /dev/EtherCAT0,说明 IgH 主站驱动环境已经起来了。

主站测试

通过下面命令查看主站状态:

ethercat master

示例:

ethercat master status

警告

EtherCAT 会独占网口。驱动加载后,不要再对这个网口执行 ifconfigip a 这类普通网口查看命令,否则可能阻塞导致卡死。