当前位置: 首页 > news >正文

RK3576 AMP(bus_mcu + RT-Thread)移植实践总结

RK3576 AMP(bus_mcu + RT-Thread)移植实践总结

平台:RK3576
目标:在已有 Linux(Buildroot)方案上,增加内部bus_mcu(Cortex-M0 + RT-Thread)AMP 能力
调试串口:UART5 m1(GPIO4_B0 / GPIO4_B1,1500000 8N1)


一、背景与目标

RK3576 除四核 Cortex-A72 外,还集成bus_mcu(Cortex-M0),可运行 RT-Thread 等 RTOS,与 Linux 构成AMP(非对称多处理)架构。典型用途:

  • 实时控制、低延迟任务
  • 通过Mailbox + RPMSG与 Linux 通信
  • 独立调试串口(本方案使用 UART5)

本文记录在rk3576板级工程上从零打通 AMP 的完整过程,包括设备树、编译配置、U-Boot 启动、MCU 固件、UART5 引脚选型及常见问题。


二、系统架构概览

┌─────────────────────────────────────────────────────────────┐ │ U-Boot │ │ 1. amp_cpus_on() 从 amp 分区加载 rtt.bin → 0x48200000 │ │ 2. fit_standalone_release("bus_mcu") 释放 MCU 复位/时钟 │ │ 3. 继续启动 Linux(FIT boot.img) │ └─────────────────────────────────────────────────────────────┘ │ │ ▼ ▼ ┌──────────────────┐ ┌──────────────────────────────┐ │ bus_mcu (M0) │ │ Linux (A72 x4) │ │ RT-Thread 4.1 │◄─RPMSG──►│ Buildroot │ │ UART5 调试口 │ Mailbox │ FIQ/其他 UART 控制台 │ └──────────────────┘ └──────────────────────────────┘

启动顺序:U-Boot → 加载并启动 MCU → 启动 Linux。MCU 与 Linux 并行运行。


三、内存布局(reserved-memory)

rk3576-amp.dtsi中为 AMP 预留的内存区域:

区域名起始地址大小用途
amp-shmem@478000000x478000004MBAMP 共享内存
rpmsg@47c000000x47c000004MBRPMSG 通信缓冲区
rpmsg-dma@480000000x480000001MBRPMSG DMA 池
mcu@482000000x482000001MBMCU 固件运行区

MCU 固件加载地址与 ITS 中一致:

load=<0x48200000>;// amp_mcu.its

U-Boot 启动时可能出现如下Warn(可忽略):

Sysmem Warn: kernel 'reserved-memory' "mcu@48200000" is overlap with "bus_mcu"

含义:U-Boot 把rtt.bin加载进 DT 预留的 MCU 区域,属于正常现象,不是内存配置错误。


四、关键文件清单

4.1 设备树

文件作用
kernel-6.1/arch/arm64/boot/dts/rockchip/rk3576-amp.dtsiAMP 通用节点:rockchip-amp、reserved-memory、rpmsg、mailbox
kernel-6.1/arch/arm64/boot/dts/rockchip/rk3576-evb1-v10-amp.dtsidual-light 板级 dtsi,include amp.dtsi
kernel-6.1/arch/arm64/boot/dts/rockchip/rk3576-evb1-v10-amp.dts板级 dts,&uart5 { status = "disabled"; }
kernel-6.1/arch/arm64/boot/dts/rockchip/Makefile注册rk3576-evb1-v10-amp.dtb

4.2 Lunch / 编译配置

文件作用
device/rockchip/.chips/rk3576/rockchip_rk3576_amp_defconfig主 lunch 配置
device/rockchip/.chips/rk3576/parameter-evb-amp.txt分区表,含amp分区
device/rockchip/.chips/rk3576/amp_mcu.itsAMP FIT 描述,打包 rtt.bin

lunch 关键项示例

RK_AMP=y RK_ROOTFS=y # AMP 默认关 rootfs,需显式打开 RK_UBOOT_CFG="rk3576_evb_amp" RK_KERNEL_CFG="rk3576_evb_amp_defconfig" RK_KERNEL_DTS_NAME="rk3576-evb1-v10-amp" RK_AMP_FIT_ITS="amp_mcu.its" RK_AMP_RTT_TARGET="rk3576-mcu" RK_PARAMETER="parameter-evb-amp.txt"

