http://m.kblhh.cn 2025-12-05 14:26 來源:米爾電子
一、什么是AMP?為什么重要?
AMP(Asymmetric Multi-Processing)非對稱多處理架構,允許單個芯片的不同核心運行不同的操作系統或裸機程序。相比傳統的SMP(對稱多處理),AMP具有獨特優勢。
核心特性:
•異構運算:不同核心運行最適合的操作系統,如Linux處理復雜應用,RT-Thread保障實時任務
•資源隔離:各核心擁有獨立內存空間,避免資源沖突
•靈活通信:通過共享內存、RPMSG等方式實現高效核間通信
商業價值:
•成本優化:單芯片替代多芯片方案,減少PCB面積和元器件數量
•開發靈活:支持Linux、RT-Thread、裸機程序的自由組合
•系統可靠:故障隔離,關鍵任務永不掉線
二、實戰選型:MYD-LR3576的AMP硬件基礎
米爾核心板 MYD-LR3576 基于 RK3576 處理器,集成三大核心集群:AP 端配備 4 顆 ARM Cortex-A72 與 4 顆 ARM Cortex-A53 核心,MCU 端搭載 1 顆 ARM Cortex-M0 核心,通過 AMP 架構實現多系統異構運行,在成本優化與開發靈活性上展現突出優勢。

米爾基于RK3576開發板
三大核心集群:

系統支持:

已驗證AMP方案:
•AP+AP架構:Linux + RT-Thread/Bare-metal
•AP+MCU架構:Linux + MCU RT-Thread/Bare-metal
三、實戰操作:AMP 系統串口資源配置
實戰目標:基于MYD-LR3576開發板,詳細講解Linux與RT-Thread側的串口資源配置全流程,實現從理論到實踐的完整落地。
3.1 Linux 側串口資源的剝離與分配
在 AMP 架構中,若需將 UART6 分配給 RT-Thread 從核使用,需先在 Linux 設備樹中完成資源剝離,避免 Linux 內核對該外設的占用。
1. 失能UART6: Linux 設備樹通過節點狀態配置控制外設的啟用 / 禁用。對于 UART6,需在其節點中添加 “status = "disabled"” 屬性,明確告知 Linux 內核:該串口不再由 Linux 管理。
&uart6 {
status = "disabled"; // 剝離Linux對UART6的控制權
};
2. 分配UART6 資源
剝離后的 UART6 資源需通過 rockchip_amp 節點重新分配給從核,配置內容包括時鐘資源、引腳功能與中斷路由:
&rockchip_amp {
clocks = <...>, <&cru SCLK_UART6>, <&cru PCLK_UART6>;
pinctrl-0 = <&uart6m3_xfer>;
amp-irqs = <GIC_AMP_IRQ_CFG_ROUTE(114, CPU_GET_AFFINITY(3, 0))>;
};
3. 分配從核內存
為避免 Linux 內核占用從核的運行內存,需在 reserved-memory 節點中劃分專屬內存區域。例如,為 RT-Thread 從核預留 8MB 內存:
amp_reserved: amp@41800000 {
reg = <0x0 0x41800000 0x0 0x00800000>; // 起始地址0x41800000,大小8MB
no-map; // 禁止Linux映射該區域,確保從核獨占
};
3.2 RT-Thread 側 UART6 的初始化與啟用
Linux 側完成資源剝離后,需在 RT-Thread 中對 UART6 進行初始化,使其具備通信能力。RT-Thread 的配置流程主要包括引腳復用、中斷路由與外設使能三步。
1. UART6 引腳復用配置
RK3576 的引腳支持多功能復用,UART6 的 TX/RX 引腳需配置為對應功能模式(如 Func13)。通過 RT-Thread 的硬件抽象層(HAL)接口,可直接完成引腳功能的配置:
#ifdef RT_USING_UART6
uart6_m3_iomux_config();
#endif
void uart6_m3_iomux_config(void)
{
HAL_PINCTRL_SetIOMUX(GPIO_BANK4, GPIO_PIN_C5, PIN_CONFIG_MUX_FUNC13);
HAL_PINCTRL_SetIOMUX(GPIO_BANK4, GPIO_PIN_C4, PIN_CONFIG_MUX_FUNC13);
}
2. UART6 中斷路由配置
為確保 UART6 的中斷能被 CPU3(從核)響應,需通過 GIC 中斷控制器的路由配置,將 UART6 的中斷號與 CPU3 綁定。RT-Thread 提供了簡潔的條件編譯選項:
#ifdef RT_USING_UART6
GIC_AMP_IRQ_CFG_ROUTE(UART6_IRQn, 0xd0, CPU_GET_AFFINITY(3, 0));
#endif
3. UART6 RTOS側使能
通過在 RT-Thread 的配置文件中啟用對應選項,使能 UART6條件編譯:
CONFIG_RT_CONSOLE_DEVICE_NAME="uart6"
CONFIG_RT_USING_UART6=y
四、編譯部署:AMP系統鏡像構建
4.1 編譯鏡像
完成配置后,返回 SDK 工程根目錄,執行編譯腳本:
cd MYD-LR3576
./build.sh lunch
1. rockchip_defconfig
2. rockchip_rk3576_myd_lr3576_amp_defconfig
3. rockchip_rk3576_myd_lr3576_defconfig
4. rockchip_rk3576_myd_lr3576_mcu_defconfig
Which would you like? [1]: 2
....
./build.sh # 完整編譯
編譯成功后,生成的系統鏡像文件路徑為:
ls output/update/Image/update.img
update.img
4.2 燒錄鏡像至開發板
請使用瑞芯微官方燒錄工具 RKDevTool 將鏡像寫入開發板。
五、功能驗證
5.1 驗證環境搭建
連接開發板 Debug 口:串口參數設為 115200 波特率、8 數據位、1 停止位、無校驗位;
連接開發板 UART6 串口(具體位置如下圖):參數設為 1500000 波特率、8 數據位、1 停止位、無校驗位。

