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.

[参考译文] TMDXEVM368:VPFE-CAPTURE:dma_alloc_相干 大小... 失败

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/590776/tmdxevm368-vpfe-capture-dma_alloc_coherent-size-failed

器件型号:TMDXEVM368

我目前正在使用 Mistral DM36x EVM (尤其是 TMDXEVM368)。 我看到 G-Streamer v0.1包含在软件包中包含的 SD 卡中 Mistral 提供的文件系统中、我正在使用它来运行简单的视频捕获应用。

但是、我发现由于 DMA 相干大小不足、VPFE 捕获无法为帧分配内存。 当我使用 V4L2捕获应用从/dev/video0而不是 G-Streamer 读取数据时、再次出现此问题。

实际上、/dev/video0是一款有效的 V4L2输入器件、通过查看其属性:

驱动程序信息(不使用 libv4l2):
驱动程序名称:VPFE-CAPTURE
卡类型:DM365 EVM
总线信息:VPFE
驱动程序版本:0.0.1
功能:0x04000001
视频捕捉
流式传输
视频输入:0 (复合:正常)
视频标准= 0x0000f900
PAL-M/60
NTSC-M/M-JP/443/M-KR
格式化视频捕捉:
宽度/高度:720/480
像素格式:'UYVY'
field:隔行
每行字节数:1440
大小图像:691200
颜色空间:SMPTE 170m
传输功能:未知(c1f4dc60)
YCbCr 编码:未知(c1f4dc58)
量化:未知(c1f4dc74)
裁剪功能视频捕捉:
边界:左0,上0,宽度720,高度480
默认值:左侧0、顶部0、宽度720、高度480
像素宽:11/10
裁剪功能视频捕捉:
边界:左0,上0,宽度720,高度480
默认值:左侧0、顶部0、宽度720、高度480
像素宽:11/10
裁剪:左侧0、顶部0、宽度720、高度480
流参数视频捕捉:
功能:时间帧
每秒帧数:无效(0/0)
读取缓冲区:0
亮度(int):min=0 max=255 step=1 default=128 value=128 flags=slider
对比度(int):min=0 max=255 step=1 default=128 value=128 flags=slider
饱和(int):最小=0最大=255步进=1缺省=128值=128标志=滑块
色调(int):最小值=-180最大值=180步进=180默认值=0标记=slider
GAIN_AUTOMATIC (bool ): DEFAULT=1 Value=1

以下是页面分配错误的详细日志:

