This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] Linux/EVMK2H:TCI3368K2K rmK2KC66A15LinuxDspClientTestProject 在 IpcMgr_ipcStartup 中崩溃

Guru**** 2595805 points
Other Parts Discussed in Thread: SYSBIOS, CODECOMPOSER

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/582703/linux-evmk2h-tci3368k2k-rmk2kc66a15linuxdspclienttestproject-crashing-in-ipcmgr_ipcstartup

器件型号:EVMK2H

工具/软件:Linux

我一直在使用 Processor SDK 中的 rmK2KC66A15LinuxDspClientTestProject (processor_sdk_rtos_k2hk _3_02_00_05和 processor-sdk-linux-rt-k2hk EVM-03.02.00.05)。 每次重新启动 Linux 后、我能够运行该示例一次、并获得正确、成功的输出。

但是,如果我 重置 DSP (对于0 1 2 3 4 5 6 7中的 DSP;执行 mpmcl 重置 DSP$DSP;完成), 则停止套接字<->MessageQ 代理任务(rmDspClientTest.out),  然后重新启动 Linux 资源管理器(pkill -9 rmServer.out); /usr/bin/rmServer.out global-resources.dtb server-policy.dtb -l linux-evm.dtb)、然后尝试重新启动 DSP 任务、CORE0控制台日志始终包含以下故障:


