【原创】RK3588/RK3576/RK3568/RK3562平台 IgH EthercAT主站编译安装及测试
本文记录EtherCAT主站典型编译配置流程,基于RK3562创龙ubuntu SDK描述,3506,3568、3576、3588编译仅SDK路径和上的差别,其他流程一致,整体流程也可用于其他平台。
igh主站编译安装说明
1. 文件及环境说明
- 文件说明:
igh编译安装说明.pdf:安装说明
etherlab.tar.xz:ethercat主站源码,包含rk stmmac 4.19、5.10 和 6.1内核驱动,适用于瑞芯微rk35系列3588/3568/3576/3562/3506/3528/系列、rv1106/1108/1126/1126B,rk1808、rk322x/3308/3328/3366/3399 等soc自带MAC, 非免费,有需要请私信。
- 源码包说明:
igh主站git仓库,是一个完整的git仓库仓库里有两个分支。

etherlab官方主站从2013年1.5.2版本起~2021年没有维护,但该时间段内有一个非官方版本的分支一直维护,功能比较全面。虽然2021年开始官方重新维护,当前版本1.6.7,但功能、支持的os、从站启动速度等方面不如非官方维护版本,这需要自行选择使用哪个版本。
-
stable-1.6分支:etherlab官方主站 v1.6.7,rk stmmac 5.10驱动为motorcortex分支开发后合入该分支。 -
master分支 :motorcortex维护的非官方版本,这个版本motorcortex一直维护至今,笔者再次基础上开发包含完整的rk stmmac 4.19驱动开发git提交记录,若需要看stmmac驱动开发过程,请切到该分支,使用gitk查看4.19记录,5.10与其类似。git checkout motorcortex
注意:两个分支主站的用户态库不兼容,不能混用,需要库和主站一一对应!!
内核方面,preempt-RT、xenomai、普通liunx均可。
- 本文档目录说明(根据创龙tl3562 ubuntu SDK描述,实际情况修改)
- rk3562内核源码目录:
/home/wsg1100/TL3562-EVM/rk3562-ubuntu20.04-sdk-v1.2/kernel - 主站源码目录:
/home/wsg1100/TL3562-EVM/rk3562-ubuntu20.04-sdk-v1.2/etherlab - 示例安装路径为:
/home/wsg1100/TL3562-EVM/rk3562-ubuntu20.04-sdk-v1.2/out - 交叉编译工具路径为
/home/wsg1100/TL3562-EVM/rk3562-ubuntu20.04-sdk-v1.2/sysroots/x86_64-linux/bin/gcc-linaro-10.2.1-2021.01-x86_64_aarch64-linux-gnubin/
SDK_DIR="/home/wsg1100/TL3562-EVM/rk3562-ubuntu20.04-sdk-v1.2/"
KERNEL_SRC="$SDK_DIR/kernel"
XENOMAI_SRC="$SDK_DIR/xenomai" #若有
ETHERLAB_SRC="$SDK_DIR/etherlab"
INSTALL_OUTDIR="$SDK_DIR/out"
文中的使用的交叉编译工具链是aarch64-linux-gnu-, 若不是,需自行修改2.1节的环境变量配置,或者为每个工具链创建一个aarch64-linux-gnu-的软连接,如下。

