Memory_Configuration(MTK内存配置)_第1页
Memory_Configuration(MTK内存配置)_第2页
Memory_Configuration(MTK内存配置)_第3页
Memory_Configuration(MTK内存配置)_第4页
Memory_Configuration(MTK内存配置)_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1. NOR FlashNOR Flash 的 ROM 和 RAM 都较小,要节省 RAM 只能是去掉不必要的功能或减少存储 PB/SMS等的条数,或者优化应用占用的 RAM 空间。 ROM 除了优化和节省代码和资源空 间,还可以通过调整代码区和文件系统区的大小来获得更多的代码区或用户空间。以 128+64 MCP为例(Memory 分配为 Code: 14MB, FS: 2MB,用户区 : 355KB的内存分 配图:内存配置在 custom_MemoryDevice.h文件中:#define NOR_BOOTING_NOR_FS_BASE_ADDRESS 0xe00000#define NO

2、R_BOOTING_NOR_FS_SIZE 0x200000#define NOR_BOOTING_NOR_FS_FIRST_DRIVE_SECTORS 710其中,NOR_BOOTING_NOR_FS_BASE_ADDRESS是配置 code 区域的大小, 这里配置为 0xe00000即 14MB 。 Code 区中包含 bootloader 部分,固定占用 128KB ,所以实际可用的代码区是小 于 14MB 的。NOR_BOOTING_NOR_FS_SIZE是配置文件系统区域的大小, 这里配置为 0x200000即 2MB ; NOR_BOOTING_NOR_FS_FIRST_DRIVE

3、_SECTORS是配置用户可见区域的大小,此配置 的单位是 sector , 1 sector = 512 Bytes,此处的 710表示 710个 sectors ,即 355KB 。文件系统分配参考 ckSysDrv.log 文件: =FS Total Size 2097152FS First Drive Size 363520FS Overhead for (MBR + PBR + Root Dir 7168FDM Overhead (NOR 415232=Free Space for Folders and Applications 1311232 1280Folders and Ap

4、plications Requirement (Clusters 965315 clusters are left (315.0 KB = 0.31 MB1.1 如何调整 code 区和 FS 区的大小?从 上 图 可 以 看 出 , NOR_BOOTING_NOR_FS_BASE_ADDRESS和 NOR_BOOTING_NOR_FS_SIZE加起来就是整个 Memory 的大小。当 CODE 区不足时(编 译时 log 中会给出确切的超出尺寸 ,可以适当的减少 FS 系统区域的大小; 反之,可以增加 FS 系统的区域以增加用户区的大小。注意:1. 针对 Multi-Bank 的 MCP 而

5、言,如果要调整 ROM 的配置,前提是支持如下功能: ENHANCED_SINGLE_BANK_NOR_FLASH_SUPPORT = TRUE2. 调整 ROM 的配置要严格一 Block 对齐(BLOCK 的大小与具体的 MCP 相关,不同的 MCP 的 Block 可能会不同 ,常见的 Block 是 128KB 。3. 根据编译结果,可以确定需要调整的大小,如:#define NOR_BOOTING_NOR_FS_BASE_ADDRESS 0xE20000#define NOR_BOOTING_NOR_FS_SIZE 0x1E0000或#define NOR_BOOTING_NOR_F

6、S_BASE_ADDRESS 0xDE0000#define NOR_BOOTING_NOR_FS_SIZE 0x2200004. 目前存在的未解决的问题(eservice ID: MAUI_0287656353_09A平台 K6053S 项目存在问题,当配置如下时是正常的:#define NOR_BOOTING_NOR_FS_BASE_ADDRESS 0xdc0000#define NOR_BOOTING_NOR_FS_SIZE 0x240000但是修改为以下的配置,则无法开机,只显示了 bootloader 画面,然后就死机了: #define NOR_BOOTING_NOR_FS_BAS

7、E_ADDRESS 0xde0000#define NOR_BOOTING_NOR_FS_SIZE 0x220000文件系统区分为几个部分:用户区、文件分区表头区、应用程序区以及预留区域。用户区就是用户可见区域(FS First Drive Size ,此区域可以分配的最大空间计算如下: FS First Drive Size = FS Total Size Overhead Applications Left Space其中, FS Total Size是上一步分配的 FS 空间大小。Overhead 包括 FS Overhead和 FDM Overhead, FS Overhead基本是固

8、定的, 占用的空间也比 较小, 可以不去考虑。 FDM Overhead的大小是可以在 custom_MemoryDevice.h进行调整的: #define NOR_FDM4_ESB_PARAMETER_ERASE_QUEUE_SIZE 3MTK 默认的 FDM Overhead 大小为 5个 blocks (即 5*128KB ,最小值为 3,不能小于 3, 否则会导致错误。如非必要,尽量保持 MTK 的默认值,保证系统的稳定性和运行效率, MTK 反馈当用户区太小或者应用占用的系统区空间需要增大时,可以调整为 3,不会影响 到手机的正常运行,但会对运行效率有一些影响,对于 53这样的平台

9、用户基本感觉不到, 因为影响效率的瓶颈不在此处。此配置调整的前提也需要支持如下 option:ENHANCED_SINGLE_BANK_NOR_FLASH_SUPPORT = TRUEApplications 区域是根据项目的不同配置而变化的,比如 NVRAM 增加或减少, PB 和 SMS 的最大条数的调整, WAP, JAV A, BT等配置的调整等都会影响到 Applications 区域的占用空 间。具体可以参考 ckSysDrv.log 文件。Left Space是系统区预留的空间,不能太小,比如 10KB 左右就会导致在开机时提示系统空 间不足(倒计时提示 ,有时开始时没有问题,但

10、操作一些功能后再开机又会出现此提示。 针对此情况, MTK 也没有给出具体应该预留多少,建议 60KB100KB或更多些。从目前的 版本情况看,超过 30KB 应该可以,但为保险起见,还是建议 60KB 以上。1.3实现为不同的项目和客户需求自动配置 Memory综上,可以看出,配置 Memory 只需修改 custom_MemoryDevice.h文件中的定义。由于此文 件是由编译前选定的 MCP 复制而来的,而 MCP 是公用的,不是为某一个项目或某一个需 求配置的,所以需要在编译开始之前将复制到目标路径 custom_MemoryDevice.h进行修改。custom_MemoryDev

11、ice.h这个文件比较特殊,不能像普通的头文件加入条件编译语句,所以 增加了一个 perl 脚本来完成需要的修改 configMemory.pl 。 此脚本的执行要保证在 sysgen 和 emigen 执行之前。为增加 Memory 配置的灵活性,定义了两组宏分别用于项目配置和用户需求配置:用于项目配置(proconfig.mak :当通用的 MCP 配置无法满足某个项目时定义。TL_MEMORY_CUSTOM_ROM_CODE_SIZE_PROJECT (代码区大小 TL_MEMORY_CUSTOM_FS_SIZE_PROJECT (文件系统区大小 TL_MEMORY_CUSTOM_USE

12、R_SIZE_PROJECT (用户可见区大小 用于客户需求配置(userxxx.mak :当通用的 MCP 配置无法满足某个客户需求时定义。 TL_MEMORY_CUSTOM_ROM_CODE_SIZE_USER (代码区大小 TL_MEMORY_CUSTOM_FS_SIZE_USER (文件系统区大小 TL_MEMORY_CUSTOM_USER_SIZE_USER (用户可见区大小 configMemory.pl 脚本的基本思路如下:1 检查是否用户需求中配置了 MCP ,如果没有配置则检查项目是否配置了 MCP ,如果也 没有配置则不需要修改 memory 配置; 否则记录下各区域的大小

13、。 此处, 为了简化实现, 必须 3个区域都配置了才有效,且此处省去了配置各区域的校验。2 打开 custom_MemoryDevice.h这个文件,将文件内容读到一个字符串中,然后关闭。3 在这个字符串中查找各区域定义的关键字,找到后使用配置的值替换掉。4 再次打开 custom_MemoryDevice.h这个文件,将字符串写回文件中,然后关闭。完成配 置。如果编译一个版本出现 ROM 空间超出时, 可以直接修改 custom_MemoryDevice.h文件中的 定义进行调整,然后执行 mcpgen.bat 编译验证。call make TELACOM53_10A_12832 gprs

14、sysgencall make TELACOM53_10A_12832 gprs emicleancall make TELACOM53_10A_12832 gprs emigencall make TELACOM53_10A_12832 gprs c,u custom drv注意:由于目前 make file中都设置了 SYSGEN_ENABLE=TRUE,表示 scatter file每次 new 编译时都会自动生成。 在 10A 之前的版本, mcpgen.bat 中不需要执行 make sysgen命令 scatter file 就会自动更新,但是 10A 版本则必须要执行 make

15、sysgen 命令,否则 scatter file 无法根 据 custom_MemoryDevice.h中修改的配置进行更新。2. NAND FlashNAND Flash (MCP 的类型的 ROM 和 RAM 相比 NOR Flash 都较大,一般情况不需要过 多的考虑 ROM 空间问题,但在某些情况 RAM 是需要重点注意的,当 RAM 空间紧张的时 候要可以通过优化代码和调整 scatter file来节省 RAM 。以下是 NAND Flash和 RAM 分配的简要说明(可能不完全准确 : FS内存配置在 custom_MemoryDevice.h文件中:#define NAND_

16、BOOTING_NAND_FS_BASE_ADDRESS 0x02800000#define NAND_BOOTING_NAND_FS_SIZE 0x05800000#define NAND_BOOTING_NAND_FS_FIRST_DRIVE_SECTORS 128000含义与 NOR Flash相同,其中NAND_BOOTING_NAND_FS_BASE_ADDRESS是配置 code 区域的大小;NAND_BOOTING_NAND_FS_SIZE是配置文件系统区域的大小;NAND_BOOTING_NAND_FS_FIRST_DRIVE_SECTORS是配置用户可见区域的大小, 此配 置

17、的单位是 sector , 1 sector = 512 Bytes。由于 NAND Flash和 NOR Flash的工作方式不同,前者不能片上运行,必须要 load 到 RAM 中才能运行,所以需要注意以下几点:1. 当手机上电后, ROM 和 SECONDARY_ROM会通过 bootloader 全部 Load 到 RAM 中后 才开始运行;2. 而 DEMAND_PAGING_ROM0中的代码会动态加载到 RAM 中运行, 即当系统运行过程 中需要执行到 DEMAND PAGING中的代码时, 会先将一部分代码 load 到 page pool中, 运行完后再重新载入其他的代码。3.

18、 可见, ROM 和 SECONDARY_ROM这两部分代码既需要储存在 ROM 中,也需要同样 大小的 RAM 加载运行。所以,要节省 RAM 空间,需要尽可能的将这两部分代码的体 积减小,也就是说要适当增大 DEMAND PAGING CODE的大小。4. RAM 占用的计算方法(大体上 :TOTAL RAM = Total RW Size (RW+ZI + ROM + SECONDARY_ROM + Demand Page Pool其中, Total RW Size (RW+ZI 是应用程序占用的 RAM 空间,可以从 lis 文件中查看; Demand Page Pool是动态加载需要

19、的 RAM 空间, MTK 默认是 800KB , 一般情况下不需 要修改,定义在 custom_config.c中:#define DEMP_PAGE_POOL_SIZE (800 * 10245. 对于 NAND Flash, FS 系统区(不可见区需要留出足够的空间以避免再开机时出现文 件系统不足的“倒计时”提示。 MTK 针对此问题没有明确的说法,只是建议尽量多留 一些,根据我们之前的经验, FS 系统区保留 18MB24MB比较合适,即 Left Space 在 10M 以上。2.1调整 code 区和 FS 区以及用户可见区的大小调整 code 区和 FS 区的大小的方法与 NOR

20、 Flash相同,实现上也是通过 configMemory.pl 脚 本完成,请参考前面的相关说明和 configMemory.pl 脚本。另外,为尽可能节省 RAM ,经常需要调整 DEMAND PAGING ROM SIZE。实现上也定义了两组 宏分别用于项目配置和用户需求配置:TL_MEMORY_CUSTOM_DEMAND_PAGING_ROM_SIZE_USER:用于客户需求配置(userxxx.mak TL_MEMORY_CUSTOM_DEMAND_PAGING_ROM_SIZE_PROJECT:用于项目配置(proconfig.mak 修改 DEMAND PAGING ROM SI

21、ZE需要修改 scatter file和 custom_scatstruct.c文件,由于 目前基本都开启了 SYSGEN_ENABLE=TRUE, 修改这两个文件都要在相应的 perl 脚本中完 成 : sactGenLib.pl和 SysGen2.pl 。custom_scatstruct.c:#define DEMP_PAGE_POOL_SIZE (_TL_MEMORY_CUSTOM_DEMAND_PAGING_ROM_SIZE_ /1024/1024 /* in MB */ scatter file:DEMAND_PAGING_ROM0 0xf4000000 0x18000002.2如

22、何尽可能将资源及代码放到 DEMAND PAGING ROM中?通过配置 scatter file可以将一些数据及资源放到 DEMAND_PAGING_ROM0中, 如果开启了 SYSGEN_ENABLE=TRUE,需要修改 sactGenLib.pl 文件。将一些模块的资源和数据部分写到 scatter file 中的 DEMAND_PAGING_ROM0部分,生成 BIN 文件时就会生成在 DEMAND_PAGING_ROM0文件中。如下:DEMAND_PAGING_ROM0 0xf4000000 0x2000000DEMAND_PAGING_ROM0 0xf4000000DEMAND_P

23、AGING_ROM1 +0x00DEMAND_PAGING_ROM2 +0x00DEMAND_PAGING_ROM3 +0x00; _TL_TELACOM_MODIFICATION_ begin; audio resourcecustpack_audio.obj (+RO-DATAresource_audio.obj (RES_AUDIO; Vector fontvf_*.obj (+RO-DATA; Preset Java Appletsj2me_custom_mids.obj (+RO-DATA; HanWang WrtingHanWangInterface.obj (+RO-DATA;

24、Charset tablecharsettable.obj (+RO-DATA; _TL_TELACOM_MODIFICATION_ endcustpack_audio.obj (+RO-DATA:表示将 custpack_audio.c文件中的 DATA 部分放到 DEMAND PAGING ROM中。custpack_audio.obj (+RO-CODE:表示将 custpack_audio.c文件中的 code 部分放到 DEMAND PAGING ROM中。对于某些文件中嵌入了一些资源,但不能将 DA TA 区域全部放到 DEMAND PAGING ROM 中, 否则会导致一些问题 (resource_audio.obj (RES_DATA会引起死机问题 。 将某些 CODE 放到 DEMAND PAGING ROM 也可能会引起类似的问题。保险起见,一般情况下不要将 CODE 部分放到 DEMAND PAGING ROM中。对于 resource_audio.c这个文件中,如果都直接放到静态 ROM 中,会占用过多的 RAM ,而 又不能将 data 区域都放到 DEMAND PAGING ROM中,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论