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.

[参考译文] RTOS/AM5728:在 DSO 上运行 TI NDK、而在 ARM Cortex A15上运行 Linux

Guru**** 2539500 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/743743/rtos-am5728-ti-ndk-on-dso-while-linux-running-on-arm-cortex-a15

器件型号:AM5728

工具/软件:TI-RTOS

尊敬的专家:

我们尝试使用 DSP 端的快速以太网交换机、运行 TI RTOS、而 Linux 运行在 ARM A15端。

 

遗憾的是、NDK 应用仅在 DSP 上运行得非常完美、但当我们在 DSP 上使用 Remoteproc 加载应用程序时、NDK 永远不会工作。

 

下面是我们的设置:

  • 在 ARM 端、Linux 在禁用 eth1和 eth0的情况下运行。 ETH 已从器件树中移除。
  • 在 DSP 端、TI RTOS + NDK 应用程序在启动时使用 Remoteproc 加载

 

为了调试这个问题、我们在项目中集成了一个 EMAC 环回测试程序、以确定在没有 NDK 堆栈的情况下 EMAC_DRIVER 是否正常工作。 代码测试不带 TCP/IP 堆栈的以太网交换机驱动程序的功能。 我认为问题更容易解决、因为问题是在驱动程序方面、而不是在 TCP/IP 堆栈上!

 

如果没有 Linux、测试将成功发送和接收100个以太网数据包。

 

但是、当 Linux 正在运行时、测试程序会发送数据包、但会卡在接收循环中、并且永远不会返回有效的数据包。

 

我还使用以下函数检查正在轮询端口状态的驱动程序的功能:

文件 EMAC_drv_v4.c 中的静态 EMAC_DRV_ERR_E EMAC_POLL_pkt_v4 (uint32_t port_num)

 

对于 DSP、驱动程序能够通过检查 CpdmaRxCp 的状态来检测是否已接收到数据包。 如果接收到数据包、驱动程序将通过重新编码正确的描述符来取消 RX 内容的队列:EMAC_dequeueRx (rxChan、(EMAC_Desc *) Desc);

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


    正如我所理解的、所有以太网功能都是在您的 DSP 应用中配置的、对吧? 您说您已从 DTS 和 dtsi 文件中删除了 ETH 节点。
    在这种情况下、您可以尝试从 tisd_am57xx-evm_defconfig 中禁用以太网驱动程序:
    CONFIG_ETHERNET=y
    CONFIG_NET_VENDOOR_TI=y
    CONFIG_TI_Davinci_MDIO=y
    CONFIG_TI_Davinci_CPDMA=y
    CONFIG_TI_CPSW_PHY_SEL=y
    CONFIG_TI_CPSW_ALE=y
    CONFIG_TI_CPSW=y
    CONFIG_TI_CPTS=y
    CONFIG_TI_CPTS_MOD=y
    此外、如果您的 DSP 应用处理所有与以太网相关的配置、则来自同一 defconfig 文件的 PHY 驱动程序也是如此。

    另一个需要检查的问题是从 systemd 启用所有与 eth 相关的服务:
    systemctl | grep eth
    systemctl | grep eth
    如果需要,请禁用 systemd 中的服务。 它们可能会阻止 DSP 固件与以太网交换机正常工作。

    此致、
    Yordan