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

坑:
之前一直是修改的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的抖动延时。 测试了一晚上。


本文来自博客园,作者:杨旭0324,转载请注明原文链接:https://www.cnblogs.com/allalonewithyou/p/19085518,个人邮箱:yaonie4444@foxmail.com

浙公网安备 33010602011771号