VPFE 捕获 VPFE 捕获:宽度= 720、高度= 576、bpp = 2
VPFE-CAPTURE VPFE-CAPTURE:已调整宽度= 720、高度= 480、bpp = 2、字节线= 1440、尺寸图像= 691200
CaptureFrame:页面分配失败。 顺序:8、模式:0xd0
回溯:
[ ](dump_backtrace+0x0/0x114)从[ ](dump_stack+0x18/0x1c)
R7:00000008 R6:000000d0 R5:00000000 R4:00000000
[ ](dump_stack+0x0/0x1c)从[ ](_alloc_pages_nodemASK+0x4a0/0x500)
[ ](__alloc_pages_nodemASK+0x0/0x500)从[ ](_dma_alloc+0x160/0x3fc)
[ ](_dma_alloc+0x0/0x3fc)、来自[ ](dma_alloc_相干+0x58/0x64)
[ ](dma_alloc_相干+0x0/0x64)从[ ](__video_buf_mmap_mapper+0x118/0x224)
R7:c203d900 R6:c1150e14 R5:c2234e4 R4:c1ef5bb0
[ ](__video_buf_mmap_mapper+0x0/0x224)来自[ ](video_mmap_mapper+0x64/0x94)
R8:00000000 r7:c203d900 R6:40150000 R5:c1ef5bb0 R4:c1150e14
[ ](video_mmap_mapper+0x0/0x94)、来自[ ](VPFE_mMAP+0x48/0x54)
r5:c1ef5bb0 r4:c1150c00
[ ](VPFE_mMAP+0x0/0x54)、来自[ ](v4l2_mmap+0x40/0x4c)
r5:c1ef5bb0 r4:c203d900
[ ](v4l2_mmap+0x0/0x4c)从[ ](mmap_region+0x220/0x42c)
r5:c1ef5bb0 r4:000000ff
[ ](mmap_region+0x0/0x42c)从[ ](do_mmap_pgoff+0x2c4/0x324)
[ ](do_mmap_pgoff+0x0/0x324)从[ ](sys_mmap_pgoff+0xa0/0xd0)
[ ](sys_mmap_pgoff+0x0/0xd0)、来自[ ](RET_FAST_SYSCALL+0x0/0x28)
MEM 信息:
每个 CPU 的 DMA:
CPU 0:Hi:6、btch:1 USD:5
ACTIVE_ANON:702 INACTIVE_ANON:746 Isolated anon:0
active_file:24 inactive_file:158 isoled_file:0
unevicable:0脏:0写回:0不稳定:0
FREE:6901 slab_RELEASGable:254 slab_unreimclable:983
映射:45分页:49可页:59回弹:0
无 DMA:27448kB 最小值:880kB 低电平:1100kB 高电平:1320kB ACTIVE_ANON:2808kB INACTIVE_ANON:2984kB ACTIVE_FILE:96kB INACTIVE_FILE:800kB Unevicable:0kBO
lowmem_reserve[]:0 0 0
DMA:236*4KB 376*8KB 244*16KB 134*32KB 58*64KB 27*128KB 22*256KB 5*512KB 0*1024KB 0*2048KB 0*4096KB 0*8192KB 0*16384KB =27504KB
共278页页
12288页 RAM
6939免费页面
2140保留页
822个层块页
共享118页
0页交换缓存
VPFE-CAPTURE VPFE-CAPTURE:dma_alloc_相干 大小692224失败
mmap:无法分配内存

这是否与 DMA 一致存储器区域(USALE_DMA_SIZE)的大小不足有关? 目前、这已定义为2MB、而可以以2MB 的倍数增加到14MB。

谢谢、

Anirudh

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

    您是否尝试为 userptr 提供从 CMEM 分配的内存? 让我检查在哪里增加 DMA 大小。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Dwarakesh、

    否、我根本没有使用 CMEM。 尽管我认为 CMEM 可以解决此问题、但 EVM 的标准 U-Boot、内核和文件系统- SD 卡的出厂默认设置和板载 NAND -不配置 CMEM。

    我认为、inased_dma_size 是内核中 arch/arm/include/asm/memory.h 中定义的宏。 但是、我尚未收到此电路板的相应 IPNC RDK 版本的存档、因此、我无法进行此更改并验证它是否解决了此问题。 我正在尝试联系 RDK 的 FAE。

    我确信、IPNC RDK 将使用 CMEM 来实现此目的。 也就是说、使用 RDK 图像是否是解决此问题的最合适方法?

    谢谢、

    Anirudh

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

    IPNC RDK 是用于不同硬件(基于 Appro 的 IPNC 摄像头)的软件包。 但可以选择为 EVM 构建 IPNC RDK、在 EVM 中工作正常。 是的、它使用 CMEM、并且视频管线应用中发生了变化 它不会回复 Linux 的 V4l2框架以进行捕获。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Dwarakesh、

    感谢您的提示!

    由于 IPNC RDK 附带 AV-Server、因此无需使用定制的 V4L2捕获应用、我们可以改用在 IPE 框架上构建的应用。

    因此,我想,为了解决这一问题,我们在理论上可以:

    • 使用 CMEM 兼容空间、而不是要求访问 DMA 一致的存储器空间、同时继续使用 G-Streamer 或自定义 V4L2应用
    • 使用 IPNC RDK 中提供的整个生态系统、完全绕过此问题、同时不考虑使用 G-Streamer 或自定义 V4L2应用

    谢谢、

    Anirudh

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Anirudh、
    是的。 此外、您还可以增大 DMA 大小并使用它。 您使用的是哪种封装? 是 DVSDK 吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、EVM 开箱即用运行 DVSDK v4.02;我没有刷写自定义内核或文件系统。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Anirudh、

    如果您不知道,您可以在以下位置获取该软件: www.ti.com/.../linuxdvsdk-dm36x