IgH_EtherCAT 概述
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/ 目录下,源码目录如下:
guoyibing@ubuntu2204-docker:~/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 补丁,有需要者可参考文档打补丁。
1. kernel 修改
进入 kernel/arch/arm64/configs/ 目录,修改 rockchip_linux_defconfig
将 CONFIG_STMMAC_ETH=y 改为 CONFIG_STMMAC_ETH=m,
重新编译 kernel,单独烧录进开发板。
2. 安装构建依赖
sudo apt update
sudo apt install -y autoconf automake libtool
3. 配置交叉编译链,需使用绝对路径
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-
4. 创建工具安装目录
mkdir install
5. 执行脚本生成 configure 配置文件
sudo chmod +x bootstrap
./bootstrap
6. 根据 configure 配置生成 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:脚本默认打开这个项,我们不需要,因此关闭
--enable-generic:关闭通用以太网驱动
--enable-wildcards:开启 Ethercat 从站通配符功能
--enable-static:编译成静态库
7. 编译
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
8. 安装
sudo make install
9. 安装成功,在EtherCAT安装目录出现如下文件
guoyibing@ubuntu2204-docker:~/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 节点
1. 将 kernel/driver/net/pcs/pcs_xpcs.c 模块化编译生成的 pcs_xpcs.ko,并拷贝到 Neardi 开发板上
2. 将 kernel/ethercat_igh/install 拷贝至开发板
拷贝 bin/ethercat 至 /usr/bin/ 目录,执行 sudo chmod +x /usr/bin/ethercat
拷贝 lib/libethercat.so* 至 /usr/lib/ 目录。
3. 执行以下命令安装驱动
sudo insmod pcs_xpcs.ko
sudo insmod ec_master.ko main_devices=62:36:B8:01:5B:59(这个是你的网口的物理地址,可以通过ifconfig命令查看)
sudo insmod ec_stmmac.ko
也可通过 u-boot 命令行查看网口 mac 地址,系统上电持续按住 ctrl+c ,进入 u-boot 命令行,执行 pri ethaddr 查看网口 mac 地址,执行 boot 启动 kernel。
调整 soc 为性能模式
echo performance | tee $ (find /sys/ -name *governor)
4. 开发板EtherCAT_IGH主站环境搭建成功
ls /dev/EtherCAT0
四、 主站测试
通过如下命令查看主站:
ethercat master

注意:EtherCAT 独占网口,无法执行 ifconfig/ip a 查看,否则会命令阻塞导致卡死。
五、 PREEMPT_RT 补丁
以 Linux6.1.118 补丁为例,补丁路径位于:SDK/docs/Patches/Real-Time-Performance/PREEMPT_RT/kernel-6.1/kernel-6.1.118。
1. 通过以下命令对 kernel 打补丁
cd SDK/kernel/
patch -p1 < ../docs/Patches/Real-Time-Performance/PREEMPT_RT/kernel-6.1/kernel-6.1.118/0001-
patch-6.1.99-rt36-on-rockckip-base-5c295c763974.patch
其他四个补丁类似
2. 在 device/rockchip/rk3576 目录下,打开 rockchip_rk3576_neardi_lb200_defconfig 配置文件(以你自己使用的为准),添加 rockchip_rt.config
RK_UBOOT_SPL=y
RK_KERNEL_DTS_NAME="rk3576-neardi-lb200-linux"
RK_USE_FIT_IMG=y
RK_KERNEL_CFG_FRAGMENTS="rk3576_neardi_lb200.config rockchip_rt.config"
3. ./build.sh kernel 编译实时内核