4.3 U-Boot

文件作用
u-boot/configs/rk3576_evb_amp_defconfig在 evb 配置基础上CONFIG_AMP=y

U-Bootboard.camp_cpus_on()board_late_init阶段执行,从amp 分区读取 FIT 并启动 bus_mcu。

4.4 MCU(RT-Thread)

文件作用
rtos/bsp/rockchip/rk3576-mcu/board/evb/iomux.cUART5 引脚复用
rtos/bsp/rockchip/rk3576-mcu/board/evb/defconfigRT_CONSOLE_DEVICE_NAME="uart5"
device/rockchip/common/scripts/mk-amp.shAMP 编译脚本(含交叉编译器路径)

五、UART5 引脚组与 MCU 调试口

RK3576 UART5 有三组复用(摘自rk3576-pinctrl.dtsi):

TXRXIOMUX 功能号MCU HAL 宏
m0GPIO3_D5GPIO3_D49PIN_CONFIG_MUX_FUNC9
m1GPIO4_B0GPIO4_B110PIN_CONFIG_MUX_FUNC10
m2GPIO2_A5GPIO2_A49PIN_CONFIG_MUX_FUNC9

本方案选用 m1(硬件已将调试口引到 GPIO4_B0/B1)。

5.1 内核侧(AMP 节点 pinctrl)

rk3576-amp.dtsi

rockchip_amp: rockchip-amp { ... pinctrl-0 = <&uart5m1_xfer>; amp-irqs = /bits/ 64 < GIC_AMP_IRQ_CFG_ROUTE(113, 0xd0, CPU_GET_AFFINITY(3, 0)) /* UART5 */ GIC_AMP_IRQ_CFG_ROUTE(174, 0xd0, CPU_GET_AFFINITY(3, 0)) /* Mailbox */ >; };

Linux 侧必须禁用 UART5,避免与 MCU 抢资源:

&uart5 { status = "disabled"; };

5.2 MCU 侧(iomux.c)

#ifdefRT_USING_UART5/* uart5_m1: GPIO4_B0(TX), GPIO4_B1(RX) */HAL_PINCTRL_SetIOMUX(GPIO_BANK4,GPIO_PIN_B0,PIN_CONFIG_MUX_FUNC10);HAL_PINCTRL_SetIOMUX(GPIO_BANK4,GPIO_PIN_B1,PIN_CONFIG_MUX_FUNC10);#endif

5.3 串口参数

项目MCU 调试Linux 普通 UART
设备RT-Thread console uart5/dev/ttySx
波特率1500000通常 115200
引脚GPIO4_B0/B1视具体 UART 而定

5.4 与 UART6 RS485 的冲突(板级注意)

原 evb板 DTS 中使用 GPIO4_B0/B1的配置需要删除。改用 UART5 m1 后需要disabled供mcu使用。


六、编译与烧录

6.1 选择 lunch

cdrk3576_sdk ./build.sh lunch# 选择 rockchip_rk3576_evb_amp_defconfig

6.2 全量或分项编译

./build.sh all# 完整固件# 或分项:./build.sh uboot ./build.sh kernel ./build.sh amp# 仅 MCU → 生成 amp.img

6.3 烧录要点

镜像说明
amp.imgMCU 固件,修改 iomux.c 后必须重编并重烧
boot.img含内核 DTB(AMP reserved-memory、uart5 disabled 等)
uboot.imgCONFIG_AMP=y的 defconfig

使用 Rockchip 烧录工具或upgrade_tool按分区表更新对应镜像。


七、验证方法

7.1 U-Boot 阶段

正常应看到:

Handle standalone: 'bus_mcu' at 0x48200000 ... OK

若设置了amp_boot=off(仅 Linux 测试 UART5 时用),则不会出现上述日志,且 MCU 不会运行。

7.2 MCU 串口(1500000)

连接 GPIO4_B0(TX)、GPIO4_B1(RX)、GND,上电后预期输出:

