【ATU Book-i.MX8系列】i.MX8M Plus RPMsg 開發環境架設與 Pingpong 範例

一. 簡介

現今的晶片內含許多不同的核心,例如 CPU、GPU 或 NPU 等,i.MX8M Plus 就是基於 Cortex-A53 和 Cortex-M7 的多核心架構 ARM 處理器,借由分配不同的任務和工作負載來充分利用各個核心的優勢,以滿足不同應用場景的需求,而這種架構就被稱為 AMP(Asymmetric Multiprocessing)或非對稱多核心處理器。




在 AMP 架構中,核與核之間的通信協議由 RPMsg(Remote Processor Messaging)定義,RPMsg 使用共享內存區域(Shared Memory)來傳輸消息,實現不同處理器之間低延遲、高效率的通信,使開發人員能夠實現更高可靠性和性能的系統,通過 AMP 和 RPMsg 的結合,i.MX8M Plus 可以靈活運用搭載的多種高速接口和內置的硬體加速器,實現高效的視頻、音頻或圖像處理計算等,並能夠適用於各種應用場景,例如智能家居、智能攝像頭、工業自動化等。


本文是以 i.MX8M Plus 平台 + Linnux 5.15.71 的 BSP 為基礎進行介紹與示範,首先從架設 MCUXpresso SDK 與 Toolchain 環境來建置 M 核端程式,並以 SDK 中包含的範例程式 Pingpong 說明如何進行編譯、燒錄及最後執行的結果。

二. MCUXpresso SDK 介紹與取得

MCUXpresso 是用於開發和部署嵌入式應用程序,是由恩智浦半導體(NXP)推出的一個開發平台,旨在簡化嵌入式應用程序的開發和部署,其工具包括了:MCUXpresso Config Tools、MCUXpresso SDK、MCUXpresso IDE 和 MCUXpresso Debug Tools 等,而在本文示要使用的 MCUXpresso SDK,提供了一個完整的開發平台,包括開源驅動程式和參考示例應用程式等,以加速軟體開發的速度。

至 NXP 官網下載:https://mcuxpresso.nxp.com/en/welcome



選擇 Select Development Board:


選擇 i.MX8M Plus 開發板:



接著根據開發環境選擇 Host OS 及依需求選取所需的 MCUXpresso SDK 套件,作者是使用 Ubuntu 環境,因此選擇 Linux 與 GCC ARM,而multicore 與 FreeRTOS 預設包含了 pingpong 與 str_echo 的 Example,本文中所使用的相關檔案是參考這些範例進行修改。



下載 SDK:

 

三. Toolchain 相關準備

Toolchain通常是指一組用於開發、編譯和生成可執行文件、庫文件、韌體等,並適用於各種系統開發。至 Arm Developer 下載編譯環境對應版本,本文使用 Ubuntu 進行,因此下載 x86_64 Linux 版本。https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads


四. 編譯環境建置

最後將前面下載的 MCUXpresso SDK 與 Toolchain 檔案,解壓縮至編譯環境即建置完成。


五. 編譯

1. M7 端程式

在 multicore_example 的資料夾下就可以看到 pingpong 與 str_echo 的範例:



# 設定環境變數 

$ export ARMGCC_DIR=< toolchains_dir >
# 進行編譯
$ ./build_debug



在 debug 資料夾下產生 rpmsg_lite_pingpong_rtos_linux_remote.bin 檔:


2. A53 端驅動程式

接者在 A53 端會有對應的 Driver,如下圖所示:


在程式中可以看到兩個核心會持續收發至 data,當超過 100 便會停止:


編譯 Kernel:


在 package/lib/modules/ * /kernel/drivers/rpmsg 下會產生 .ko 檔:

六. 燒錄

將方才生成的 rpmsg_lite_pingpong_rtos_linux_remote.bin 放至 boot 目錄下:


而 imx_rpmsg_pingpong.ko 放至 root 目錄下:

七. 執行

開機後進入 U-Boot 模式,執行以下指令讓 M7 啟動程式:

# 設定 Device Tree
$ setenv fdtfile imx8mp evk rpmsg.dtb
# 讓 M7 啟動程式
$ fatload mmc 1:1 0x48000000 rpmsg_lite_pingpong_rtos_linux_remote.bin
; cp.b 0x48000000 0x7e0000 20000 ; bootaux 0x7e0000
# 繼續開機
$ boot


可於 M7 Console 看到 rpmsg_lite_pingpong_rtos_linux_remote.bin Firmware 已經執行起來 :



開機後,可於 M7 Console 看到成功 RPMsg 已經成功 Link up:



接著將驅動程式掛載起來:

$ insmod imx_rpmsg_pingpong.ko


在 Console 畫面上就可以看到 A53 核心與 M7 核心互相不斷回傳資料:


八. 結論

本文詳細介紹了從搭建 RPMsg(Remote Processor Messaging)編譯環境,到將其燒錄至 i.MX8M Plus 公板上,並執行 pingpoong 範例的各個步驟,最終,讀者可以看到 A53 核心和 M7 核心之間成功進行通訊的結果,希望本文的內容能夠讓讀者對RPMsg有初步的認識和了解。

參考資料

https://www.toradex.com/zh-cn/blog/nxp-imx8-m4he-xinfreertos-rpmsg-ying-yong-shi-li

ATU Support

NXP i.MX8 大大通技術索引

如有任何需求,請聯絡 WPI 的 TW ATU 團隊

  • 博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。
  • 文明上網,請理性發言,內容一周內被舉報5次,發文人進小黑屋。

★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

評論