iMX8 Nano 内核从 5.15 更新至 6.18 你好 在将 A53 内核从 5.15 移植到 6.18 时,遇到了 rpmsg 的问题。 # dmesg -T | grep -Ei 'rpmsg|rproc' [2024年10月8日星期二 15:42:28] imx rpmsg 驱动程序已注册。 [2024年10月8日星期二 15:42:29] imx-rproc imx8mn-cm7:错误 -ENOENT:启用时钟失败 [2024年10月8日星期二 15:42:29] imx-rproc imx8mn-cm7:使用驱动程序 imx-rproc 进行探测失败,错误代码为 -2 [2024年10月8日星期二 15:42:29] remoteproc remoteproc0:正在释放 imx-rproc 我遇到了这个错误。我在网上搜索这个错误时,有人建议我在 DTS 文件中添加一个虚拟时钟,如下所示。 imx8mn-cm7 { 兼容 = "fsl,imx8mn-cm7"; rsc-da = <0xb8000000>; clocks = <&clk IMX8MN_CLK_DUMMY>; mbox-names = "tx", "rx", "rxdb"; mboxes = <μ 0 1 μ 1 1 μ 3 1>; 内存区域 = <&vdevbuffer>, <&vdev0vring0>, <&vdev0vring1>, <&rsc_table>; 状态 = "正常"; } 请问是否只需要做这一项更改?更改的原因是什么? 问候 亚杜纳特·R Re: iMX8 Nano Kernel updation from 5.15 to 6.18 不——我不会将 clocks = <&clk IMX8MN_CLK_DUMMY>; 视为唯一需要的更改。或许可以解决眼前的 -ENOENT:启用时钟探测失败的问题,但对于 i.MX8M Nano 来说,重要的要求是,当 Linux 加载/启动 M7 固件时,Cortex-M7 根时钟必须保持启用状态。
原因:
imx-rproc 节点应该有一个时钟条目;AN5317 显示了 i.MX8M remoteproc DTS 节点,其 compatible = "fsl,imx8mn-cm7" 和 clocks = <...> 属性,以及邮箱和内存区域条目。
您的错误意味着内核 6.18 imx-rproc 驱动程序尝试从该节点获取/启用时钟,但时钟查找失败并出现 -ENOENT 错误,因此在 remoteproc0 保持注册状态之前探测中止。
NXP 的 AMP 指南指出: “对于 i.MX 8M 平台,Linux 必须始终启用 M7/M4 的根时钟,才能加载固件代码并启动 Cortex M7/M4。”它还指出,NXP Linux 电路板支持包 在 M 内核从 U-Boot 启动时保持此根时钟启用;否则,如果 M 内核首先从 Linux 启动,则必须更新 drivers/clk/imx/clk-composite-8m.c 以跳过 M 内核时钟的门注册。
所以这一变化有两种可能的含义:
使用虚拟时钟作为兼容性替代方案 如果内核 6.18 imx-rproc 需要一个 clocks 属性,但实际的 M7 时钟并非有意通过通用时钟框架控制,则添加 IMX8MN_CLK_DUMMY 可以满足驱动程序的时钟句柄要求,并避免 -ENOENT。
真正的时钟控制修复 如果 Linux 实际上负责加载/启动 M7,那么仅使用虚拟时钟可能会掩盖探测错误,但不能保证 M7 时钟已启用。在这种情况下,您必须确保 M7/M4 根时钟保持开启状态,这可以通过 NXP 电路板支持包时钟驱动程序处理或 clk-composite-8m.c 文件来实现。AN5317 中描述的变更。
此外,还要检查 remoteproc/rpmsg DTS 的其余部分,而不仅仅是时钟线:
imx8mn-cm7 {
兼容 = "fsl,imx8mn-cm7";
rsc-da = <...>;
clocks = <&clk IMX8MN_CLK_DUMMY>; /* 或您的 电路板支持包 使用的正确 M7 时钟 */
mbox-names = "tx", "rx", "rxdb";
mboxes = <μ 0 1>, <μ 1 1>, <μ 3 1>;
memory-region = , , , ;
status = "okay";
};
内存区域列表很重要,因为 AN5317 指出此属性必须包含固件 ELF 使用的内存部分,以便 remoteproc 可以从 sysfs 重新加载它。
推荐检查路径:
如果从U-Boot启动 M7,请使用 NXP 流程,例如 prepare_mcore / bootaux,然后启动 Linux;AN5317 指出,这是 BSP 保持 M 内核根时钟启用的路径。
如果您从Linux remoteproc启动 M7,请确认您的 6.18 时钟驱动程序包含 NXP 处理,以保持 M 内核根时钟始终启用;否则,虚拟时钟可能只能修复探测,而不能修复运行时启动/加载。
将您的 DTS 与 NXP imx8mn-*-rpmsg.dts 进行比较对于同一个 BSP 版本,特别是时钟、mboxes、rsc-da 和保留内存布局。
虚拟时钟解释了立即出现的 -ENOENT 探测失败,但真正的设计要求是保持 i.MX8MN M7 根时钟启用;仅靠 DTS 是否足够取决于你的 6.18 BSP 时钟驱动程序是否已经保留了该时钟。
查看全文