2个位于0x810000的资源条目
(小部分
*********** RM DSP+ARM DSP 客户端测试*********
(小部分
RM 版本:0x02020002
版本字符串:RM 版本:02.02.00.02:2016年12月13日:16:28:17


已初始化 RM_Client

核心0:-------------------------------------------------------
内核0:--- 静态初始化分配---
核心0:-实例名称:RM_Client -
核心0:-资源名称:QoS 群集-
内核0:-开始:0 -
内核0:-结束:0 -
内核0:-对齐:0 -
内核0:-
核心0:-通过-
核心0:-------------------------------------------------------

核心0:-------------------------------------------------------
内核0:--- 静态初始化分配---
核心0:-实例名称:RM_Client -
核心0:-资源名称:QoS 群集-
内核0:-开始:2 -
核心0:-结束:2 -
内核0:-对齐:0 -
内核0:-
核心0:-通过-
核心0:-------------------------------------------------------

核心0:-------------------------------------------------------
内核0:--- 静态初始化分配---
核心0:-实例名称:RM_Client -
核心0:-资源名称:QoS 群集-
内核0:-开始:1 -
核心0:-结束:1 -
内核0:-对齐:0 -
内核0:-
核心0:-已通过-拒绝:79 -
核心0:-------------------------------------------------------

核心0:-------------------------------------------------------
内核0:--- 静态初始化分配---
核心0:-实例名称:RM_Client -
核心0:-资源名称:AIF-队列-
内核0:-开始:525 -
核心0:-结束:525 -
内核0:-对齐:0 -
内核0:-
核心0:-通过-
核心0:-------------------------------------------------------

核心0:-------------------------------------------------------
内核0:--- 静态初始化分配---
核心0:-实例名称:RM_Client -
核心0:-资源名称:AIF-队列-
内核0:-开始:525 -
核心0:-结束:525 -
内核0:-对齐:0 -
内核0:-
核心0:-通过-
核心0:-------------------------------------------------------

核心0:正在创建 RM 启动任务...
内核0:正在启动 BIOS...
在61上使用主机注册 rpmsg-proto:rpmsg-proto 服务
[T=0x00131f5d] ti.SysBIOS.KNL.Semaphore:错误:第202行:断言失败:a_badContext:调用上下文错误。 必须从任务调用。
TI.SYSBIOS.KNL.Semaphore:第202行:断言失败:a_badContext:调用上下文错误。 必须从任务调用。
xdc.runtime.Error.raise:终止执行

使用 CodeComposer 调试器进行分解后、我会看到以下堆栈跟踪:

exit.c:128 0x008BB344处的 abort()
xdc_runtime_System_abort__E (char *)() at System.c:101 0x008BAE90
xdc_runtime_Error_PolicyDefault_E (struct xdc_runtime_Error_Block *、unsigned short、char *、int、unsigned int、 Error.c:165 0x008AAE28上的 int、int)()
xdc_runtime_Error_raiseX__E (struct xdc_runtime_Error_Block *、unsigned short、char *、int、unsigned int、 Error.c:115 0x008BC198上的 int、int)()
sassert.c:36 0x008B6928处的 xdc_runtime_assert_arc___i (unsigned short、char *、int、unsigned int)()
TI_SYSBIOS_KNL_Semaphore_Pend__E (struct ti_SysBIOS_KNL_Semaphore_Object *、unsigned int)(位于 semaphore.c:201 0x00897678
RPMessage_send (unsigned short、unsigned int、unsigned int、void *、unsigned short)()、位于 RPMessage.c:567 0x008913A4
sendMessage$14 (char *、char *、unsigned int、enum rpmsg_ns_flags)() at NameMap.c:81 0x008A59CE
TI_IPC_transports_TransportRpmsg_instance_init_E (struct ti_IPC_transports_TransportRpmsg_Object *、unsigned short、struct ti_IPC_transportRpmsg_Params *、struct XDC_RUNTIME_Error_Block *)() at TransportRpmsg.c:114 0x00108A8C
TI_IPC_transports_TransportRpmsg_create (unsigned short、struct ti_ipc_transports_TransportRpmsg_Params *、struct XDC_RUNITY_Error_Block *)() at DSP_client_pe66.c:25、540 0x008B5EEC
TI_IPC_TRANSFORS_TransportRpmsgSetup_attach_E (无符号短整型、void *)()、位于 TransportRpmsgSetup.c:75 0x008AFAA4
IpcMgr_ipcStartup () at IpcMgr.c:97 0x008A2830
在 DSP_CLIENT_PE66.c:3、638 0x008BA0C4处的 TI_SYSBIOS_BIOS_startFunc___I ()
在 dsp_client.c:1、009 0x0080FAE0处的 main (int、char *)()
_c_int00 () at boot.c:175 0x008C4C84 (发生错误:调试信息不指示返回地址)

此故障似乎与 IpcMgr_ipcStartup()功能有关。 当然、必须能够重新启动使用 IPC 的 DSP 应用、而无需完全重新启动 Linux?

Steve Williams

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Steve、

    我们将对此进行研究。 反馈将直接发布在此处。

    此致、
    Yordan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Yordan、

    是否有任何进展要报告? 如果不重新启动电路板、我仍然无法多次运行此演示。

    Steve
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Steve、

    所有 DSP 示例都旨在显示 API 的使用情况、而不是在生产质量方面。 因此、它们不能运行多次。 他们并不总是释放他们所获得的资源。

    正如前面所说的,您可能注意到 rmDspClientTest.out 没有退出,并且它处于 while 循环中。 我认为,通过终止它,它获得的资源没有得到适当的释放。

    雷克斯
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Rex、

    请尊敬、我的回答有两个问题:

    1. rmK2KC66A15LinuxDspClientTestProject.out 进程正常终止后,RM 是干净的--除 Linux 内核拥有的资源外,所有资源都在 /var/volatile/log/rmServer.log 中报告为"免费"
    2. rmDspClientTest.out 只是 DSP 应用程序和 Linux RM 服务器(rmServer.out)之间的消息交换代理。 它实际上不会分配任何资源本身、只会分配 rmK2KC66A15LinuxDspClientTestProject.out 请求的资源。 终止此 Linux 进程不应影响 RM 状态。

    问题是 DSP 进程(已退出)使基本 IPC 管道处于需要重新启动电路板才能恢复的状态。 当然、有一种方法可以让使用 IPC 的 DSP 应用程序终止并重新启动 Linux RM、而无需重新启动。

    1. 在这种情况下、什么是错误?如何修复?
    2. 在哪里可以找到有关如何在应用程序退出时正确清理的明确指导、以便可以重新启动使用 IPC 和 RM 的 DSP 应用程序?