模块cmemk.ko为ARM和DSP通信提供连续的内存,装载的格式为:
insmod cmemk.ko pools=4x30000,2x500000
phys_start=0x0 phys_end=0x3000000 pools_1=4x65536
phys_start_1=0x80000000 phys_end_1=0x80010000
表明在内存0x0~0x2ffffff上开辟了两个内存池,第一个由4个30000字节得缓存组成,第二个由2个500000字节的缓存组成。在内存
0x80000000~0x8000ffff上开辟了一个由4个65536字节缓存组成的内存池。(注:低版本的cmem只支持一块内存)
按照Davinci内存的划分,cmem的内存空间位于linux内存和DSP算法使用的内存之间,在dvsdk2.0中cmem内存空间为118~128M(低版本的dvsdk为120~128M,不过低版本的dvsdk的DSP
server程序128M之后的很大一块也没有使用,cmem大一点也没事,不过2.0中DSP
server程序内存使用从128M开始)
dvsdk2.0中,cmem模块目录为:
[root@localhost cmem]# pwd
/opt/dvsdk_2_00_00_22/linuxutils_2_23_01/packages/ti/sdo/linuxutils/cmem
[root@localhost cmem]# tree
.
|-- CMEM.xdc
|-- Makefile
|-- Rules.make
|-- apps
| |-- Makefile
| |-- apitest
| | |-- Makefile
| | `-- apitest.c
| |-- insmod_rmmod
| | |-- Makefile
| | |-- insmod_rmmod.sh
| | `-- insmod_rmmod_omapL137.sh
| |-- multi_process
| | |-- Makefile
| | `-- multi_process.c
| `-- translate
| |-- Makefile
| `-- translate.c
|-- include
| `-- cmem.h
|-- lib
| `-- cmem.a470MV
|-- package
| |-- build.cfg
| |-- package.bld.xml
| |-- package.defs.h
| |-- package.doc.xml
| |-- package.ext.xml
| |-- package.rel.dot
| |-- package.rel.xml
| |-- package_ti.sdo.linuxutils.cmem.c
| |-- ti.sdo.linuxutils.cmem.ccs
| `-- ti.sdo.linuxutils.cmem.sch
|-- package.xdc
|-- package.xs
|-- readme.txt
`-- src
|-- Makefile
|-- interface
| |-- Makefile
| |-- cmem.c
| |-- cmem.h
| `-- release
| `-- cmem.o470MV
`-- module
|-- Makefile
|-- Module.symvers
|-- cmemk.c
|-- cmemk.ko
|-- cmemk.mod.c
|-- cmemk.mod.o
`-- cmemk.o
12 directories, 40 files
[root@localhost cmem]#
cmem提供的接口在demo中没有出现,而是被中间件进行了封装。dvsdk1.3中内存的分配使用了CE中OSAL包中Memory模块的
Memory_contigAlloc()函数,dvsdk2.0的demo使用了DMAI模块(在CE基础上进一步进行了封装)。