如何在Windows CE.NET下使用大于256MB内存
实达网络科技有限公司瘦客户研究部 王贤俊 2003年03月21日 点击:1071
Windows CE .NET是Windows CE 3.0的后继产品。Windows CE .NET为嵌入式市场从新设计,为快速建立下一代智能移动和小内存占用的设备提供了一个健壮的实时操作系统。Windows CE .NET具备完整的操作系统特性集包和端对端开发环境,它包括了创建一个基于Windows CE的定制设备所需的一切,例如:强大的联网能力、强劲的实时性和小内存体积占用以及丰富的多媒体和Web浏览功能。
实际开发过程中,发现Windows CE. NET默认最大支持64MB内存,但是实际的应用中,往往对内存的需求往往超过64MB,而且现在内存的价格已经非常便宜,使用大内存已经是很普通的事情了,经过一阵摸索,我找到了修改Windows CE.NET,可以使用256M或者更大的内存的方法,其主要方法如下:
首先,你必须安装Windows CE .NET Platform Builder 4.0(以下简称PB4),假设你安装的Windows CE.NET位于D:/WINCE目录下,那么,首先找到文件oeminit.asm,位于D:/Wince/Public/Common/Oak/Csp/I486/Oal,这个文件是提供给OEM厂商做一些特定的配置的。
打开oeminit.asm文件,然后找到“_OEMAddressTable:”,_OEMAddressTable是一个非常关键的内存映射描述表,主要描述物理内存和虚拟内存之间的映射,表的每一条目有3个DWORD,依次是(VA,PA,cbSize),其中VA是虚拟内存的开始地址,一般为80000000h,PA是物理内存的开始地址,一般为0,cbSize就是CE内核支持物理内存的大小,这个DWORD是我们最最关心的,其单位是BYTE。需要注意的是,cbSize,一定要是4M Byte的倍数,因为Windows CE.NET内核中检测内存大小,是以4M Byte为单位来检测的。cbSize系统默认为04000000h,其大小为64M,我们可以将其修改为10000000h,就可以支持256M内存了,当然,你如果想支持更大的内存,也可以增大cbSize,只要是4M的倍数即可。
另外需要修改一个文件是:,打开pc.h,查找到:
#define CEPC_EXTRA_RAM_START 0x81C00000 // 28 MB is default top of RAM for auto-detect,这里规定Windows CE.NET内核检测内存的开始地址,默认从28M Byte开始。
#define CEPC_EXTRA_RAM_SIZE 0x02400000 // Potentially add another 36 MB 这里规定了内核中探测内存容量的最大尺寸,0x02400000 ,表示最大探测36M,这样的话,28MB+36MB正好是64MB。
我们需要支持256MB内存,只需要修改CEPC_EXTRA_RAM_SIZE即可,将其改修改:
#define CEPC_EXTRA_RAM_SIZE 0x02400000+0x0C000000 // Potentially add another 36 + 128 + 64MB
修改为上述两个文件后,需要重新编译系统内核,打开PB4.0,打开Build->Open Build Release Directory,进入一个DOS操作界面,然后进入D:/Wince/Public/Common/Oak/Csp/I486/目录下,执行“Build –cfs”,重新编译内核,然后重新建立一个新的Platform,编译后即可。