首页 > 其他分享 >【原创】RK3588/RK3568/RK3562平台 IgH EthercAT主站编译安装

【原创】RK3588/RK3568/RK3562平台 IgH EthercAT主站编译安装

时间:2024-10-19 22:25:19浏览次数:1  
标签:RK3562 RK3588 -- 主站 网卡 编译 FF linux

目录

本文记录EtherCAT主站典型编译配置流程,基于RK3562创龙SDK描述,3568、3588编译仅SDK路径和上的差别,其他流程一致,整体流程也可用于其他平台。

igh主站编译安装说明

  1. 文件说明:

igh编译安装说明.md:安装说明

etherlab.tar.xz:ethercat主站源码,包含rk stmmac 4.19和5.10驱动

  1. 源码包说明:

etherlab官方主站从2013年1.5.2版本起~2021年没有维护,但该时间段内有一个非官方的分支一直维护,功能比较全面。虽然2021年开始官方重新维护,当前版本1.6,但功能性能、支持的os、从站启动速度等方面不如非官方维护版本。

所以本次stmamc 内核驱动基于非官方版本开发,是一个完整的git仓库,内含本次开发完整的修改提交记录,若需要使用etherlab官方主站自行拷贝stmamc 驱动代码到官方代码内编译构建即可。

内核方面,preempt-RT、xenomai、普通liunx均可。

  1. 文档目录说明(根据实际情况修改)
  • rk3562内核源码目录:/home/wsg1100/TL3562-EVM/rk3562_linux_sdk_release_v1.1.0
  • 主站源码目录:/home/wsg1100/PetaLinux/PetaLinux/etherlab
  • 示例安装路径为:/media/wsg1100/rk3562_rootfs_install/,根据实际情况进行修改,或直接指定为将SD启动卡挂载根目录,直接安装到启动卡。
  • 交叉编译工具路径为/home/wsg1100/TL3562-EVM/rk3562_linux_sdk_release_v1.1.0/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/
SDK_DIR="/home/wsg1100/TL3562-EVM/rk3562_linux_sdk_release_v1.1.0"
KERNEL_SRC="$SDK_DIR/kernel"
XENOMAI_SRC="$SDK_DIR/xenomai"
ETHERLAB_SRC="$SDK_DIR/etherlab"
INSTALL_OUTDIR="/home/wsg1100/rk3562_rootfs_install/"

一、配置内核自带网卡驱动编译为模块

将内核自带网卡驱动编译为模块,才能替换EtherCAT主站驱动网卡,重新编译SDK烧录,步骤如下;

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

配置内核,找到内核自带驱动,修改为编译成模块:

cd $KERNEL_SRC
make menuconfig
Symbol: STMMAC_ETH [=m]
Type  : tristate 
Prompt: STMicroelectronics 10/100/1000/EQOS Ethernet driver 
Location:                                                                                     -> Device Drivers
		-> Network device support (NETDEVICES [=y])
            -> Ethernet driver support (ETHERNET [=y])
				-> STMicroelectronics devices (NET_VENDOR_STMICRO [=y])  


使能PREEMPT-RT:


配置保存后,将修改后的.config文件覆盖默认配置文件,重新编译SDK并烧录。

编译内核

cp .config arch/arm64/configs/rockchip_linux_defconfig
cd $SDK_DIR
./build.sh kernel

将编译后的resource.img zboot.img boot.img根据相关文档烧录到板子。

编译内核模块

cd $KERNEL_SRC

#  创建目录
mkdir -p ${INSTALL_OUTDIR}
#  编译内核模块
make CROSS_COMPILE=aarch64-none-linux-gnu- ARCH=arm64 INSTALL_MOD_PATH=${KMODULES_OUTDIR} modules -j$(nproc --all)

# 安装内核模块
make CROSS_COMPILE=aarch64-none-linux-gnu- ARCH=arm64 INSTALL_MOD_PATH=${KMODULES_OUTDIR} modules_install INSTALL_MOD_STRIP=1