\ | / - RT - Thread Operating System / | \ 4.1.1 build ... 2006 - 2022 Copyright by RT-Thread team main entry msh >

msh >表示 FinSH shell 已就绪,AMP + UART5 调试已打通

MSH 可用命令示例:helppsfreelist_device
默认未启用 DFS,ls会报command not found,属正常。

7.3 Linux 阶段

dmesg|grep-iampdmesg|grep-irpmsgls/sys/bus/rpmsg/devices/

RPMSG 框架 probe 成功时,可见virtio_rpmsg_bus: rpmsg host is online等设备节点(应用层 endpoint 需另行开发)。


八、常见问题与排查

8.1arm-none-eabi-gcc not found(编 amp 失败)

原因:RT-Thread 交叉编译器路径未配置。
处理mk-amp.sh中导出CC,或rtconfig.py指向 SDK prebuilts 工具链。

8.2 无 rootfs.img

原因RK_AMP=y时默认关闭RK_ROOTFS
处理:defconfig 增加RK_ROOTFS=y

8.3 U-Boot 未加载 MCU

原因:lunch 非 amp 配置,或 U-Boot 非rk3576_evb_amp
处理:确认CONFIG_AMP=y,且存在 amp 分区及 amp.img。

8.4 Linux 下/dev/ttyS5报 EIO +gic_set_type failed

原因

  1. amp-irqsGIC SPI 113(UART5)划给 AMP,Linux 无法配置该中断
  2. MCU 仍在运行并占用 UART5
  3. 与正式 AMP 方案冲突——Linux 不应使用 ttyS5

仅测试 m1 硬件时需同时:关闭 MCU(setenv amp_boot off或清空 amp 分区)、从amp-irqs去掉 113、rockchip_amp status = disabled、去掉 UART6 对 PB0/PB1 的 GPIO 声明。

8.5 MCU 无串口输出

排查顺序:

  1. 是否重编并烧录amp.img(仅改 boot.img 不够)
  2. 波特率是否为1500000
  3. 引脚是否为GPIO4_B0/B1(m1)
  4. U-Boot 是否有bus_mcu ... OK
  5. 硬件是否将调试口引到对应测试点

8.6 m2 有输出、m1 无输出

多为硬件走线不在 m1 引脚或 PB0/B1 仍被其他等占用。本项目在改硬件后 m1 验证通过。


九、Linux 与 MCU 串口分工(生产配置)

系统控制台/调试说明
LinuxFIQ / 其他 UARTbootargs 中console=ttyFIQ0
MCUUART5 m1独占,Linux&uart5 disabled

切勿在 AMP 正常运行时让 Linux 打开/dev/ttyS5


十、后续可扩展方向

  1. RPMSG 应用:MCU 侧开启 RPMSG 驱动,Linux 用户态通过/dev/rpmsg*或自定义字符设备通信
  2. 共享内存amp-shmem@47800000用于大数据块交换
  3. CoreMark 等:defconfig 已可启用RT_USING_COREMARK做性能测试
  4. 恢复 UART6 RS485:为 DE/RE 选用不与 UART5 m1 冲突的 GPIO,并更新 DTS

十一、参考配置摘录

rockchip-amp 节点(节选)

rockchip_amp: rockchip-amp { compatible = "rockchip,amp"; clocks = <&cru FCLK_BUS_CM0_CORE>, ...>, <&cru SCLK_UART5>, <&cru PCLK_UART5>, ...>; pinctrl-0 = <&uart5m1_xfer>; amp-irqs = /bits/ 64 < GIC_AMP_IRQ_CFG_ROUTE(113, 0xd0, CPU_GET_AFFINITY(3, 0)) GIC_AMP_IRQ_CFG_ROUTE(174, 0xd0, CPU_GET_AFFINITY(3, 0)) >; status = "okay"; };

amp_mcu.its(节选)

mcu { description = "bus_mcu"; data = /incbin/("rtt.bin"); type = "standalone"; load = <0x48200000>; ... };

十二、总结

