Chinaunix首页 | 论坛 | 博客
  • 博客访问: 442852
  • 博文数量: 127
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 810
  • 用 户 组: 普通用户
  • 注册时间: 2013-07-02 20:51
文章分类

全部博文(127)

文章存档

2018年(6)

2015年(18)

2014年(33)

2013年(70)

分类: 嵌入式

2013-11-13 18:38:29

=======================================================================================================

转载请注明原文地址:http://blog.csdn.net/crushonme/article/details/14517109

以下内容译自DM81xx DVR_RDK Memory Map.pdf文件。

=======================================================================================================



DVR RDK中支持多种不同的usecases,为了更有效地利用内存,在SYS/BIOS侧将物理内存配制成多个段,不同的段的大小是可以配置的,具体属性各不相同。

    下面简单介绍下各个区域的用途:

Linux Memory分配给linux管理的内存区域

Shared Regions:受限制的共享内存区,根据配置不同,其属性也各不相同,具体配置请参考

Syslink MessageQ/IPC ListMPNon-cached on M3

Bitstream BufferCached on A8. Cached on M3, although access by DMAs

Frame BufferVPSS - Video M3 Frame Buf

IPC ListMP for Dual-M3Cached on M3

Slave Code and Data Section Memory各个处理器的代码段和数据段,包括DSPDual-M3系统

Remote Debug Memory即2.2.1中所说的Remote debug部分的共享内存

VPDMA Descriptiors Memory用于存放VPSS M3部分分配的DMA配置

Host VPSS Notify Shared Memory用于使用FBDev时传递A8侧命令至VPSS M3

Tiler Memory为HDVPSSHDVICP提供Tiled内存,包含8bit区和16bit区。

FBDev Shared Memory为VPSS M3侧驱动提供内存

硬件上的限制:


  • Ducati M3系统无法访问超过0xA0000000的代码区;
  • Ducati M3系统无法访问超过0xE0000000的数据区;
  • Ducati M3系统中的AMMU只能管理512MB或者32MB的大内存段(largePages),被划分成了四个段,其中一段用于映射寄存器,因此AMMU只能访问这三个内存段;


软件上的限制:


  •  由于linux系统的内核空间为1GB、用户空间为3GB,因此内核最大只能映射1GB的存储空间,其中包含了启动参数及共享内存区;
  •  共享内存是静态分配的,因此修改后需要重新编译链接;
  • 由于映射Frame Buffer会消耗大量的内核空间,因此并未被映射到A8侧,用户在需要的时候动态映射(如使用IPC Frames In/Out link);



在修改内存分布的时候需要注意的事项:


  •  必须考虑上述的软硬件上的限制;即VPSS M3VIDEO M3的代码段必须放置在低512MB的物理内存里,并且需要在AMMU配置中将虚拟地址一一映射到物理地址;
  • 最少需要留2MB的空间给Syslink-Notify给内核空间,用于A8VPSS M3的通信,位置改变的时候,需要注意bootargs中的参数notifyk.vpssm3_sva也需要相应修改;
  • RemoteDebug段是用于方便调试用的打印消息暂存区,除A8外,所有消息打印都存在该区域,并使用Vps_printf调用,送到linux侧串口终端打印出来。可用于日志记录。在原有的一套代码中,需要自己根据内存配置指定日志记录所处的内存位置。用户可以将该套代码修改后集成到源程序中,做出实时打印来方便调试。具体位置可以根据配置,修改TI原有的genaddrinfo.xs脚本来产生一个头文件来指定(具体可仿照genaddriinfo.xs中生成env_xx_xx.sh的方法生成一个宏定义的头文件autocfg_mem.h,供其他代码调用)。
  • Linux Memory大小改变同样也需要修改bootargs中的mem参数,如果被分成多段的话,则可以使用mem=@来指定,需要注意的是TI在后续版本中要求Linux Memory需要按照4MB对齐。
  • Tiler Memory的起始地址需要128MB对齐,如果不使用Tiler Memory,该段内存会被用于Frame Buffer或者Bitstream Buffer的补充;
阅读(2062) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~