重新规划beagleboard-xm内存分配

最近做一个东西,需要对很大图像进行jpeg压缩。beagleboard-xm默认分配给cmem和dsp端heap的内存不够用,需要重新分配内存块。看了一下启动脚本和codec server中的内存分配脚本,很快找到了需要修改的地方。

1、首先需要修改的是启动参数

原来的启动参数是:

console=ttyS2,115200n8 noinitrd rw ip=192.168.10.101:192.168.10.100:192.168.10.1:255.255.255.0::usb0:off root=/dev/nfs nfsroot=192.168.10.100:/home/ubuntu/install/dm3730/targetfs,nolock,rsize=1024,wsize=1024mem=55M@0x80000000 mpurate=1000 omap_vout.vid1_static_vrfb_alloc=y omapfb.vram=0:8Mmem=384M@0x88000000 omapfb.mode=dvi:hd720 omapdss.def_disp=dvi vram=8M rootwait camera=lbcm5m03

其中mem=384@0x88000000应该是分配给显卡的,omapfb.vram应该是显存吧?呵呵,我没看文档,不敢确定。反正我就盯上这块儿内存了,就从这里划出128M,修改启动参数为:

'console=ttyS2,115200n8 noinitrd rw ip=192.168.10.101:192.168.10.100:192.168.10.1:255.255.255.0::usb0:off root=/dev/nfs nfsroot=192.168.10.100:/home/ubuntu/install/dm3730/targetfs,nolock,rsize=1024,wsize=1024mem=55M@0x80000000 mpurate=1000 omap_vout.vid1_static_vrfb_alloc=y omapfb.vram=0:8Mmem=256M@0x90000000 omapfb.mode=dvi:hd720 omapdss.def_disp=dvi vram=8M rootwait camera=lbcm5m03'

2、然后修改cmem的内存分配

在嵌入式文件系统里找到/etc/init.d/loadmodule-rc,可以看到这么一段注释:

# Default Memory Map for DM3730 EVM
#
# Start Addr    Size    Description
# -------------------------------------------
# 0x80000000     55 MB  Linux
# 0x83700000     34 MB  CMEM
# 0x85900000     39 MB  CODEC SERVER

这是默认的内存分配情况,0x80000000起始的55MB对应启动参数中的mem=55M@0x80000000,0x85900000起始的39MB是留给dsp程序的,划分给CMEM的是0x83700000起始的34MB。具体的分配工作是这个命令执行的:modprobe cmemk phys_start=0x83700000 phys_end=0x85900000 allowOverlap=1 useHeapIfPoolUnavailable=1

刚才不是从显存里剥削了128M内存空间出来么?现在把其中的一半交给cmem管理,也就是说cmem的大小为34+64=98MB,起始地址不变,还是0x83700000,而终止地址修为0x89900000,将脚本中的语句修改为modprobe cmemk phys_start=0x83700000 phys_end=0x89900000 allowOverlap=1 useHeapIfPoolUnavailable=1

3、最后来修改codec server也就是dsp端程序中的内存分配。

刚才说了,原始脚本将0x85900000起始的39MB分配给了dsp。说是“分配”,其实在arm和linux一端不需要任何操作,谁都不用这块儿内存,留给dsp享用就行啦。但是在dsp端就不能当甩手掌柜了,必须配置一下,要在codec server的.tcf文件里,按照现在的内存划分重新分配内存。这个tcf文件,就是单核dsp时代dsp/bios的配置文件,当年在ccs3.3下有图形化配置工具进行操作的。现在搞到linux底下,退化成需要手工编辑的脚本了,呵呵。其实也能图形化配置,需要花钱买ccs5 for linux版本的license,白花花的银子啊……

我这里的tcf没有直接写内存分配,而是包含了一个memmap.tci,类似.c包含.h,内存就是在这里面分配的。在哪都无所谓,给丫改过来就行啦!算法处理大图像,需要大heap,那么就把剩下的64M内存扔到heap里。也就是说需要修改的有两个内容,一个是dsp程序的起始地址,牵一发而动全身,这个地址变了,每个内存块儿的起始地址都得跟着变,再一个就是heap大小,找到heap的内存块,把那64M扔进去就OK了。

1、2、3都修改完之后,首先要重新编译codec server,然后再重新编译调用codec server的应用程序,都编译通过之后,用新的启动参数启动内核,把codec server和应用程序这俩货都拷贝到文件系统上,运行就OK啦!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值