二、交叉编译EtherCAT主站

1. 普通linux或preempt-rt

1.1 配置

主站源码解压后,然后切换到主站目录下,执行以下命令生成autoconf配置脚本。

cd ${ETHERLAB_SRC}
./bootstrap

生成configure配置脚本后进行配置。

./configure --host=aarch64-none-linux-gnu --with-linux-dir=${KERNEL_SRC} --prefix=/usr/local --enable-dwmac-rk --disable-8139too --enable-kernel --enable-rtmutex --disable-hrtimer --disable-eoe --disable-generic

参数说明,分为3方面:

  • 编译环境

    • --host: 指定交叉编译工具
    • --with-linux-dir: Linux内核源码目录,使用绝对路径
    • --prefix: 指定实际板子安装目录,这里指定为/usr/local
  • 主站功能配置

    • --enable-kernel: 编译内核模块默认启用该选项
    • --enable-rtmutex: 使用rtmutex,否则使用sem(sem没有onwer不具备优先级倒置)
    • --disable-eoe:禁用主站EoE功能(有需要自行开启)
  • 网卡驱动选择

    • --enable-dwmac-rk: 编译stmmac-rk网卡驱动
    • --disable-8139too: 禁止编译8139too网卡驱动,否则会报错
    • --disable-generic: 禁用generic驱动

1.2 编译

make ARCH=arm64 CROSS_COMPILE=aarch64-none-linux-gnu- -j$(nproc) modules #编译内核
make ARCH=arm64 CROSS_COMPILE=aarch64-none-linux-gnu- -j$(nproc) #编译应用工具和ethercat库

1.3 安装到TF卡根目录

安装Ethercat用户配置工具和库到TF卡根目录下:

#安装ethercat工具和库指定安装目录
sudo make ARCH=arm64 CROSS_COMPILE=aarch64-none-linux-gnu- install DESTDIR=${INSTALL_OUTDIR}

安装Ethercat内核模块,安装到TF根目录。

#安装内核模块到指定安装目录
sudo make ARCH=arm64 CROSS_COMPILE=aarch64-none-linux-gnu- INSTALL_MOD_PATH=${INSTALL_OUTDIR} modules_install INSTALL_MOD_STRIP=1

注意:INSTALL_MOD_PATH最好选择内核交叉编译时安装内核模块的路径,**好处是安装过程会自动处理模块依赖,拷贝到板子后无需处理模块符号依赖。

2. xenomai

2.1 交叉编译xenomai库

cd ${XENOMAI_SRC}
./scripts/bootstrap

#配置
./configure --host=aarch64-none-linux-gnu --enable-smp --enable-async-cancel --enable-assert --enable-pshared --enable-tls
#编译
make -j$(nproc)
#安装到根目录
sudo make -j$(nproc) DESTDIR=${INSTALL_OUTDIR} install

2.2 配置

主站源码解压后,然后切换到主站目录下,执行以下命令生成autoconf配置脚本。

cd ${ETHERLAB_SRC}
./bootstrap

生成configure配置脚本后进行配置。

./configure --host=aarch64-none-linux-gnu --with-linux-dir=${KERNEL_SRC} --prefix=/ --with-xenomai-dir="${INSTALL_OUTDIR}/usr/xenomai/" --enable-rtdm --enable-dwmac-rk --disable-8139too --enable-kernel --enable-rtmutex --disable-hrtimer --disable-eoe --disable-generic

