当前位置: 首页 > 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.gsyq.cn/news/1543604.html

相关文章:

  • 六马达聚焦零损耗,AM-601让光缆接续一步到位
  • OpenCore Legacy Patcher深度解析:老款Mac硬件兼容性完全指南
  • 阿那亚海鲜推荐必吃榜海豚湾海鲜地方菜(孔雀城森屿海店)实测 - 资讯纵览
  • Nintendo Switch大气层系统完整指南:如何快速安装和配置自定义固件
  • 少儿拳击到底学什么?揭开家长最关心的 3 个真相 - 资讯纵览
  • WindowsCleaner终极指南:5大核心功能彻底解决C盘空间不足问题
  • 成都市龙泉驿区驾校哪家专业 成都鑫金箭机动车驾驶培训有限公司 19181792161 - 资讯纵览
  • 如何用Python量化投资工具PyPortfolioOpt实现智能资产配置?终极指南
  • 河北装配式围挡厂家排行:合规性与实用性实测对比 - 奔跑123
  • Qt事件循环的阻塞与唤醒:QEventLoop与processEvents的实战解析
  • 贵阳专业杀虫公司排行:合规资质与服务能力实测对比 - 奔跑123
  • 广东瀚秋智能装备股份有限公司 - 资讯纵览
  • 3步免费解锁Unity专业版:UniHacker全平台破解指南
  • 金税四期监管升级,企业税务体检到底有没有必要? - 资讯纵览
  • Zigbee 3.0 DRLC集群:智能电网需求响应的嵌入式实现详解
  • 机电设备安装维修资质
  • AEUX终极指南:如何用3个步骤将Figma设计无缝转换为After Effects动画?
  • 新疆纯玩团和包车导游区别 - 盛世西域旅行
  • 【硬核】Flutter 与 Android (Kotlin) 通信全解析:从 MethodChannel 到大数据传输优化
  • 上门取件寄快递哪家便宜?8家主流快递实测对比 - 快递物流资讯
  • 2026喷绘广告材料企业实力评估,解读 KT 板冷裱膜源头工厂、写真反光膜批发厂家、油画布宣绒布生产厂商市场格局 - 栗子测评
  • Mermaid终极指南:5分钟学会用文本生成专业图表
  • 2026 常熟黄金回收避坑大全!实测本地门店,变现不被坑、不乱扣费 - 资讯纵览
  • 北舞渡胡辣汤哪家最早最正宗?郑州三家老店深度测评对比 - 资讯纵览
  • 2026厕所隔断深度选型指南:如何为公共空间匹配最佳方案? - 资讯纵览
  • GD32F407工程搭建报错解决:cannot open source input file RTE_Components.h: No such file or directory
  • 番禺全域金小福黄金回收连锁直营全解析|11 街道一街一实体门店 - 花生花生1
  • 低温锂电池生产厂家推荐(2026版) - 锂电池大全
  • Qt C++ 信创工控|AI奶牛配种辅助智能管理系统
  • 职场新人首选的 8 款正装手表,低调显气质不踩雷 - 互联网科技品牌测评