Luckfox Lyra Plus RK3506G2 AMP 多核异构部署

Buildroot 基础开发工作流 的基础上,部署 AMP(Asymmetric Multi-Processing)——Linux (CPU0) + RT-Thread (CPU2),通过 RPMSG 跨核通信。

前置条件:已按 basic_blog.md 完成 Docker 环境、Buildroot 编译烧录、网线直连 SSH。本文假设你已有可 SSH 登录的 Linux 系统。

一、AMP 架构

RK3506G2 (3×Cortex-A7 + 1×MCU)
├─ CPU0: Linux (kernel 6.1)     ← Buildroot rootfs
├─ CPU1: 未使用
└─ CPU2: RT-Thread (rk3506-32)  ← RPMSG / Mailbox 通信

内存布局:
  0x03b00000  AMP 共享内存 (1MB)
  0x03c00000  RPMSG 通信区   (2MB)
  0x03e00000  RT-Thread 固件 (1MB) ← amp.img 加载地址
  0xfff80000  MCU SRAM       (48KB, 未使用)

分区变更:

分区 非 AMP AMP
u-boot 0x2000 0x2000
boot 0x4000 0x4000
amp 0x10000
rootfs 0x10000 0x12000

rootfs 偏移后移了 0x2000 扇区(4MB),给 amp 固件腾位置。

二、硬件变更

相比基础工作流,新增第二个 USB-TTL

开发板                           PC
UART2 (Linux 调试, 1500000) ──TTL── USB-TTL #1
UART4 (RT-Thread, 1500000)  ──TTL── USB-TTL #2  ← 新增
RMII (192.168.1.100)        ──网线── enp3s0
OTG USB-C                   ──USB─── 烧录

RT-Thread 串口引脚:GPIO0_A2=RX, GPIO0_A3=TX,波特率 1500000(注意不是常见的 115200)。

三、配置

./build.sh lunch
# [1] RK3506G_Luckfox_Lyra_Plus → [7] custom → [15] rk3506g_buildroot_spinand_amp_defconfig

这个 defconfig 的关键差异(相比非 AMP):

RK_AMP=y                                          # 新增:使能 AMP
RK_UBOOT_CFG_FRAGMENTS="rk-amp"                   # 新增:U-Boot AMP 启动支持
RK_AMP_FIT_ITS="amp_linux_mcu.its"                # 新增:AMP 固件打包描述
RK_KERNEL_CFG_FRAGMENTS="rockchip_amp.config ..." # 新增:RPMSG/mailbox 驱动
RK_KERNEL_DTS_NAME="rk3506g-luckfox-lyra-amp-spinand"  # 变更:AMP DTS
RK_PARAMETER="parameter-lyra-spinand-amp.txt"     # 变更:AMP 分区表

四、编译

# 首次全量
./build.sh

# 后续增量(改 RTT 或 overlay 后)
./build.sh amp       # 编译 RT-Thread + 打包 amp.img
./build.sh firmware  # 重新打包固件

./build.sh amp 内部流程:

amp_linux_mcu.its
  ├─ 解析 amp2 节点: sys=rtt, cpu=0xf02(CPU2), load=0x03e00000
  ├─ target: rk3506-32 (rtos/bsp/rockchip/rk3506-32/)
  ├─ scons --useconfig=board/evb1/defconfig
  ├─ scons -j32 → rtthread.bin → Image/rtt2.bin
  └─ mkimage -f amp.its → amp.img

五、烧录与验证

sudo ./rkflash.sh update

上电后两个串口各输出各的:

串口 预期输出
UART2 (Linux) 正常启动,eth0: 192.168.1.100,SSH 可用
UART4 (RT-Thread) RT-Thread logo + msh /> 终端

RT-Thread msh 中 help 可看到 rpmsg_tty_send — 向 Linux 发送 RPMSG 消息:

msh /> rpmsg_tty_send hello_from_rtt

Linux 端:

cat /dev/ttyRPMSG0    # 收到 "hello_from_rtt"

六、关键文件索引

类别 文件 说明
DTS kernel-6.1/arch/arm/boot/dts/rk3506-amp.dtsi AMP:rockchip-amp、RPMSG、mailbox、reserved memory
DTS kernel-6.1/arch/arm/boot/dts/rk3506g-luckfox-lyra-amp-spinand.dts Lyra Plus AMP 板级 DTS
FIT device/rockchip/.chips/rk3506/amp_linux_mcu.its 固件打包,loadables="amp2"
分区 device/rockchip/.chips/rk3506/parameter-lyra-spinand-amp.txt AMP 分区表
Kernel kernel-6.1/arch/arm/configs/rockchip_amp.config CONFIG_RPMSG、CONFIG_ROCKCHIP_MBOX 等
RTT rtos/bsp/rockchip/rk3506-32/ RT-Thread 源码
RTT config rtos/bsp/rockchip/rk3506-32/board/evb1/defconfig UART4/1500000、RPMSG Lite
构建 device/rockchip/common/build-hooks/25-amp.sh ./build.sh amp 入口

七、RT-Thread 关键配置

CONFIG_BSP_RK3506=y
CONFIG_RT_CONSOLE_DEVICE_NAME="uart4"
CONFIG_RT_USING_UART3=y
CONFIG_RT_USING_UART4=y
CONFIG_RT_USING_RPMSG_LITE=y          # RPMSG 通信
CONFIG_RT_USING_LINUX_RPMSG=y         # Linux 侧 RPMSG
CONFIG_RT_USING_COMMON_TEST_LINUX_RPMSG_LITE=y
CONFIG_RT_USING_COMMON_TEST_LINUX_TTY_RPMSG_LITE=y

八、静态 IP 的沿用

AMP defconfig 使用了与基础工作流相同的 luckfox-lyra overlay,因此基础篇中的 S60netdevice 修改和 S65static-ip 均自动生效,无需额外操作

如果你在基础篇中修改 luckfox-lyra/S60netdevice 后做过 repo sync,需要重新删除 udhcpc -i eth0 & 那行。

九、常用命令

# 编译
./build.sh                    # 全量
./build.sh amp                # 增量编译 RT-Thread + 打包 amp.img
./build.sh firmware
./build.sh clean-rootfs && ./build.sh rootfs && ./build.sh firmware

# 烧录
sudo ./rkflash.sh update

# 开发板 Linux
dmesg | grep rpmsg            # 查看 RPMSG 日志
ls /dev/ttyRPMSG*             # 查看 RPMSG TTY 设备

# RT-Thread msh
help                          # 列出命令(含 rpmsg_tty_send)
ps                            # 线程列表
free                          # 内存使用
rpmsg_tty_send <msg>          # 发消息到 Linux

参考

posted @ 2026-06-11 21:33  BorisDimitri  阅读(50)  评论(0)    收藏  举报