您好,欢迎来到61ic! | [登录] [注册] 忘记密码 | 设为首页 帮助
 . 网站首页 . 业界新闻 . 设计中心 . 移动技术 . TI专栏 . ADI专栏 . FPGA专栏 . 代码工厂 . 官方商城 . 
 . 活动专区 . 新品快递 . 解决方案 . 前沿科技 . TI资源 . ADI资源 . FPGA资源 . 下载中心 . 产品展示 . 
加入收藏
付款方式
联系我们
您现在的位置: 61IC电子在线 >> TI专栏 >> TI Sitara ARM >> AM1x ARM9 >> 正文
  重新规划beagleboard-xm内存分配           ★★★ 【字体:
重新规划beagleboard-xm内存分配
作者:此何人哉    文章来源:此何人哉    点击数:    更新时间:2013-10-14    

最近做一个东西,需要对很大图像进行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啦!

文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章: 没有了
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
    没有相关文章
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    站长:61 湘ICP备13001086号-2