今回の短いブログ記事では、Qemuにおいて、i.MX8MP SoCデバイスモデルのCortex-M7コア向けに非対称マルチプロセッシング(AMP)ブートサポートを有効にする方法について説明します。M7ファームウェアは、リモートプロシージャフレームワークを介して、Cortex-A53コア上で動作するLinuxからロードおよび起動できます。
非対称マルチプロセッシング(AMP)ブート
AMPとは何か疑問に思っている方へ:
これは、異なるプロセッサコアがそれぞれ異なるオペレーティングシステムまたはアプリケーションを独立して実行するブート構成を指します。
i.MX8M Plusには以下のものが含まれています。
AMPモードでは、起動シーケンスは通常次のように動作します。
iMX8MP上のCortex-M7には2つの制御パスがあります。
Linux の「fsl,imx8mp-cm7-mmio」は、MMIO パスを選択し、qemu で保証されていないファームウェア インターフェースへの依存を回避するために特別に存在します。
このモードでは、起動/停止制御にSRC sysconブロックとIOMUXC GPRを使用します。
リソーステーブル、vrings のメモリ領域は「 imx8mp-evk-rpmsg.dts」で指定する必要があります。
必要な変更を行うには、こちらのアプリケーションノートを参照してください - https://www.nxp.com/docs/en/application-note/AN5317.pdf
Linuxがremoteproc経由でCM7を起動する場合、一般的な流れは次のとおりです。
添付のパッチシリーズでは、AMPに必要な以下のペリフェラルモデルを紹介します。
- GPC(汎用電源コントローラ)
- GPR(汎用レジスタ)
- SRC(システムリセットコントローラー)
- MU(メッセージングユニット)
- CCMをM7クロック出力で拡張し、i.MX8MP SoCに接続します。
- i.MX8MP EVK機能テストでCortex-M7ブートを有効にする
//パッチの適用方法:-
1.qemuリポジトリのマスターブランチを取得し、このブログに添付されているパッチを適用してください。
2. パッチ適用後にqemuをビルドします。ビルド手順はリポジトリのREADMEファイルに記載されています。
// Cortex-A53上のLinuxからCortex-M7のAMPブートをテストする
前提条件:-
a. iMX8QXPのMCUXpresso SDKからベアメタルM7 elfを構築します。必ずこのビルドスクリプト( build_ddr_release.sh )を使用してください。
デモンストレーションには、この例を使用します - boards/evkmimx8mp/driver_examples/uart/polling
あなたはエルフを手に入れるでしょう。
b. imx8mp-evk-rpmsg.dtb は AN5317 の助けを借りて作成されました。
次に、別のCLIタブで、M7コンソールを開くために「screen /tmp/imx8mp-uart 115200」を実行します。空の画面が開きます。
Linuxゲストが実行されているコンソールで、以下を実行します。
これを実行するとすぐに、別のタブでM7バイナリの実行が開始されたことが確認できます。
この短いブログ記事では、非対称マルチプロセッシング(AMP)ブートサポートを有効化します。
Qemuにおけるi.MX8MP SoCデバイスモデルのCortex-M7コア。M7ファームウェアをロードできます
そして、リモートプロシージャフレームワークを介して、Cortex-A53コア上で動作するLinuxから開始されました。