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/AM5728:GateMP 示例问题

Guru**** 2606725 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/652711/linux-am5728-gatemp-example-problem

器件型号:AM5728

工具/软件:Linux

尊敬的 Sitara 支持团队:

我使用的是 processor_sdk_rtos_am57xx_4_01_00_06和 ti-processor-sdk-linux-am57xx-evm-04.01.00。

我从 IPC_3_46_02_04/packages/ti/ipc/tests/bin/ti_platforms_evmDRA7XX_dsp1/gatempapp.xe66获得 DSP 固件。

A15 Linux 源代码如下:

IPC_3_46_02_04/linux/src/tests/GateMPApp.c

IPC_3_46_02_04/linux/src/tests/main_host.c

我还中止了 ti-mctd 进程。当我运行 Linux 应用程序时,出现以下错误:

root@am57xx-EVM:~#./GateMPApp.host
-->主要:
CMEM_init 成功
->Main_main:
->GateMPApp_create:
[10619.875233] CMEMK 错误:ioctl:分配大小为0x1000的堆缓冲区失败
CMEM 错误:分配堆:ioctl CMEM_IOCALLOCHEAP 失败:-1
[10619.887423] CMEMK 错误:get_phys:无法找到0x0的 PHY 地址
[10619.898947] CMEMK 错误:get_phys:get_user_pages()失败:-14
[10619.904892] CMEMK 错误:GETPHYS:无法将虚拟0x0转换为物理。
CMEM 错误:getPhys:无法获取物理地址0
GateMPApp_create:无法获取物理缓冲区地址
-- GateMPApp_create:
<-- Main_main:
<--主要:

我发现在 DSP 上运行的函数 ti_sdo_ipc_SharedRegion_clearReservedMemory 将清除堆内存。

但是 cmemk.c cmem 的驱动程序会将该块的下一个块地址和大小保存在堆存储器前面。

因此、当 DSP 固件加载时 、cmemk.c 中 heap_head->next 的空间将被清除、

       curHeaderPhys = heap_head[bi]。next;

       /*在空闲列表上循环。 *
       while (curHeaderPhys!= 0){
               map_header (((void **)&curHeader、curHeaderPhys、&curHeader_VM_Area);
               curSize = curHeader-> Size;

curSize 将为0。这 会导致 alloc 失败。

如果我按照下面的方法运行应用程序,它将起作用。

重新加载 DSP 固件

rmmod cmemk.ko

insmod cmemk.ko

 /GateMPApp.host
-->主要:
CMEM_init 成功
->Main_main:
->GateMPApp_create:
GateMPApp_create:主机已就绪
-- GateMPApp_create:
--> GateMPApp_exec:
GateMPApp_exec:使用主机创建的门
GateMPApp_exec:使用从器件创建的门
-- GateMPApp_exec:0
--> GateMPApp_DELETE:
<- GateMPApp_DELETE:
<-- Main_main:
<--主要:

我的代码是否有问题?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    软件团队已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Fei Liang、

    GateMP 不是 Linux 的测试用例、列在 QNX 下。 请参阅 IPC 用户指南测试文档 processors.wiki.ti.com/.../Tests。 在 Linux 中、GateMP 源代码 在几个地方都有#define CMEM。 因此、这意味着需要 cmem。 我认为您所做的是正确的。

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

    感谢您的回复。

    我在安装 ti-processor-sdk-rtos-am57xx-evm-04.01.00.06-linux-x86-Install.bin 后找到了 ti 目录中的代码。
    TI/IPC_3_46_02_04/linux/src/tests/GateMPApp.c
    TI/IPC_3_46_02_04/linux/src/tests/main_host.c

    无法使用测试代码? 还是 GateMP 无法在 Linux 上使用?

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

    Fei Liang、

    代码与 QNX 目录中的代码不同、但我在 Linux 下的文件系统中看不到二进制文件。 这意味着它不是 Linux 的测试用例、也尚未经过测试。 我不清楚是否因为不是所有平台上的 cmem 或其他原因而将其删除。  

    雷克斯