# 03-AMP/SMP 多核异构开发 > 资料源: `TL3568-EVM\6-开发参考资料\Rockchip官方SDK\` + `TL3568-EVM\4-软件资料\Demo\amp-demos\` --- ## 一、什么是 AMP?为什么你的板子需要它? RK3568 有 **4 个 Cortex-A55 核**,通常都跑 Linux (SMP)。但你可以: ``` ┌─────────────────────────────────────────┐ │ Core 0: Linux (AP核) │ │ - 网络、文件系统、CAN上层协议、MQTT │ │ - 跑你的 CAN 协议栈 │ ├─────────────────────────────────────────┤ │ Core 1: Linux (SMP,与Core0共享) │ ├─────────────────────────────────────────┤ │ Core 2: RT-Thread / Baremetal (裸核) │ │ - 实时 CAN 收发、电机控制 │ │ - 微妙级中断响应 │ ├─────────────────────────────────────────┤ │ Core 3: RT-Thread / Baremetal (裸核) │ │ - 或关闭省电 │ └─────────────────────────────────────────┘ ``` - **SMP** (Symmetric Multi-Processing):4个核跑同一个 Linux 内核,你的程序自动调度 - **AMP** (Asymmetric Multi-Processing):Core0/1跑Linux,Core2跑RT-Thread裸核 ← 这才是"异构" - 两个世界通过 **rpmsg** (Remote Processor Messaging) 通信——共享内存 + 中断 **你的 CAN 场景为什么适合 AMP?** - Linux 侧处理 CANopen/J1939 协议栈(应用层逻辑复杂、需要文件系统/网络) - 裸核侧做高速 CAN FD 收发(64字节一帧,微秒级周期) --- ## 二、资料位置 > 基础路径(可点击打开): [TL3568-EVM(Buildroot-2018.02)_V1.8](../TL3568-EVM(Buildroot-2018.02)_V1.8/) ### 2.1 SDK | 内容 | 路径 | |------|------| | **AMP SDK v1.2.3** | [6-开发参考资料\Rockchip官方SDK\rk356x_amp_sdk_release_v1.2.3_20230515\](../TL3568-EVM(Buildroot-2018.02)_V1.8/6-%E5%BC%80%E5%8F%91%E5%8F%82%E8%80%83%E8%B5%84%E6%96%99/Rockchip%E5%AE%98%E6%96%B9SDK/rk356x_amp_sdk_release_v1.2.3_20230515/) (3 个文件) | | **Linux SDK v1.3.1** | [6-开发参考资料\Rockchip官方SDK\rk356x_linux_release_v1.3.1_20221120\](../TL3568-EVM(Buildroot-2018.02)_V1.8/6-%E5%BC%80%E5%8F%91%E5%8F%82%E8%80%83%E8%B5%84%E6%96%99/Rockchip%E5%AE%98%E6%96%B9SDK/rk356x_linux_release_v1.3.1_20221120/) (4 个文件) | ### 2.2 官方文档 > 打开文档目录: [6-开发参考资料\Rockchip官方参考文档\Rockchip官方AMP SDK参考文档\](../TL3568-EVM(Buildroot-2018.02)_V1.8/6-%E5%BC%80%E5%8F%91%E5%8F%82%E8%80%83%E8%B5%84%E6%96%99/Rockchip%E5%AE%98%E6%96%B9%E5%8F%82%E8%80%83%E6%96%87%E6%A1%A3/Rockchip%E5%AE%98%E6%96%B9AMP%20SDK%E5%8F%82%E8%80%83%E6%96%87%E6%A1%A3/) ``` 6-开发参考资料\Rockchip官方参考文档\Rockchip官方AMP SDK参考文档\ ├── amp/ │ ├── AMP 架构设计文档 │ ├── AMP rpmsg 通信协议详解 │ └── AMP 裸核程序加载流程 └── common/ ├── AMP 编译环境搭建 └── AMP 调试方法 (JTAG双核调试) ``` ### 2.3 用户手册 | 文件名 | 路径 | |--------|------| | [2-9-1-基于Linux + RT-Thread、Baremetal的AMP开发案例.pdf](../TL3568-EVM(Buildroot-2018.02)_V1.8/3-%E7%94%A8%E6%88%B7%E6%89%8B%E5%86%8C/2-9-1-%E5%9F%BA%E4%BA%8ELinux%20+%20RT-Thread%E3%80%81Baremetal%E7%9A%84AMP%E5%BC%80%E5%8F%91%E6%A1%88%E4%BE%8B.pdf) | `3-用户手册\` | | [2-9-2-基于AMP的多通道AD采集开发案例.pdf](../TL3568-EVM(Buildroot-2018.02)_V1.8/3-%E7%94%A8%E6%88%B7%E6%89%8B%E5%86%8C/2-9-2-%E5%9F%BA%E4%BA%8EAMP%E7%9A%84%E5%A4%9A%E9%80%9A%E9%81%93AD%E9%87%87%E9%9B%86%E5%BC%80%E5%8F%91%E6%A1%88%E4%BE%8B.pdf) | `3-用户手册\` | ### 2.4 Demo 代码 > 打开 Demo 根目录: [4-软件资料\Demo\amp-demos\](../TL3568-EVM(Buildroot-2018.02)_V1.8/4-%E8%BD%AF%E4%BB%B6%E8%B5%84%E6%96%99/Demo/amp-demos/) ``` 4-软件资料\Demo\amp-demos\ ``` | Demo 路径 | 说明 | |-----------|------| | [AMP-SDK/](../TL3568-EVM(Buildroot-2018.02)_V1.8/4-%E8%BD%AF%E4%BB%B6%E8%B5%84%E6%96%99/Demo/amp-demos/AMP-SDK/) | AMP SDK 完整源码包 | | [rpmsg_echo/](../TL3568-EVM(Buildroot-2018.02)_V1.8/4-%E8%BD%AF%E4%BB%B6%E8%B5%84%E6%96%99/Demo/amp-demos/rpmsg_echo/) | 核间通信回环 (Linux ↔ RT-Thread) | | [led_flash/](../TL3568-EVM(Buildroot-2018.02)_V1.8/4-%E8%BD%AF%E4%BB%B6%E8%B5%84%E6%96%99/Demo/amp-demos/led_flash/) | Linux 控制裸核 LED | | [uart_echo/](../TL3568-EVM(Buildroot-2018.02)_V1.8/4-%E8%BD%AF%E4%BB%B6%E8%B5%84%E6%96%99/Demo/amp-demos/uart_echo/) | 裸核 UART 收发 | | [can_echo/](../TL3568-EVM(Buildroot-2018.02)_V1.8/4-%E8%BD%AF%E4%BB%B6%E8%B5%84%E6%96%99/Demo/amp-demos/can_echo/) | AMP CAN 收发 ← 你的直接参考! | | [ad7606_capture/](../TL3568-EVM(Buildroot-2018.02)_V1.8/4-%E8%BD%AF%E4%BB%B6%E8%B5%84%E6%96%99/Demo/amp-demos/ad7606_capture/) | 裸核 AD7606 多通道采集 | | [ad7616_capture/](../TL3568-EVM(Buildroot-2018.02)_V1.8/4-%E8%BD%AF%E4%BB%B6%E8%B5%84%E6%96%99/Demo/amp-demos/ad7616_capture/) | 裸核 AD7616 多通道采集 | | [fspi_rw/](../TL3568-EVM(Buildroot-2018.02)_V1.8/4-%E8%BD%AF%E4%BB%B6%E8%B5%84%E6%96%99/Demo/amp-demos/fspi_rw/) | 裸核 FSPI Flash 读写 | | [jtag_debug/](../TL3568-EVM(Buildroot-2018.02)_V1.8/4-%E8%BD%AF%E4%BB%B6%E8%B5%84%E6%96%99/Demo/amp-demos/jtag_debug/) | JTAG 双核调试 | | [pcie_dma_memcpy/](../TL3568-EVM(Buildroot-2018.02)_V1.8/4-%E8%BD%AF%E4%BB%B6%E8%B5%84%E6%96%99/Demo/amp-demos/pcie_dma_memcpy/) | 裸核 PCIe DMA 传输 | | [pcie_dma_memcpy_io_irq/](../TL3568-EVM(Buildroot-2018.02)_V1.8/4-%E8%BD%AF%E4%BB%B6%E8%B5%84%E6%96%99/Demo/amp-demos/pcie_dma_memcpy_io_irq/) | PCIe DMA + 中断 | --- ## 三、AMP 通信原理(rpmsg) ``` ┌───────────────┐ 共享内存 ┌──────────────────┐ │ Linux (CA55) │ ◄══════════════► │ RT-Thread (CA55) │ │ /dev/rpmsg0 │ +中断 │ rpmsg 驱动 │ ├───────────────┤ ├──────────────────┤ │ 用户程序 │ │ 裸核应用程序 │ │ open/write/ │ │ rpmsg_send/recv │ │ read/ioctl │ │ │ └───────────────┘ └──────────────────┘ ``` **通信流程**: ``` 1. Linux侧: 加载 rpmsg 驱动 → /dev/rpmsg0 出现 2. 裸核侧: RT-Thread 初始化 rpmsg → 注册 endpoint 3. 双方: 通过名称匹配建立连接 (如 "echo") 4. 数据流: 写 /dev/rpmsg0 → 共享内存 → 中断通知裸核 → rpmsg callback → 裸核处理 裸核 rpmsg_send → 共享内存 → 中断通知 Linux → read /dev/rpmsg0 ``` **典型数据流(CAN 场景)**: ``` 你写的CAN应用 → send CAN帧 → rpmsg → 裸核 → CAN控制器 → 总线 → recv CAN帧 ← rpmsg ← 裸核 ← CAN控制器 ← 总线 ``` --- ## 四、用户手册 2-9-1 文档要点 这是最关键的 AMP 入门文档,覆盖了: 1. **AMP 系统架构设计** — Core 分配策略、内存划分 2. **裸核固件编译** — 用 ARM GCC 编译 RT-Thread / Baremetal 代码 3. **固件加载方式** — Linux 启动后通过 remoteproc 框架加载裸核 ELF 到指定 Core 4. **核间通信 API** — rpmsg endpoint 创建、数据收发 5. **完整案例** — LED 闪烁、UART 回环、CAN 回环 **AMP 启动流程**: ```bash # Linux 启动后 echo amp_fw.elf > /sys/class/remoteproc/remoteproc0/firmware echo start > /sys/class/remoteproc/remoteproc0/state # 裸核开始运行 cat /sys/class/remoteproc/remoteproc0/state # running ``` --- ## 五、学习建议 | 顺序 | 内容 | 预计时间 | |:---:|------|:---:| | 1 | 先理解 SMP(Linux `htop` 看 4 核)→ 跑 `taskset -c 3 ./myprog` 绑核 | 1天 | | 2 | 读 [2-9-1 手册](../TL3568-EVM(Buildroot-2018.02)_V1.8/3-%E7%94%A8%E6%88%B7%E6%89%8B%E5%86%8C/2-9-1-%E5%9F%BA%E4%BA%8ELinux%20+%20RT-Thread%E3%80%81Baremetal%E7%9A%84AMP%E5%BC%80%E5%8F%91%E6%A1%88%E4%BE%8B.pdf),理解 AMP 架构图 | 2天 | | 3 | 跑通 [rpmsg_echo](../TL3568-EVM(Buildroot-2018.02)_V1.8/4-%E8%BD%AF%E4%BB%B6%E8%B5%84%E6%96%99/Demo/amp-demos/rpmsg_echo/) 示例(最简单的核间通信) | 3天 | | 4 | 跑通 [can_echo](../TL3568-EVM(Buildroot-2018.02)_V1.8/4-%E8%BD%AF%E4%BB%B6%E8%B5%84%E6%96%99/Demo/amp-demos/can_echo/) AMP 示例(CAN 帧跨核收发) | 2天 | | 5 | 把 Linux 侧 CAN 应用改为通过 rpmsg 收发裸核 | 5天 | > **注意**:AMP 开发需要两个编译链(Linux 侧 aarch64-linux-gnu-gcc + RT-Thread 侧 arm-none-eabi-gcc),调试时需要 JTAG。如果没有 JTAG 调试器,先专注于 Linux SMP 下的 CAN 协议栈开发。