RK3588+preempt_rt+ethercat搭建

说明:

使用的RK3588的分支版本是linux-6.1-stan-rkr6
内核版本是6.1.99
文件系统是Debian GNU/Linux 12
把瑞芯微的SDK更新到linux-6.1-stan-rkr6这个版本即可,适配preemrt的ethercat的源码是RK已经适配过的,直接拿过来用就行了。
RK的SDK的doc也有ethercat相关的文档。

编译preemrt的内核

前面要先把preemrt的内核补丁打好,看RK的文档即可。

编译ethercat

通用的驱动编译编译出来,可以正常使用,就说明我编译的环境大致没问题的。
我写下我的编译步骤,试过两种,一种是交叉编译,一种是RK3588直接编译。

  • 用交叉编译

命令如下:

# ethcat_igh我放到了SDK的根目录方便编译
SDK_DIR=/home/yangx/linux2/yangx/RK3588/IAC-RK3588-MB-kernel-6.1/
TOOLS_PATH=$SDK_DIR/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/
CROSS_PATH=$TOOLS_PATH/bin
export PATH=$TOOLS_PATH:$CROSS_PATH:$PATH
export CROSS_COMPILE=aarch64-none-linux-gnu-
export ARCH=arm64
KERNEL_SRC=/home/yangx/linux2/yangx/RK3588/IAC-RK3588-MB-kernel-6.1/kernel/

./bootstrap
./configure --prefix=/home/yangx/linux2/yangx/RK3588/IAC-RK3588-MB-kernel-6.1/ethercat_igh/build/ --host=aarch64-none-linux-gnu --with-linux-dir=${KERNEL_SRC} --enable-8139too=no --enable-stmmac=yes --enable-generic=no --enable-wildcards=yes
# 编译驱动
make  ARCH=arm64 modules
#编译应用工具和ethercat库
make ARCH=arm64
  • RK3588直接编译

我是用U盘把ethercat_igh文件夹,直接拷贝到板子的根目录编译,命令如下:

./bootstrap
./configure --with-linux-dir=/usr/src/linux-headers-6.1-rockchip --disable-8139too --enable-generic=no --enable-stmmac=yes --disable-e1000e --enable-kernel  --disable-hrtimer --disable-eoe --prefix=/opt/etherlab
make modules
make
make install

两种方式都编译成功的。
编译通用驱动是这个两个参数--enable-generic=yes --enable-stmmac=no , 我实际调试的时候是先加载通用的驱动,使用ethercat的命令都是正常的,然后再重新编译stmmac的驱动,进行调试。

修改内核

把设备树的gmac0的compatible修改为snps,dwmac-5.00.a0
img

坑:

之前一直是修改的phy芯片的驱动,现在修改的MAC控制器的驱动,然后加载ec_stmmac.ko没日志打印,我不得其解,原来是commpatible的问题,之前这个地方从来没有改过,这个ethercat的MAC控制器的驱动里面和原先的commpatible不一致,然后文档也没有说搞的我郁闷半天。
其实这个时候就应该看看probe函数有没执行,但是问FAE分配的这个人比较敷衍,头脑懵逼中,一直以为是ethercat的stm驱动哪里少了东西了,以为RK没有适配好,没有进行下一步debug分析,没有理解到修改的是stm驱动。

板子加载ethercat驱动和使用的步骤

# 把内核源码编译的 pcs_xpcs.ko phylink.ko 放到/lib/modules/6.1.99-rt36/文件夹
insmod phylink.ko
insmod pcs_xpcs.ko
# 设置为eth0的MAC地址
insmod ec_master.ko main_devices=32:d4:b5:f9:e3:d5
insmod ec_stmmac.ko

实际测试的时候:

Ethercat模块是EL1008,EL2008,网线直连RK3588和ethercat模块,1ms周期,10us的抖动延时。 测试了一晚上。
img

img

posted @ 2025-09-11 11:51  杨旭0324  阅读(42)  评论(0)    收藏  举报