TI中文支持网
TI专业的中文技术问题搜集分享网站

AM5718: CMEM共享内存如何多次申请

Part Number:AM5718

TI的工程师,你们好!

我在使用共享内存API   msg->dataIn = CMEM_allocPool(CMEM_getPool(PAYLOADSIZE), &cmemAttrs);申请共享内存时,第一次调用没有问题,但是第二次调用就无法分配了,运行结果如下:

<– App_create:
–> App_exec:
CMEM_init success
user: 0xa9bbf000 phys: 0xa0000000      //第一次分配成功
CMEM Error: allocPool: ioctl CMEM_IOCALLOC failed from pool 0: -1          //第二次分配失败
CMEM_alloc() failed (returned NULL)

并且运行了:

pkill ti-mctd
rmmod cmemk
modprobe cmemk phys_start=0xa0000000 phys_end=0xa0100000 pools=2×524288

使用cat /proc/cmem看到的仍然是默认的配置,但是/sys/module/cmemk/parameters/下的各个文件都已经被修改,cat /proc/cmem结果如下:

Block 0: Pool 0: 1 bufs size 0xc000000 (0xc000000 requested)

Pool 0 busy bufs:

Pool 0 free bufs:
id 0: phys addr 0xa0000000

问题:

1、是否运行n次CMEM_allocPool就需要pools分为n个区间?

2、除了修改dtsi的方式,是否modprobe没有作用?

参考帖子:

https://www.ti2k.com/wp-content/uploads/ti2k/DeyiSupport_DSP_linux-am5728-cmem-error

谢谢!

Nancy Wang:

hongyou lu 说:1、是否运行n次CMEM_allocPool就需要pools分为n个区间?

我需要确认一下,可以先尝试分区间。

hongyou lu 说:2、除了修改dtsi的方式,是否modprobe没有作用?

参考以下链接看一下:

https://software-dl.ti.com/processor-sdk-linux/esd/docs/06_03_00_106/linux/Foundational_Components_CMEM.html

https://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/linuxutils/latest/docs/html/cmem_8h.html

,

hongyou lu:

谢谢你的回复,Nancy。

这两个链接我都看过,按照上面的操作并没有实现分区间,目前来说只能通过修改dtsi文件了,但这种方式相对来说由于要修改内核的内容会比较麻烦。

我找到另外一种方式,只申请一次共享内存,在多个进程中使用CMEM_registerAlloc重新映射,可实现自定义共享内存区间的规则。

,

Nancy Wang:

好的,感谢分享!

赞(0)
未经允许不得转载:TI中文支持网 » AM5718: CMEM共享内存如何多次申请
分享到: 更多 (0)