xenomai参数说明,分为3方面:

  • 编译环境

    • --host: 指定交叉编译工具
    • --with-linux-dir: Linux内核源码目录,使用绝对路径
    • --prefix: 指定实际板子安装目录,这里指定为/usr/local
    • --with-xenomai-dir: xenomai应用安装库路径,用来来编译链接xenomai环境的igh库。
  • 主站功能配置

    • --enable-kernel: 编译内核模块默认启用该选项
    • --enable-rtmutex: 使用rtmutex否则使用sem,(sem没有onwer不具备优先级倒置)
    • --disable-eoe:禁用主站EoE功能(有需要自行开启)
    • --enable-rtdm: 启用xenomai RTDM设备,若不启用,xenomai应用程序操作主站是通过非实时路径,无法保证实时性
  • 网卡驱动选择

    • --enable-dwmac-rk: 编译stmmac-rk网卡驱动
    • --disable-8139too: 禁止编译8139too网卡驱动,否则会报错
    • --disable-generic: 禁用generic驱动

2.3 编译

make ARCH=arm64 CROSS_COMPILE=aarch64-none-linux-gnu- -j$(nproc) modules #编译内核
make ARCH=arm64 CROSS_COMPILE=aarch64-none-linux-gnu- -j$(nproc) #编译应用工具和ethercat库

2.4 安装到TF卡根目录

安装Ethercat用户配置工具和库到TF卡根目录下:

#安装ethercat工具和库指定安装目录
sudo make ARCH=arm64 CROSS_COMPILE=aarch64-none-linux-gnu- install DESTDIR=${INSTALL_OUTDIR}

安装Ethercat内核模块,安装到TF根目录。

#安装内核模块到指定安装目录
sudo make ARCH=arm64 CROSS_COMPILE=aarch64-none-linux-gnu- INSTALL_MOD_PATH=${INSTALL_OUTDIR} modules_install INSTALL_MOD_STRIP=1

注意:INSTALL_MOD_PATH最好选择内核交叉编译时安装内核模块的路径,**好处是安装过程会自动处理模块依赖,拷贝到板子后无需处理模块符号依赖。

四、安装目录打包拷贝到板子

若安装目录${INSTALL_OUTDIR}不是直接挂载的TF启动卡,需要将${INSTALL_OUTDIR}目录压缩打包到板子,解压到板子根文件系统。

三、igh用户库文件说明

上面已经将igh安装到文件系统/usr/local/(由主站配置的--prefix决定),各文件如下:

tree /usr/local/
.
├── bin
│   ├── ethercat      #ethercat 工具,用于主站状态查看、从站寄存器读写、调试等
│   └── ethercat_mbg  #ethercat 邮箱网关工具
├── etc
│   ├── ethercat.conf #网卡配置文件!!!!!
│   ├── init.d
│   │   └── ethercat  #init.d 启动脚本,早期Linux和嵌入式系统使用该方式
│   └── sysconfig
│       └── ethercat  #网卡配置文件,systemd使用,大部分linux发行版使用该方式
├── include
│   ├── ecrt.h
│   └── ectty.h
├── lib
│   ├── libethercat.a    #igh静态库
│   ├── libethercat.la
│   ├── libethercat.so -> libethercat.so.1.1.0  #igh 动态库,主要供ethercat工具、编译使用
│   ├── libethercat.so.1 -> libethercat.so.1.1.0
│   ├── libethercat.so.1.1.0
│   └── systemd
│       └── system
│           └── ethercat.service  #systemd 服务
└── sbin
    └── ethercatctl   #systemd服务执行脚本/usr/local/sbin/ethercatctl

四、igh网卡配置

  1. 配置禁止网卡自动加载

经过以上步骤,当前板子中存在两个stmmac网卡驱动,一个是内核源码编译的,一个是ethercat主站编译的,为防止两个网卡自动加载,导致ethercat服务网卡加载失败,新建自动加载黑名单文件/etc/modprobe.d/dwmac_rockchip.conf,内容如下:

blacklist dwmac_rockchip
blacklist ec_dwmac_rockchip
  1. 设置EtherCAT主站驱动

按如下,ECAT网卡配置文件位于/usr/local/etc/ethercat.conf,修改如下:

