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/DRA744:VIP:视频捕获并不总是启动

Guru**** 2561410 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/607608/linux-dra744-vip-video-capture-does-not-always-start

器件型号:DRA744

工具/软件:Linux

您好!

我正在使用 VIP 块、通过使用基于 TI dmabuftest 的定制应用程序从多个摄像机采集图像。

有时,其中一个选择不会开始(而另一个选择则正常)。 调试该问题后、我发现应用程序在 VIDIOC_DQBUF ioctl 处挂起、无限期等待缓冲区到达。 K4.4上的 VIP 驱动程序的最新版本(PROCESSOR-SDK-LINUXT-Automotive 3.02.00.03)和旧版本的驱动程序(例如 PROCESSOR-SDK-LINUXE-Automotive 3.00.03)都出现了这种情况。

在内核3.14中、它运行正常。

请注意、这种情况发生在多种型号的摄像机上、包括离散和嵌入式同步信号。

我们将感谢您的任何帮助。

此致、

弗朗西斯科

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

    我已将您的问题转交给 VIP 专家。

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

    从应用的角度来看、DQBUF 是一种阻塞 ioctl、它会阻止直到驱动程序返回一个帧。
    如果您看到有挂起的情况。
    请附加整个 VIP 和 VPDMA 模块的寄存器转储。

    另请回答以下问题:
    -这是否与 dmabuftest 一起发生?
    -仅在第一个帧上发生挂起、或者有时在捕获开始后发生挂起(运行时)
    -是否会终止并重新启动应用程序


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

    工作: pastebin.com/.../K8zLWp8W
    不工作: pastebin.com/.../Cn8bYbiL

    至于您的问题:

    -这是否与 dmabuftest 一起发生?
    是(转储与最新版本的 dmabuftest 一起使用)

    -挂起仅发生在第一个帧上、还是有时发生在捕获开始后(运行时)?
    挂起仅在第一个帧上。 如果流开始、则采集可以无限期运行、而不会出现任何问题。

    -中止和重新启动应用程序是否起作用?
    是、但有时需要多次重新启动。

    此外、如果同时启动多个捕获(但也使用单个捕获)、则会更频繁地发生这种情况。

    谢谢!

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

    TI 不允许访问 pastebin.com
    您能否在 http://pastebin.ubuntu.com/中发布日志 或将其附加到此主题中?

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

    工作: pastebin.ubuntu.com/.../
    不工作: pastebin.ubuntu.com/.../

    BR、
    弗朗西斯科
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你(们)好

    根据寄存器转储、我看到解析器能够在两种情况下检测视频大小(48995530)
    但差异在于 VPDMA 列表状态寄存器(4899d00c)

    在非工作状态下,VPDMA 列表不占线。 (执行 DMA 时应该总是很忙)

    此外、VPDMA IRQ 寄存器(4899d088)表示捕获至少从4个通道(List0、1、2、3)发生一次。
    但在不工作的情况下、奇怪的是、在 VPDMA IRQ 寄存器(4899d088)中设置了 List0 Complete 的 IRQ 位、并且它也被启用(4899d08c)

    但是、它不会反映在平级 IRQ 寄存器(48990020)中


    请回答几个问题:-
    当您看到此故障时、您是否正在运行多个捕获?
    如果是、您能否确认故障仅在多个捕获并行运行时发生、还是在单个捕获发生时发生。


    我怀疑这可能是 CPU 端缺少 IRQ 的情况。
    只需尝试仅使用一个捕获运行、然后查看是否可以重现。
    我将根据您的信息进一步总结


    Nikhil D
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Nikhil、
    我在执行单次和多次捕获时都看到了这个问题;但是、在多捕获情况下(在这种情况下、通常在四次运行中进行两次或三次捕获、而不会出现任何问题)、这种情况更常见。

    谢谢你

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

    您是否可以附加寄存器转储、在该转储中、您只能从启动开始运行单次捕获
    每当您看到挂起、转储寄存器和连接时。

    请勿更改不同运行中使用的器件。

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

    pastebin.ubuntu.com/.../

    (使用 Vin4a)

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

    如怀疑的那样、这实际上是缺少 IRQ 的情况。
    我可以看到 VPDMA IRQ 位被置位、但是 Toplevel 位没有被正确置位。

    当 IRQ 被触发时、即使在驱动程序启用 IRQ 之前、也会发生这种情况。

    我认为这在其中一个补丁中是固定的。
    请提供您正在使用的内核的最后 TI 提交 ID、我可以指出修复此等用途的补丁。

    Nikhil D
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    TI 最新提交的是91222fb (标签:PROCESSOR-SDK-LINUXE-Automotive - 3.01.00.03)。

    谢谢你

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

    以下是应修复所述问题的补丁。
    pastebin.ubuntu.com/.../
    请告诉我它是否有用。

    Nikhil D
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Nikhil、
    遗憾的是、该补丁未能解决我们的问题。

    我们是否可以遵循其他路径?

    谢谢你

    BR、
    弗朗西斯科
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我很遗憾听到这个消息。 是否可以在应用补丁后共享寄存器转储。? Nikhil D
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Nikhil、
    从现在起、我无法在单次捕获模式下重现问题(因此问题的一部分可能已解决)。

    但是、我看到它处于多捕获模式(单个端口上的多个流- V4L2_MBUS_BT656)。 以下转储用于此类配置:

    pastebin.ubuntu.com/.../

    谢谢你

    BR、
    弗朗西斯科
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Francisco、
    很高兴知道部分问题已解决。

    我在 regdump 中看不到任何明显的东西、这看起来就像硬件在等待捕获完成的情况
    (大多数情况下99.9%的时间)

    我看到 VPDMA IRQ 被设定(这表示至少发生了一个捕捉)

    您能否分享有关多捕获故障情况的更多详细信息:-
    -引导后立即运行多捕获用例,并检查运行多少个捕获?
    -它是否仅运行1、2或更多捕获(发生故障的频率和可重现性的频率如何?)
    -如果无法捕获,请尝试通过运行以下命令获取 VPDMA 列表 N 的状态

    omapconf 写入0x4899d000 0xdDead000N
    omapconf 读取0x4899d000

    Nikhil D
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Nikhil、
    多捕获在引导后立即运行。 成功运行的捕获数量不恒定、无法以确定性方式获得重现性。

    VPDMA 列表状态:

    bash-3.2# omapconf 写入0x4899d000 0xdad0000
    bash-3.2# omapconf 读取0x4899d000
    00000026
    bash-3.2# omapconf 写入0x4899d000 0xdid0001
    bash-3.2# omapconf 读取0x4899d000
    00000027
    bash-3.2# omapconf 写入0x4899d000 0xdid0002
    bash-3.2# omapconf 读取0x4899d000
    00000028
    bash-3.2# omapconf 写入0x4899d000 0xdid0003
    bash-3.2# omapconf 读取0x4899d000
    00000029
    bash-3.2# omapconf 写入0x4899d000 0xdid0004
    bash-3.2# omapconf 读取0x4899d000
    000001FF
    bash-3.2# omapconf 写入0x4899d000 0xdid0005
    bash-3.2# omapconf 读取0x4899d000
    000001FF
    bash-3.2# omapconf 写入0x4899d000 0xdid0006
    bash-3.2# omapconf 读取0x4899d000
    000001FF
    bash-3.2# omapconf 写入0x4899d000 0xdid0007
    bash-3.2# omapconf 读取0x4899d000
    000001FF

    谢谢你

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

    从转储中、我可以推断得出结论。
    所有 VPDMA 列表正忙于等待正确的通道。
    这确实是预料之中的。 我仍然不确定为什么您会看到捕获失败。

    您是否可以尝试在较新的处理器 SDK 版本上运行?
    查看最新驱动程序的行为并检查是否可重现

    谢谢
    Nikhil D