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/TDA2:如何使用 malloc()&OSA_memAllocSR 在 tda2px 上应用 mem??

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/730503/linux-tda2-how-to-use-the-malloc-osa_memallocsr-to-apply-the-mem-on-tda2px

器件型号:TDA2

工具/软件:Linux

我使用我们的 PCB 板。 总内存大小为512MB。 在 A15上运行 HLOS, Linux 使用64MB 内存。  & OSA_HEAPID_DDR_Cached_SR1使用了205 MB  

方案1. : 在 Linux 上,我打开了命令"free" ,我发现了 mem 信息, 为什么总 mem 是250m????    osa_HEAPID_DDR_cached_SR1在 Linux 上可以找到该内存区域??

                                   缓存的已用可用共享缓冲区总数
MEM:       250752    142764    107988      4636      4336     47188
/+缓冲区/高速缓存:     91240    159512
交换:           0         0         0

方案2:我运行我的用例 isscapture > ISP >我的 ALG (A15)>编码> rtsp server(A15);  当我运行用例 时,遇到错误"virtio_rpmsg_bus virtio2:在没有收件人的情况下收到 MSG "。  它似乎没有正确使用 mem malloc。  如何使用 malloc()& OSA_memAllocSR?  因为我使用一些开放源码, 所以 mem malloc 必须使用 malloc 或 them 中的 new。  如果我 malloc()是一个较大的内存区域,它是否与 OSA_memAllocSR 冲突?????  或 其他测量面积?  

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

    位于设备树的"已服务内存"条目中的条目从 Linux 可访问的内存中雕刻出来。 因此、分配给共享区域的205MB 在 Linux 中映射、但不可用于通用应用。 Vision SDK (apps.out)等应用依靠 M4来分配缓冲区、能够通过使用 memcache 模块访问这些区域。 您可以在此处找到更多信息:
    www.kernel.org/.../reserved-memory.txt

    我们建议对内核间共享的所有内存分配使用 OSA_memAllocSR。 malloc 调用不会分配 SR 区域的内存、而是从 Linux 内核的高内存中进行分配。

    此致
    Shravan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Shravan
    我的用例有一些日志,我希望您帮助我检查内存是否正常? 因为在我将 malloc 更改为 OSA_memAllocSR 之前,我的用例就无法运行,之后,一些用例可以运行,有些也不能运行。

    谢谢。


    [主机][主机] 72.553772 s:空链接:正在创建!!!
    [主机][主机] 72.553803 s:RTSP 链接:创建完成!!!
    [主机][主机] 72.555419 s:国强输入了 chains_issSimpleIsp_Display_startApp
    [主机][DSP1] 72.553894 s:系统:SW 消息框消息池、可用消息计数= 1023
    [主机][DSP1] 72.553925 s:系统:堆= local_L2 @ 0x00800000、总大小= 227264 B (221KB)、可用大小= 227264 B (221KB)
    [主机][DSP1] 72.553955 s:系统:堆= local_DDR @ 0x00000000、总大小= 524288 B (512KB)、可用大小= 520464 B (508KB)
    [主机][DSP2] 72.554169 s:系统:SW 消息框消息池、可用消息计数= 1023
    [主机][DSP2] 72.554199 s:系统:堆= local_L2 @ 0x00800000、总大小= 227264 B (221KB)、可用大小= 227264 B (221KB)
    [主机][DSP2] 72.554260 s:系统:堆= local_DDR @ 0x00000000、总大小= 524288 B (512KB)、可用大小= 520464 B (508KB)
    [主机][IPU2] 72.550661 s:编码:CH0:H264EncCreated:H264ENC_TI dev.500.V.H264AVC .EIVAHD.02.01.09.01
    [主机][IPU2] 72.550936 s:编码:所有通道创建... 完成了!!!
    [主机][IPU2] 72.552339 s:编码:创建... 完成了!!!
    [主机][IPU2] 72.552796 s:IPC_OUT_1:正在创建!!!
    [主机][IPU2] 72.553132 s:IPC_OUT_1:创建完成!!!
    [主机][IPU2] 72.554535 s:系统:SW 消息框消息池、可用消息计数= 1023
    [主机][IPU2] 72.554657 s:系统:堆= local_DDR @ 0x00000000、总大小= 262144 B (256KB)、可用大小= 252096 B (246KB)
    [主机][IPU2] 72.554809 s:系统:堆= SR_OCMC @ 0x00000000、总大小= 0B (0KB)、可用大小= 0B (0KB)
    [主机][IPU2] 72.554962 s:系统:堆= SR_DDR_cached @ 0x84203000、总大小= 214958080 B (205MB)、可用大小= 171809792 B (163MB)
    [主机][IPU2] 72.555145 s:系统:堆= SR_DDR_NON_Cached @ bbbfc00000、总大小= 1046912 B (0 MB)、可用大小= 1019264 B (0 MB)
    [主机][IPU2] 72.555572 s:***实用程序:CPU KHz = 20000 kHz ***
    [主机][IPU2] 72.855426 s:将摄像头电源设置为3!!!
    [主机][IPU2] 72.855517 s:等待500毫秒!!!
    [主机][IPU2] 73.3555456 s:Serilaizer #0具有 I2CAddr 74!!
    [主机][IPU2] 73.856463 s:AR0144_Start:读取某些寄存器 i2cinstid = 4,i2c addr = 40
    [主机][IPU2] 73.857317 s:AR0144_Start:读取 regAddr 0x3000 regValue:1356
    [主机][IPU2] 73.857378 s:AR0144_Start:开始写入默认寄存器
    [主机][主机] 74.917373 s:Guo强11输入了 chains_issSimpleIsp_Display_startApp
    [主机][主机] 74.918959 s:Guo强55输入了 chains_issSimpleIsp_Display_startApp
    [主机][主机] 74.919477 s:
    [主机][主机]
    [host][host ]=========================
    [host][host ] chains Run-Time Menu ([主机]链运行时菜单)
    [host][host ]=========================
    [主机][主机]
    [host][host ] 0:停止链
    [主机][主机]
    [host][host ] p:打印性能统计信息
    [主机][主机]
    [host][host ]输入选项:
    [68.639840] OMAP-L3_NOC 44000000.OCP:L3应用程序错误:目标5 mod:1 (不可清除)

    [主机][IPU2] 74.634 915s:AR0144_Start:End write defa[68.650614] OMAP-L3_NOC 440000.OCP:L3调试错误:目标5 mod:1 (不可清除)
    注册
    [主机][IPU2] 74.917037 s:AR0144_Start:读取 regAddr 0x3270 regValue:100
    [主机][IPU2] 74.917129 s:####传感器配置时间= 2361msec ####
    [主机][IPU2] 74.918593 s:ISSCAPTURE:开始进行中!!!
    [主机][IPU2] 74.918776 s:ISSCAPTURE:开始完成!!!
    [主机][主机] 74.970444 s:检测面数为:0节距(1280、1280)使用3ms
    [主机][主机] 75.004758 s:检测面数为:0间距(1280、1280)使用3ms
    [主机][主机] 75.037180 s:检测面数为:0间距(1280、1280)使用4ms
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    malloc 将从 Linux 内核可用的内存中进行分配(在您的情况下为512MB -保留内存区域)。
    如之前的帖子所示、如果您希望 IPU 和 DSP 访问存储器、则需要使用 Osa_memAllocSR 进行分配。 如果是 Linux 中某个进程的本地进程、则可以使用 malloc。 您可以使用以下命令中的信息来查看 Linux 可用的内存量。

    CAT /proc/meminfo

    如果您注意到 Linux 上的可用存储器较低、则可以通过更新内核器件树条目并相应地更新 VSDK 中 APPS/build/tda2px/mem_segure_define_linux.xs 中的 Linux 存储器映射文件来减小 SR-1区域大小、并执行全新构建。

    此致
    Shravan
x 出现错误。请重试或与管理员联系。