#指定网卡,由于硬件不同MAC不同,所以这里统一使用"FF:FF:FF:FF:FF:FF"做默认匹配
MASTER0_DEVICE="FF:FF:FF:FF:FF:FF"
#指定网卡驱动
DEVICE_MODULES="dwmac_rockchip"

若使用双主站,按如下方式配置:

#指定网卡,由于硬件不同MAC不同,所以这里统一使用"FF:FF:FF:FF:FF:FF"做默认匹配,要使用实际的MAC也行,那每块板子都需要手动配置
MASTER0_DEVICE="FF:FF:FF:FF:FF:FF"
MASTER1_DEVICE="FF:FF:FF:FF:FF:FF"
#指定网卡驱动
DEVICE_MODULES="dwmac_rockchip"

五、启动及开机自启动

1. 启动ethercat主站测试

完成以上步骤后,启动主站:

sudo ethercatctl start  #或者
sudo systemctl start ethercat.service

若有如下打印,说明环境设置成功。

pi@NanoPi-R6C:/usr/local/sbin$ dmesg | grep EtherCAT
[ 1415.034410] EtherCAT 0: Unregistered RTDM device EtherCAT0.
[ 1415.034669] EtherCAT: Master module cleaned up.
[ 1426.442436] EtherCAT: Master driver 1.5.2 unknown
[ 1426.442989] EtherCAT 0: Registered RTDM device EtherCAT0.
[ 1426.442996] EtherCAT: 1 master waiting for devices.
.....
[ 1489.916575] EtherCAT: Accepting 72:79:EC:56:32:E6 as main device for master 0.
....
[ 1490.121255] EtherCAT 0: Starting EtherCAT-IDLE thread.

2. 设置自动启动

这里以systemd为例,执行如下命令配置开机启动Etehrcat主站

sudo systemctl enable ethercat.service

linaro@RK356x-Tronlong:~$ sudo ethercat master
Master0
  Phase: Idle
  Active: no
  Slaves: 1
  Ethernet devices:
    Main: 7e:cc:c3:17:55:22 (attached)
      Link: UP
      Tx frames:   379317
      Tx bytes:    22786646
      Rx frames:   379316
      Rx bytes:    22786586
      Tx errors:   0
      Tx frame rate [1/s]:    285    285    285
      Tx rate [KByte/s]:     16.7   16.7   16.7
      Rx frame rate [1/s]:    285    285    285
      Rx rate [KByte/s]:     16.7   16.7   16.7
    Common:
      Tx frames:   379317
      Tx bytes:    22786646
      Rx frames:   379316
      Rx bytes:    22786586
      Lost frames: 0
      Tx frame rate [1/s]:    285    285    285
      Tx rate [KByte/s]:     16.7   16.7   16.7
      Rx frame rate [1/s]:    285    285    285
      Rx rate [KByte/s]:     16.7   16.7   16.7
      Loss rate [1/s]:          0      0      0
      Frame loss [%]:         0.0    0.0    0.0
  Distributed clocks:
    Reference clock:   Slave 0
    DC reference time: 0
    Application time:  0
                       2000-01-01 00:00:00.000000000

六、其他

  1. 卸载ethercat驱动命令:rmmod ec_dwmac_rockchip ec_stmmac_platform ec_stmmac ec_master

  2. 加载内核自带驱动命令:modprobe dwmac_rockchip

  3. 卸载内核自带驱动命令:rmmod dwmac_rockchip stmmac_platform stmmac

标签:RK3562,RK3588,--,主站,网卡,编译,FF,linux
From: https://www.cnblogs.com/wsg1100/p/18486644

