Loadmodules.sh解析:
#!/bin/sh
rmmod cmemk 2>/dev/null //删除cmemk模块,把如果出错的信息发送到无设备状态,
//2表示,标准错误,1表示标准输出即键盘
rmmod irqk 2>/dev/null //irqk,edmak,dm365mmap的模块现在还不知道确切的含义,//但是它们与编解码有关,只有加载它们,才能正确调用编解码的应用程序,这个程序我理解的事在加载这些模块之前必须先分配缓冲池内存,分配之后才能家在模块,正确运行程序
rmmod edmak 2>/dev/null
rmmod dm365mmap 2>/dev/null
//edma是与用户层连接,链接linux内核edma所用的库函数资源
# Pools configuration
insmod cmemk.ko phys_start=0x85400000 phys_end=0x88000000 \
pools=1x6651904,1x3670016,18x1548288,1x282624,1x159744,1x49152,1x32768,1x28672,1x16384,3x12288,2x8192,36x4096
insmod irqk.ko
insmod edmak.ko
insmod dm365mmap.ko
模块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