每次新打开终端输入以下内容,配置交叉编译环境变量
TOOLS_PATH=$SDK_DIR/sysroots/x86_64-linux/bin/gcc-linaro-10.2.1-2021.01-x86_64_aarch64-linux-gnu/bin
CROSS_PATH=$TOOLS_PATH/bin
export PATH=$TOOLS_PATH:$CROSS_PATH:$PATH
export CC=aarch64-linux-gnu-gcc
export CXX=aarch64-linux-gnu-g++
export AR=aarch64-linux-gnu-ar
export OBJCOPY=aarch64-linux-gnu-objcopy
export NM=aarch64-linux-gnu-nm
export STRIP=aarch64-linux-gnu-strip
export CROSS_COMPILE=aarch64-linux-gnu-
export CROSS_COMPILE_APPS=aarch64-linux-gnu-
export CROSS_COMPILE_HOST=aarch64-linux-gnu
export ARCH=arm64
提示:上面的配置中增加了CROSS_COMPILE 、CROSS_COMPILE_HOST、ARCH定义,后续交叉编译命令无需添加该环境变量。
2.xenomai库编译安装说明(若基于xenomai)
2.1 环境变量配置
详见上节,后面不在赘述
提示:每次打开终端,或者切换到超级用户都需要新执行该命令激活交叉编译环境,sudo属于临时提权,不会继承当前用户的环境变量,所以在需要超级权限的时候切换到root用户,避免使用sudo。
提示:上面已经增加了CROSS_COMPILE 、CROSS_COMPILE_HOST、ARCH定义,后续交叉编译命令无需添加该环境变量。
2.2 配置xenomai编译选项
#切换到xenomai源码目录
cd ${XENOMAI_SRC}
#配置xenomai
./scripts/bootstrap
./configure --host=${CROSS_COMPILE_HOST} --enable-smp --enable-async-cancel --enable-assert --enable-pshared --enable-tls --enable-dlopen-libs --enable-lores-clock
- --host 指定交叉编译工具host
- --enable-smp 启用smp
- --enable-async-cancel 启用异步取消线程,若不启用,xenomai线程只能在系统调用中取消,当编写的xenomai程序存在bug时可能无法手动停止
- --enable-assert 启用assert
- --enable-pshared 启用xenomai进程间通信支持
- --enable-tls 启用线程tls
- --enable-dlopen-libs 允许通过dlopen()动态加载xenomai库
- --enable-lores-clock vxwork接口需要,若不使用vxworks接口可忽略
2.3 编译安装
后面编译ethercat主站时需要用到xenomai库,这里统一安装到临时目录 SDK/out/lib_install
#创建临时目录
LIB_INSTALL_OUTDIR=${INSTALL_OUTDIR}/libxenomai
mkdir -p ${LIB_INSTALL_OUTDIR}
#编译
make -j$(nproc)
#安装到指定临时目录
make -j$(nproc) DESTDIR=${LIB_INSTALL_OUTDIR} install
2.4 更新到根文件系统
将临时安装目录打包到板子进行更新。
# 打包xenomai库安装目录
cd ${INSTALL_OUTDIR}
tar -capvf rk3562-libxenomai-v3.3.1.tar.gz -C ${LIB_INSTALL_OUTDIR} .
将打包的库压缩包拷贝到板子根文件系统,然后解压到板子根目录,注意解压参数。
tar -xpvf rk3562-libxenomai-v3.3.1.tar.gz -C / --dereference
若要直接安装到rootfs.img烧录镜像,请将rootfs解压,然后安装过程直接指定安装到rootfs目录(需要root权限)再打包为镜像,详见创龙文档TL3562-EVM-B(Ubuntu20.04)_V1.2\3-用户手册\《3-1-Ubuntu系统使用手册.pdf》5 rootfs 根文件系统操作说明 和更新 update.img 系统镜像 小结自行完成。
提示:板子内置的是完整的ubuntu系统,包含gcc,也可将xenomai源码拷贝到开发板,在开发板中直接配置编译安装。
3. EtherCAT库编译安装说明
编译前通用过操作:
#配置交叉编译环境变量
#进入ethercat目录
cd ${ETHERLAB_SRC}
#配置主站
./bootstrap
#清理
make distclean
3.1 基于xenomai配置(若有)
#配置
./configure --host=${CROSS_COMPILE_HOST} --with-linux-dir=${KERNEL_SRC} --prefix=/usr/local --with-xenomai-dir="${INSTALL_OUTDIR}/libxenomai/usr/xenomai" --enable-rtdm --enable-dwmac-rk --disable-8139too --enable-kernel --disable-hrtimer --disable-eoe --disable-generic --enable-wildcards
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-wildcards:启用从站vendor ID / product code严格匹配(有需要自行关闭)
- --enable-rtdm: 启用xenomai RTDM设备,若不启用,xenomai应用程序操作主站是通过非实时路径,无法保证实时性
- 网卡驱动选择
- --enable-dwmac-rk: 编译stmmac-rk网卡驱动
- --disable-8139too: 禁止编译8139too网卡驱动,否则会报错
- --disable-generic: 禁用generic驱动
3.2 普通linux或preempt-rt
生成configure配置脚本后进行配置。
./configure --host=${CROSS_COMPILE_HOST} --with-linux-dir=${KERNEL_SRC} --prefix=/usr/local --enable-dwmac-rk --disable-8139too --enable-kernel --disable-hrtimer --disable-eoe --disable-generic --enable-wildcards
参数说明,分为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驱动
3.3 编译安装
若基于xenomai编译主站,ethercat主站编译依赖xenomai环境,如果我们直接编译会遇到如下错误。

