一. 概述
世平集團 ATU 伊布小編 (一部) 團隊針對 i.MX 相關技術整理了一系列博文,這篇文章主要會介紹如何使用 RPMsg 功能對 M33 核心進行功能驗證,希望能夠透過這些博文協助大家更了解 i.MX 的相關技術,未來 ATU 伊布小編 (一部) 團隊也會持續更新此系列的相關博文還懇請支持!
若用戶想要了解或嘗試更多 RPMsg 相關,請參考筆者先前所寫的 RPMsg 相關博文:
【ATU Book-i.MX8系列】i.MX8M Plus RPMsg 開發環境架設與 Pingpong 範例
【ATU Book-i.MX8系列】i.MX8M Plus RPMsg LED Control : 解決開機時信號控制的挑戰
1.1 OP-Gyro 介紹
OP-Gyro 是世平集團使用 NXP i.MX93 為核心設計製作的 SBC 方案,其 SOC 規格包含了 Arm® Cortex®-A55 與 Arm® Cortex®-M33 兩種核心的處理器,這種多核心架構 ARM 處理器讓系統實現高效且即時的應用,如想了解更多關於 OP-Gyro 方案或 i.MX 的相關技術,可以透過 ATU 伊布小編 (一部) 團隊整理的系列博文索引來查找。
二. 環境建置
2.1 BSP 編譯
首先使用 Yocto Project 建立 BSP,更多詳細資訊請參考 Github 或 【ATU Book-i.MX9系列】OP-Gyro ( NXP i.MX93 ) Linux 開發環境架設這篇博文:
$ mkdir <release> && cd <release>
$ repo init -u https://github.com/WPI-ATU-1/wpi-manifest.git -b imx-linux-mickledore -m imx-6.1.55-2.2.0.xml && repo sync
$ DISTRO=fsl-imx-xwayland MACHINE=opgyro source imx-setup-release.sh -b build
$ bitbake <image recipe>
2.2 MCUXpresso SDK 下載
接著我們至 NXP 官網下載 MCUXpresso SDK,MCUXpresso SDK 提供了一個完整的開發平台,包括開源驅動程式和參考示例應用程式等,以加速軟體開發的速度,在網站中先選擇 i.MX93 開發板,並建立 SDK。
https://mcuxpresso.nxp.com/en/welcome
依據環境選擇相關配置,筆者是使用 Ubuntu 環境進行編譯,選擇 Linux 與 GCC ARM,而 Middleware / Library 的部分使用預設即可。
選擇完配置後,網站會儲存用戶所建立的 SDK,例如下圖中就有筆者先前建置的 i.MX8M Plus 的 SDK,用戶也可以透過 Rebuild 修改設定,這裡我們直接選擇下載 SDK。
下載除了 SDK 本身 Source Code 外,也有相關 Document,有需要也請參考。
2.3 GNU Compiler Toolchain 下載
另外還需要至 Arm Developer 下載 GNU compiler toolchain,根據編譯環境選擇對應版本,在此下載 x86_64 Linux 版本進行示範。
https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads
2.4 MCUXpresso SDK 環境建置
都下載完成後,在編譯環境下進行解壓縮,並設定環境變數。
$ tar zxvf SDK_2_15_000_MCIMX93-EVK.tar.gz
$ tar zxvf arm-gnu-toolchain.tar.gz
$ export ARMGCC_DIR=<toolchains_dir>
三. SDK 編譯
接下來就可以來進行編譯了,在此使用 pingpong example 進行示範。
$ cd boards/mcimx93evk/multicore_examples/rpmsg_lite_pingpong_rtos/linux_remote/armgcc
$ sh ./build_debug.sh
編譯完成後,會在 debug 資料夾下產生 .bin 檔,後面我們就要使用這 .bin 檔讓 M Core 開機。
四. SD Card 燒錄
目前 NXP 所採用的映像檔格式為 wic 檔案,至開發環境中的 <Yocto Build>/tmp/deploy/images/<machine>
查看是否有 .wic 或 .wic.zst 檔案,在此以 SD Card 作為儲存裝置的燒錄方式為範例,想了解其他儲存裝置,請參考 【ATU Book-i.MX9系列】OP-Gyro ( i.MX93 ) 系統燒錄介紹這篇文章。
同時也要將方才生成的 .bin 檔放至 boot 目錄下。
$ sudo dd if=<.wic> of=</dev/sdx> bs=1M stutas=progress conv=sync
$ cp <.bin> </mount/patition-boot>
五. M33 功能驗證
燒錄完成後就可以開始準備測試。
5.1 Console
首先透過 A55/M33 Debug Port 連接至電腦,並開啟各自的 Console 畫面。
5.2 A55 Core Boot ( U-Boot )
將板子上電讓 A Core 開機,並在開機倒數時,輸入任意鍵讓系統進入 U-Boot 模式。
在 U-Boot 執行以下指令讓 M Core 啟動程式:
u-boot=> setenv lpv 'fatload mmc 1:1 0x80000000 rpmsg_lite_pingpong_rtos_linux_remote.bin ; cp.b 0x80000000 0x201e0000 0x30000;bootaux 0x1ffe0000 0;'
u-boot=> setenv bootcmd 'run lpv;'${bootcmd}
u-boot=> setenv mmcargs 'setenv bootargs ${jh_clk} console=${console} root=${mmcroot} clk-imx93.mcore_booted snd_pcm.max_alloc_per_card=134217728'
u-boot=> boot
接著讓 A Core 繼續開機,同時也可以看到 M Core Firmware 已經執行起來,並成功 Link up,A Core 開機完成後再將 A Core 的驅動程式掛載起來。
$ insmod imx_rpmsg_pingpong.ko
最後就可以在 Console 畫面上看到 A Core 與 M Core 核心互相不斷回傳資料。
六. 結論
本篇文章介紹如何使用 RPMsg 功能對 M33 核心進行功能驗證,希望本篇文章的內容可以幫助到各位讀者更了解 OP-Gyro ( i.MX93 ) ,也懇請各位讀者多多支持 【ATU Book-i.MX9系列】OP-Gyro ( i.MX93 ) 的系列博文。若未來讀者們有 i.MX 的相關問題歡迎隨時與世平集團做討論。
評論