使用的RK3588的分支版本是linux-6.1-stan-rkr6 內(nèi)核版本是6.1.99 把瑞芯微的SDK更新到linux-6.1-stan-rkr6這個版本即可。

編譯xenomai3的內(nèi)核
請參考上一篇技術(shù)分享:技術(shù)分享 | RK3588如何增加Xenomai3實時補(bǔ)丁
修改ethercat
下載源碼:
gitclonehttps://gitlab.com/etherlab.org/ethercat.git
# 使用這個tags的版本
git checkout 1.6.7 -b kehu
用通用驅(qū)動ec_generic.ko雖然也可以,但是1ms周期的抖動延時有20us左右,那就用專用的驅(qū)動讓抖動延時更低一些,ethercat的源碼把stmmac的驅(qū)動移植下就可以了。可以直接使用preempt_rt的RK已經(jīng)適配過ethercat源碼的stmmac的部分,把devices/stmm/文件夾復(fù)制過來然后./bootstrap把Makefile的文件給配置出來,編譯的時候要使用--enable-stmmac-pci參數(shù)。
rtdm是實時性的接口,也是xenomai的接口,編譯的時候發(fā)現(xiàn)rtdm是在ec_master里面。
編譯驅(qū)動
交叉編譯
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/binexportPATH=$TOOLS_PATH:$CROSS_PATH:$PATHexportCROSS_COMPILE=aarch64-none-linux-gnu-exportARCH=arm64KERNEL_SRC=/home/yangx/linux2/yangx/RK3588/IAC-RK3588-MB-kernel-6.1/kernel/xenomaiinstalldir=/home/yangx/linux2/yangx/RK3588/IAC-RK3588-MB-kernel-6.1/xenomai/build/usr/xenomai/xenomaidir=/home/yangx/linux2/yangx/RK3588/IAC-RK3588-MB-kernel-6.1/xenomai/./bootstrap./configure --prefix=/home/yangx/linux2/yangx/RK3588/IAC-RK3588-MB-kernel-6.1/ethercat/build/ --host=aarch64-none-linux-gnu --enable-kernel --with-linux-dir=${KERNEL_SRC}--enable-8139too=no --enable-stmmac-pci=yes --enable-generic=no --enable-wildcards=yes --enable-rtdm --with-xenomai-dir=${xenomaiinstalldir}mkdir -p buildmake ARCH=arm64 modules# 交叉編譯這個庫文件時一直提示缺少頭文件,我就索性在3588里面編譯exportC_INCLUDE_PATH=${xenomaidir}/include/:$C_INCLUDE_PATHexportC_INCLUDE_PATH=${xenomaiinstalldir}/include:$C_INCLUDE_PATHexportC_INCLUDE_PATH=${xenomaiinstalldir}/include:${xenomaiinstalldir}/include/cobalt/:$C_INCLUDE_PATHexportLIBRARY_PATH=${xenomaiinstalldir}/lib/:$LIBRARY_PATHmake ARCH=arm64 CROSS_COMPILE=aarch64-none-linux-gnu- install DESTDIR=/home/yangx/linux2/yangx/RK3588/IAC-RK3588-MB-kernel-6.1/ethercat_igh/build/# 安裝的時候有個systemctl的配置文件需要注意下make install systemdsystemunitdir=(編譯后你需要存放的目錄,和configure命令上的prefix下跟的參數(shù)需要一致)
RK3588本機(jī)編譯
apt install autoconf automake
# 把源碼直接放到根目錄下
./bootstrap
./configure --with-linux-dir=/usr/src/linux-headers-6.1-rockchip --enable-rtdm=yes --disable-8139too --enable-generic --disable-e1000e --disable-igb --enable-kernel --disable-hrtimer --disable-eoe --with-xenomai-dir=/usr/xenomai --prefix=/opt/etherlab --enable-ec_master --enable-ec_slave
make
make modules
make install
本機(jī)編譯的時候會把服務(wù)什么的配置好,但是不想用的話,可以重新配置
insmod phylink.ko
insmod pcs_xpcs.ko
# 把網(wǎng)口的MAC地址填上,加載上這個ko,就會有/dev/EtherCAT0 節(jié)點。
insmod ec_master.ko main_devices=32b5e3:d5
insmod ec_stmmac.ko
insmod ec_stmmac.ko后的日志:
[ 587.218264] rk_gmac-dwmac fe1b0000.ethernet eth0: Link is Up - 100Mbps/Full - flow control off
[ 587.218282] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
[ 606.986538] ec_master: loading out-of-tree module taints kernel.
[ 606.988109] EtherCAT: Master driver 1.6.0-rc1 unknown
[ 606.988309] EtherCAT: 1 master waitingfordevices.
[ 615.636814] ec_generic: EtherCAT master generic Ethernet device module 1.6.0-rc1 unknown
[ 615.636837] EtherCAT: Accepting 32B5E3:D5 as main deviceformaster 0.
[ 615.636854] ec_generic: Binding socket to interface 2 (eth0).
[ 615.643519] EtherCAT 0: Starting EtherCAT-IDLE thread.
[ 615.643688] EtherCAT 0: Link state of ecm0 changed to UP.
[ 615.645179] EtherCAT 0: 3 slave(s) responding on main device.
[ 615.645185] EtherCAT 0: Slave states on main device: INIT.
[ 615.645586] EtherCAT 0: Scanning bus.
[ 615.956631] EtherCAT 0: Bus scanning completedin311 ms.
[ 615.956634] EtherCAT 0: Using slave 0 as DC reference clock.
[ 615.972223] EtherCAT 0: Slave states on main device: PREOP.
配置/etc/init.d:
mkdir /etc/sysconfig
cp /opt/etherlab/etc/sysconfig/ethercat /etc/sysconfig/
cp /opt/etherlab/etc/init.d/ethercat /etc/init.d/
# 把模塊放到系統(tǒng)目錄
cp devices/ec_generic.ko /lib/modules/$(uname -r)
cp master/ec_master.ko /lib/modules/(uname -r)
depmod -a
# 配置啟動的網(wǎng)口MAC MASTER0_DEVICE=" "
vi /etc/sysconfig/ethercat
# 里面也有驅(qū)動類型的配置,配置之后可以自動加載ec_stmmac.ko,但是還是手動加載吧。
# 啟動主站 服務(wù)啟動需要modules的依賴文件
/etc/init.d/ethercat start
/etc/init.d/ethercat status
/etc/init.d/ethercat stop
# 實際上是一個腳本,啟動另一個腳本,ethercatctl的腳本,這個腳本實際上就是配置ethercat這個二進(jìn)制文件參數(shù)的,通過這個二進(jìn)制文件寫入網(wǎng)口的MAC地址。
常用的ethercat命令:
# 查看主站狀態(tài)
ethercat status
# 查看從站狀態(tài)
ethercat slaves
# 查看從站的寄存器
ethercat cstruct
實際測試
測試程序:
exportLD_LIBRARY_PATH=/usr/xenomai/lib/:/opt/etherlab/lib/:$LD_LIBRARY_PATH
cd
./a
taskset 0x4 ./a
Ethercat模塊是EL1008,EL2008,網(wǎng)線直連RK3588和ethercat模塊,1ms周期,10us的抖動延時。
如圖所示:

/ 啟揚智能自媒體矩陣 /
-
ethercat
+關(guān)注
關(guān)注
19文章
1400瀏覽量
43708 -
RK3588
+關(guān)注
關(guān)注
8文章
503瀏覽量
7101
發(fā)布評論請先 登錄
瑞芯微RK3588開發(fā)板RK3588 EVB和RK3588S EVB解讀
RK3588 PCB推薦疊層及阻抗設(shè)計
迅為RK3588開發(fā)板實時系統(tǒng)編譯-Preemption系統(tǒng)/ Xenomai系統(tǒng)編譯-獲取Linux源碼包
基于 RK3588 debian 搭建 RK3588 Kernel 編譯環(huán)境
RK3588J和RK3588是什么關(guān)系?
RK3588和RK3588S之間的區(qū)別是什么
【LGA封裝RK3588核心板】基于RK3588,小而強(qiáng)大的ArmSom-W3 CORE BOARD
rk3588和rk3588s的區(qū)別
RK3588與3588s的區(qū)別
RK3588系列有多少型號?
技術(shù)分享 | RK3588增加Xenomai3實時補(bǔ)丁

【技術(shù)分享】RK3588如何搭建xenomai3+ethercat
評論