因为xenomai编译需要特殊的编译参数,这些参数来自于xeno-config输出,xeno-config生成的参数是xenomai运行系统中的绝对路径,但是我们是交叉编译,这些路径中没有xenomai相关库和头文件。
解决方式是,第一次编译前,在主机上建立一个软连接,链接到安装到${LIB_INSTALL_OUTDIR}路径下的xenomai。
sudo ln -s ${INSTALL_OUTDIR}/libxenomai/usr/xenomai /usr/xenomai

接下面继续编译即可。
#创建临时目录
LIB_INSTALL_OUTDIR=${INSTALL_OUTDIR}/libethercat
mkdir -p ${LIB_INSTALL_OUTDIR}
#编译
make -j$(nproc)
#安装到指定临时目录
make -j$(nproc) DESTDIR=${LIB_INSTALL_OUTDIR} install
3.3 更新到根文件系统
将临时安装目录打包到板子进行更新。
# 打包
cd ${INSTALL_OUTDIR}
tar -capvf rk3562-libethercat_1.6.7.tar.gz -C ${LIB_INSTALL_OUTDIR} .
将打包的库压缩包拷贝到板子根文件系统,然后解压到板子根目录,注意解压参数。
tar -xpvf rk3562-libethercat_1.6.7.tar.gz -C / --dereference
若要直接安装到rootfs.img烧录镜像,请将rootfs解压,然后安装过程直接指定安装到rootfs目录(需要root权限)再打包为镜像,详见创龙文档TL3562-EVM-B(Ubuntu20.04)_V1.2\3-用户手册\《3-1-Ubuntu系统使用手册.pdf》5 rootfs 根文件系统操作说明 和更新 update.img 系统镜像 小结自行完成。
提示:板子内置的是完整的ubuntu系统,包含gcc,也可将xenomai源码拷贝到开发板,在开发板中直接配置编译安装。
4. 内核编译安装说明
4.1 配置内核编译选项
配置内核,找到内核自带驱动,修改为编译成模块:
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内核,还要使能PREEMPT-RT(xenomai不用):