在 RK3576 evb 板上打通 AMP 的核心步骤:

  1. 增加amp 分区amp_mcu.its,U-Boot 开启CONFIG_AMP
  2. 内核引入rk3576-amp.dtsi,配置 reserved-memory、rpmsg、mailbox
  3. 使用rk3576_evb_amplunch,注意RK_ROOTFS=y
  4. MCU 使用UART5 m1,同步修改iomux.camp.dtsi pinctrl
  5. Linux禁用 uart5,硬件上解决与 RS485 的引脚冲突
  6. 分别烧录amp.imgboot.img,MCU 串口1500000连接 GPIO4_B0/B1

验证成功的标志:U-Boot 打印bus_mcu OK,MCU 串口出现 RT-Thread banner 与msh >提示符。


文档基于 RK3576 SDK + AMP 工程实践整理,引脚与分区以实际硬件原理图为准。

http://www.jsqmd.com/news/1031715/

相关文章:

  • 上海高复:未来路 VS 兆泽,两所学校摆在一起看 - 资讯纵览
  • OpenCore Legacy Patcher深度解析:老款Mac硬件兼容性完全指南
  • 六马达聚焦零损耗,AM-601让光缆接续一步到位
  • 阿那亚海鲜推荐必吃榜海豚湾海鲜地方菜(孔雀城森屿海店)实测 - 资讯纵览
  • 基于Neo4j图数据库构建表字段血缘追溯系统
  • [SGLang系列] 深度拆解Qwen3-0.6B模型核心架构与实战落地
  • 2026年大连汽车贴膜服务排行榜 - 资讯纵览
  • Nintendo Switch大气层系统完整指南:如何快速安装和配置自定义固件
  • 2026开放式同传翻译耳机十大品牌怎么选?看翻译准确率、响应速度、离线能力3个关键维度 - 新闻快传
  • 甘肃省高口碑黄金铂金回收白银回收实体老店排行 5 家靠谱门店电话地址全收录
  • 猫抓浏览器插件终极指南:5分钟掌握网页视频音频下载的完整教程
  • 建筑用钢板网供应商排行:品质与合规实测盘点 - 奔跑123
  • 重庆市沙坪坝区高价回收奢侈品哪家靠谱 高价回收 13883369199 - 资讯纵览
  • 全新表、准新表、旧表,合肥回收计价逻辑差别居然这么大 - 奢侈品回收评测
  • 如何彻底解决消息撤回难题:RevokeMsgPatcher终极防撤回指南
  • 少儿拳击到底学什么?揭开家长最关心的 3 个真相 - 资讯纵览
  • Unlock Music完全指南:浏览器端音乐解密转换终极教程
  • WindowsCleaner终极指南:5大核心功能彻底解决C盘空间不足问题
  • Stable Diffusion WebUI Forge完全指南:打造你的AI艺术创作平台
  • 成都市龙泉驿区驾校哪家专业 成都鑫金箭机动车驾驶培训有限公司 19181792161 - 资讯纵览
  • 临朐女子健身怎么选?十年老店天悦瑜伽塑形全方位深度评测 联系电话:15315365988 地址:山东省临朐县文化路文博苑东区大门南(马场酒南邻玻璃门上四楼) - 资讯纵览
  • 2026抚州黄金回收测评 新手卖金避坑指南及门店数据对比 - 资讯纵览
  • 如何用Python量化投资工具PyPortfolioOpt实现智能资产配置?终极指南
  • 乐鑫ESP-IDF v5.5.4 编译 hello_world 报 CMake Error,另一台电脑正常
  • 如何在Windows 11上完美运行安卓应用:WSABuilds完整安装指南
  • 2026年湿巾机厂家推荐:基于产能、技术与市场覆盖的专业评测指南 - 资讯纵览
  • 河北装配式围挡厂家排行:合规性与实用性实测对比 - 奔跑123
  • 2026 年6月山东靠谱铅板生产厂家推荐,口碑优质厂商整理 - 资讯纵览
  • Qt事件循环的阻塞与唤醒:QEventLoop与processEvents的实战解析
  • 从MP4到MKV:深入解析Muxer与Demuxer在视频格式转换中的核心作用