5.2 主核驗證(Linux終端)
打開主核debug終端,輸入lscpu命令查看CPU信息,若Cortex-A53核心數量顯示為3(原4顆,1顆分配給RT-Thread),說明主核配置生效:
lscpu
# 輸出結果中Cortex-A53核心數為3

5.3 從核驗證(RT-Thread終端)
打開UART6對應的串口終端(波特率默認150000),若能看到RT-Thread的啟動日志,說明從核系統已成功運行,UART6外設正常工作。

六、總結
本次串口資源配置實戰,清晰地驗證了外設從Linux側剝離、再分配至RT-Thread側的核心方法論。這僅是AMP靈活性的起點,基于相同的配置邏輯,開發者還可將GPIO、I2C、SPI等更多外設進行精細化分配。
這種靈活的異構計算模式,使其能夠無縫適配多類對性能、實時性與功耗有綜合要求的工業與嵌入式場景。其典型應用模式可歸納如下:
1. 工業網關:Linux運行網絡協議棧、數據庫與Web服務,實現數據上云與遠程管理;RT-Thread則實時采集PLC數據、精準控制執行器,保障工業現場毫秒級響應與確定性。
2. 機器人控制器:Linux承載SLAM算法、視覺感知、路徑規劃與人機交互界面;RT-Thread專責多軸電機閉環控制、高頻率傳感器融合及硬實時安全連鎖。
3. 智能音視頻設備:Linux處理高清音視頻編解碼、AI模型推理及云服務對接;獨立Cortex-M0核心則實現低功耗待機、語音關鍵詞喚醒與觸控檢測,顯著優化系統功耗與響應速度。

AMP架構的價值,正是在于讓開發者能夠根據場景需求,在同一硬件平臺上自由調配計算資源,實現性能、成本與功耗的最佳平衡。