配置完毕后,选<Save>,按 Enter 键保存配置选项。然后选中<Exit>,按 Enter 键退出。执行如下命令, 保存配置选项至 defconfig 文件,再将 defconfig 文件内容覆盖至rockchip_linux_defconfig 文件。
make savedefconfig
mv defconfig arch/arm64/configs/rockchip_linux_defconfig
4.3 编译内核镜像
执行如下命令,编译内核源码。
make -j$(nproc) tl3562-evm.img
cp boot.img ${INSTALL_OUTDIR}/
编译完成后,将生成内核镜像文件 boot.img。
4.4 更新内核镜像
详见创龙文档TL3562-EVM-B(Ubuntu20.04)_V1.2\3-用户手册\《3-1-Ubuntu系统使用手册.pdf》6 系统镜像更新说明 小节,通过rk烧录工具、拷贝到板子后使用dd等方式烧录。
4.5 内核模块编译
对于未编译到内核的内核模块,需要拷贝到根文件系统,首先将其安装到临时文件夹,然后将文件夹打包拷贝到板子上解压即可。
4.5.1 安装内核模块
#创建安装目录
MODULES_INSTALL_OUTDIR=${INSTALL_OUTDIR}/modules_install
mkdir -p ${MODULES_INSTALL_OUTDIR}
#安装内核模块
make INSTALL_MOD_PATH=${MODULES_INSTALL_OUTDIR} modules_install INSTALL_MOD_STRIP=1
4.5.2 ethercat主站模块编译
编译ethercat主站内核内核模块,若没有配置主站,需先配置主站,然后进行编译,关于配置详见后文“ethercat库编译配置”小节。
#进入源码目录
cd ${ETHERLAB_SRC}
#若没有配置主站,需先配置主站,然后进行编译,关于配置详见本文“ethercat库编译配置”小节,否则直接编译
./bootstrap
./configure --host=${CROSS_COMPILE_HOST} --with-linux-dir=${KERNEL_SRC} --prefix=/usr/local --with-xenomai-dir="${INSTALL_OUTDIR}/libxenomai/usr/xenomai" --enable-rtdm --enable-dwmac-rk --disable-8139too --enable-kernel --disable-hrtimer --disable-eoe --disable-generic --enable-wildcards
#编译
make modules
#安装ethercat内核模块
make INSTALL_MOD_PATH=${MODULES_INSTALL_OUTDIR} modules_install INSTALL_MOD_STRIP=1
注意:INSTALL_MOD_PATH最好选择内核交叉编译时安装内核模块的路径,好处是安装过程会自动处理模块依赖,拷贝到板子后无需处理模块符号依赖。
2.5.3 更新内核模块
到此所有的内核模块编译安装完毕,将临时安装目录打包到板子进行更新。
# 打包
cd ${INSTALL_OUTDIR}
tar -capvf rk3562-kernel-modules.tar.gz -C ${MODULES_INSTALL_OUTDIR} .
将打包的内核模块modules.tar.gz拷贝到板子根文件系统,然后解压到板子根目录,注意解压参数。
tar -xpvf rk3562-kernel-modules.tar.gz -C / --dereference
若要直接安装到rootfs.img烧录镜像,请将rootfs解压,然后安装过程直接指定安装到rootfs目录(需要root权限)再打包为镜像,详见创龙文档TL3562-EVM-B(Ubuntu20.04)_V1.2\3-用户手册\《3-1-Ubuntu系统使用手册.pdf》5 rootfs 根文件系统操作说明 和更新 update.img 系统镜像 小结自行完成。
5. 安装后的环境配置
- 实时性能优化
- ethercat主站配置
- xenomai环境配置等
附1 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
附2 igh网卡配置
- 配置禁止网卡自动加载
经过以上步骤,当前板子中存在两个stmmac网卡驱动,一个是内核源码编译的,一个是ethercat主站编译的,为防止两个网卡自动加载,导致ethercat服务网卡加载失败,新建自动加载黑名单文件/etc/modprobe.d/dwmac_rockchip.conf,内容如下:
blacklist dwmac_rockchip
blacklist ec_dwmac_rockchip
- 设置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"
附3 启动及开机自启动
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
附4 测试对比
这里使用rk3562+两个汇川ethercat伺服驱动器进行测试,看看xenomai下分别使用原生的ec_generic驱动和专用igh驱动的区别,demo源码位于目录examples/igh_test下,编译安装后会随ethercat库安装到--prefix下的bin目录下。
1. 使用ec_generic驱动1ms周期
- 加载ec_generic驱动,这里直接使用命令进行
insmod /usr/lib/modules/`uname -r`/ethercat/master/ec_master.ko main_devices=FF:FF:FF:FF:FF:FF
modprobe dwmac_rockchip
modprobe ec_generic
-
启动测试程序
dc_motion -c 3 -d 1 -t 1000000- -c 指定CPU 3
- -d 1以主站作为参考时钟, 这里主要测试网络收发占整个周期的时间,所以以主站作为参考时钟,一般应以从站作为参考时钟,因为主站和从站的时钟源(晶振)之间有漂移,主站运行周期需要一定周期根据从站参考调整,需要一个调整算法,本程序未经测试,请自行研究!!!
- -t 周期1ms
其中主站收发时间计时方式如下:
/*接收时间*/
t_receive_start = sys_time_ns();
ecrt_master_receive(master);
t_receive_end = sys_time_ns();
/*发送时间*/
t_send_start = sys_time_ns();
ecrt_master_send(master);
t_send_end = sys_time_ns();
- 经过6小时测试后结果如下:
.png)
- period :周期任务实际周期
- latency:预期唤醒时间与时间唤醒时间差
- exec :运算、pdo处理、统计、打印等耗时
- send :
ecrt_master_send()耗时 - receive :
ecrt_master_receive()耗时
看这send 、receive 结果,你是不是觉得这结果还不错?注意!我们是从应用层面计算的收发调用的时间,至于调用ecrt_master_send()/ecrt_master_receive()后,报文什么时候被真正发送,和报文什么时候接收回来是由内核机制决定的,这个接口只是送、取ethercat报文的时间,不是网络收发软件层面消耗的所有时间。发出去的包,只要在1ms后,报文已经被接收回来就行,不妨碍下个周期计算发送即可,偶尔还是有帧未及时收回来的情况:
-1740891318241.png)
如果此时跑500us周期,帧未及时收回来的情况会更频繁,详细原因的见本博客其他文章。
.png)
所以,使用ec_generic驱动能跑,但是跑不好,xenomai能保证ethercat任务调度周期,但是保证不了网络包的收发实时性,网络包实时性涉及DC同步等等,在此不再赘述。
2. 使用ec_stmmac驱动125us周期
使用ec_stmmac我们就不跑1ms浪费时间了,直接跑125us周期.
- 加载ec_stmmac驱动,这里直接使用命令进行
insmod /usr/lib/modules/`uname -r`/ethercat/master/ec_master.ko main_devices=FF:FF:FF:FF:FF:FF
modprobe ec_dwmac_rockchip
-
启动测试程序
dc_motion -c 3 -d 1 -t 125000- -c 指定CPU 3
- -d 1以主站作为参考时钟, 这里主要测试网络收发占整个周期的时间,所以以主站作为参考时钟,一般应以从站作为参考时钟,因为主站和从站的时钟源(晶振)之间有漂移,主站运行周期需要一定周期根据从站参考调整,需要一个调整算法,本程序未经测试,请自行研究!!!
- -t 周期125us。注意这里基于xenomai测试,如果是PREEMPT-RT,系统本身抖动太大,会出现周期越界,125us周期不适用,建议500us及以上!!!
.png)
-
经过2小时左右测试后结果如下:
-1740892351407.png)
这send 、receive 结果,这才是网络收发软件层面消耗的所有时间。
附5 其他
-
卸载ethercat驱动命令:
rmmod ec_dwmac_rockchip ec_stmmac_platform ec_stmmac ec_master -
加载内核自带驱动命令:
modprobe dwmac_rockchip -
卸载内核自带驱动命令:
rmmod dwmac_rockchip stmmac_platform stmmac -
关于etehrcat工具板子上运行报库版本`GLIBCXX_xxxx不匹配问题:
/usr/lib/aarch64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.26' not found (required by ethercat)
原因是使用了高版本的交叉编译工具链,但是板子上的glibc运行环境较低,切换为低版本交叉编译工具链重新编译ethercat库即可,内核模块不需要重新编译。若是板子上有gcc编译器,直接在板子上编译即可。

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