在之前使用不同的固件文件启动 DSP 后、我在启动 DSP 时遇到问题。 我最初的线索是进入一个无限 MessageQ_open()循环,尝试打开 DSP 从器件 MessageQ。
系统背景:
- 动态 DSP 加载
- 在我们的系统上、我们动态启动和停止 DSP1和 DSP2
- 我们使用/sys/bus/platform/drivers/omap-rproc /[bind、unbind ]节点来执行此操作
- 在下次启动 DSP (绑定)之前、我们始终停止 DSP (取消绑定)
- 多个 DSP 固件文件
- 当我们启动 DSP 时、我们使用符号链接指定要加载的不同固件文件。 例如、/lib/firmware/dra7-dsp1-fw.xe66指向/tmp/dsp1_firmware、它指向我们希望在该时刻加载的任何 DSP 固件。
- 因此、我们会定期更改在给定 DSP 上运行的 DSP 固件
- 流程是停止 DSP (取消绑定)、将 symlink 更新为新固件文件、启动 DSP (绑定)
- 版本
- 处理器 SDK 03.02.00.05
这起作用了(我的示例侧重于 DSP1以保持简洁性):
- 新加电
- 将 DSP1固件 symlink 设置为固件"A"
- 加载 rproc/rpmsg 内核模块、使用固件"A"自动加载 DSP1
- 停止 DSP1 (通过取消绑定节点)
- 启动 DSP1 (通过绑定节点)
这不起作用:
- 新加电
- 将 DSP1固件 symlink 设置为固件"A"
- 加载 rproc/rpmsg kerno 模块,使用固件"A"自动加载 DSP1
- 停止 DSP1 (通过取消绑定节点)
- 将 DSP1固件 symlink 设置为固件"B"
- 使用固件"B"启动 DSP1 (通过绑定节点)
如果我查看 LAD 日志、我会看到以下不起作用的病例:
[18.539938] nameserver_attach:连接失败:ProcID=4、errno=22 (无效参数)
[18.539961]关闭发送套接字:5.
[18.539989] nameserver_attach:<- refcount=0,status=-1
我发现在启动 DSP (通过绑定节点)和执行 IPC_START()/MessageQ 调用之间增加15秒的巨大延迟解决了问题。 遗憾的是、从系统性能的角度来看、15秒延迟是不可接受的。 我不明白为什么我坚持使用单个固件文件时不会弹出此问题。 固件"A"和"B"之间的资源表相同。
有什么建议吗?
谢谢