相关文章

  • ArmSoM-Sige7 成为首款支持 openSUSE 的 RK3588 设备
    随着嵌入式系统和开源软件的不断发展,越来越多的开发者和爱好者对高性能的开发板及其操作系统支持寄予厚望。在这一背景下,ArmSoM-Sige7 凭借其强大的硬件性能和广泛的软件兼容性,成为了市场的关注焦点。令人兴奋的是,ArmSoM-Sige7 已成为首款支持openSUSE的RK3588设备,为开发者......
  • Rockchip RK3588 - Rockchip Linux Recovery recovery源码分析
    ----------------------------------------------------------------------------------------------------------------------------开发板:ArmSoM-Sige7开发板eMMC:64GBLPDDR4:8GB显示屏:15.6英寸HDMI接口显示屏u-boot:2017.09linux:5.10-------------------------------......
  • Linux查看触摸坐标点的方法,触觉智能RK3562开发板,瑞芯微、全志等通用
    平时遇到键盘、鼠标、触摸板等输入设备无响应等异常情况时,一般通过更换设备判断异常。但在遇到更换正常设备后,输入仍然异常的情况下,可以借助evtest工具查看内核的上报事件信息,协助定位问题所在。本次使用的是触觉智能EVB3562开发板进行演示,搭载瑞芯微RK3562/RK3562J芯片,该方法也......
  • Profibus DP转Modbus RTU主站协议转换网关
    一,设备主要功能捷米特JM-RTU-DP网关实现ProfibusDP网络与ModbusRTU网络之间的数据通讯。即将ModbusRTU设备转换为ProfibusDP设备。应用广泛:捷米特JM-RTU-DP广泛应用于ModbusRTU接口的变频器、仪表、马保、上位机等等。在工业除尘自动化场景中,ProfibusDP从站转ModbusRT......
  • 正点原子RK3588(一)——开机测试+AI初探
    一、adbadbshell,进入板子的根目录exit,退出到linuxadbpull板子linux(从板子到linux)adbpushlinux板子(从linux到板子)二、测试AI功能2.1resnet18importcv2importnumpyasnpimportplatformfromsynset_labelimportlabelsfromrknnlite.apiimportRKNNLite#decic......
  • RK3588系统联网无法同步时区问题
    OS:Android13 接上sim卡,有正常的4G网络出来,但时区没有自动更新过来.看代码里面def_auto_time_zone是打开的,device/rockchip/common也没有看到有重新赋值。packages/SettingsProvider/res/values/defaults.xml:31:<boolname="def_auto_time_zone">true</bo 解决方案......
  • 基于RK3588,AI边缘模块,单片6TOPS,可集群堆叠,Mixtile Blade 3
    MixtileBlade3 是一款经济实惠、节能的SBC,围绕下一代8纳米瑞芯微RK3588处理器构建。它非常适合快速开发、AI应用程序原型设计和边缘计算,允许您集群多个MixtileBlade3SBC以扩展您的部署。硬件布局正反面开箱即用的MixtileBlade3是一款可堆叠计算机,带有板载......
  • 迅为RK3588开发板 | 在高性能处理器上如何使用GPIO
      ------------------------------------ 注:详细使用可参考《【北京迅为】itop-3588开发板驱动开发指南》 GPIO基本概念GPIO,即General-PurposeInput/Output,指的是可以由软件控制的通用输入输出引脚。每个GPIO引脚可以配置为输入或输出,用来读取外部设备的状态(如按键)或控制外设(......
  • 迅为RK3588开发板 | 在高性能处理器上如何使用GPIO
      ------------------------------------ 注:详细使用可参考《【北京迅为】itop-3588开发板驱动开发指南》 GPIO基本概念GPIO,即General-PurposeInput/Output,指的是可以由软件控制的通用输入输出引脚。每个GPIO引脚可以配置为输入或输出,用来读取外部设备的状态(如按键)或......
  • 迅为RK3588开发板支持Android13和12版本系统还有Debian11、Buildroot、Ubuntu20与22版
    我们已经在RK3588上开发了稳定又好用的Android13和12版本系统Debian11、Buildroot、Ubuntu20与22版本、银河麒麟、开放麒、统信系统、openEuler24.03系统,内核Linux5.10版本。......