你好,
我正在使用 i.MX 943 EVK 开发板,我想在 Linux 系统上的 Cortex-A55 SMP 和 Zephyr 系统上的 Cortex-M33s 之间共享网络。
所以我对 i.MX Linux 用户指南中的 ENETC 共享用例示例产生了兴趣( https://www.nxp.com/docs/en/user-guide/UG10163.pdf - 第 11.6.2 节)。本示例设置了 RPMsg 连接,以便在 Linux 端启用代理 PF 驱动程序。RPMsg 连接的资源表地址为 0x208a0000,虚拟队列位于 0x20800000。这些地址([0x20800000 到 0x208A0FFF])位于 NETC OCRAM 中。该区域用作 Cortex-M33 Core1(M33S) 和 AP(非安全 Linux) 之间的 RPMSG 共享内存。
在这个例子中,我使用 mx94evknetc.cfg 系统管理器配置文件,以便 Cortex-M33s 可以访问网络。由于这个配置文件,我需要在启动时启动 A55 和 M33s,所以我使用目标 imx-mkimage flash_all。
我的问题是,当我使用 flash_a55 目标(使用 mx94rte.cfg 系统管理器配置文件)时,Linux/U-Boot 和 Zephyr 可以访问这些地址,但当我切换到 flash_all(无论系统管理器配置文件如何)时,Linux/U-Boot 和 Zephyr 都无法访问这些地址,无论 Zephyr 程序如何(Zephyr 在这些地址上遇到总线故障)。但是,如果我使用任何 FreeRTOS 程序(例如简单的 hello_world)而不是 Zephyr,Cortex-M33s 和 Linux/U-Boot 就可以访问这些地址。
我可以说,如果我使用带有 mx94rte.cfg 系统管理器文件的 flash_all 目标,Linux/U-Boot 和 Zephyr 都无法访问这些地址,但如果我停止 Cortex-M33s 并在上面加载 FreeRTOS hello_world 并重新启动,那么 Linux/U-Boot 就可以访问 NETC OCRAM。
需要注意的是,Zephyr 无法访问 flash_M33s 目标。
所以我想知道,为了让 Linux/U-Boot 和 Zephyr 能够通过 flash_all 目标访问 NETC OCRAM,FreeRTOS 在初始化过程中做了哪些 Zephyr 没有做的事情?
Zephyr 版本:4.3
Linux 版本(实时边缘版本):6.18.2