こんにちは、
私は i.MX 943 EVKボードを使っており、Linux上のCortex-A55 SMPとZephyrのCortex-M33sの間でネットワークを共有したいと考えています。
そこで興味を持ちました。i.MX Linux ユーザーズガイド(https://www.nxp.com/docs/en/user-guide/UG10163.pdf - セクション11.6.2)からのENETC共有ユースCASEです。この例では、Linux側でプロキシPFドライバーを有効にするためにRPMsg接続を設定しました。RPMsg接続のリソーステーブルのアドレスは0x208a0000で、仮想キューは0x20800000にあります。これらのアドレス([0x20800000~0x208A0FFF])はNETC OCRAM内にあります。この領域はCortex-M33 Core1(M33S)とAP(非セキュアLinux)間のRPMSG共有メモリとして使用されます。
この例では、mx94evknetc.cfgのシステムマネージャー設定ファイルを使い、Cortex-M33がネットワークにアクセスできるようにしています。この設定ファイルの関係で、A55とM33は起動時に起動する必要があるので、ターゲットのimx-mkimage flash_allを使っています。
問題は、flash_a55ターゲット(mx94rte.cfgシステムマネージャーの設定ファイル)を使うと、Linux/U-BootとZephyrはそれらのアドレスにアクセスできますが、flash_allに切り替えると(システムマネージャーの設定ファイルに関係なく)、Linux/U-BootもZephyrもそれらのアドレスにアクセスできません。Zephyrはこれらのアドレスでバスフォールトが発生します。しかし、Zephyrの代わりにシンプルなhello_worldなどのFreeRTOSプログラムを使うと、Cortex-M33sやLinux/U-Bootがそれらのアドレスにアクセスできます。
また、mx94rte.cfgシステムマネージャーファイルでflash_allターゲットを使うと、Linux/U-BootもZephyrもそのアドレスにアクセスできませんが、Cortex-M33を停止してFreeRTOS hello_worldを読み込んで再起動すると、Linux/U-BootはNETC OCRAMにアクセスできます。
ちなみに、Zephyrはflash_M33sターゲットにアクセスできません。
そこで、FreeRTOSが初期化時にZephyrができないことを知りたいです。つまり、Linux/U-BootとZephyr間でNETC OCRAMにアクセスしやすくするために、その点はflash_allターゲットで。
ゼファーバージョン:4.3
Linuxバージョン(リアルタイムエッジ版):6.18.2