Skip to main content

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 会独占网口。驱动加载后,不要再对这个网口执行 ifconfig 或 ip a 这类普通网口查看命令,否则可能阻塞导致卡死。