http://blog.csdn.net/pony_maggie/article/details/5270428
转载请注明出处
作者:小马
刚学wince那会,对它的文件存储老是理解不了. 最近公司在做一个wince下的终端移植项目,中间也遇到了一些存储方面的问题,随着学习慢慢深入, 有了一些自己的理解.
基于wince的设备,一般有下面几种物理存储设备:
nand flash
nor flash
SDRAM
另外还有诸如SD卡, u 盘等一些不常用的外部存储.
nand flash在wince下应用时, 你可以把它理解为PC上的硬盘, 我们看一下PC的硬盘里放了什么. 首先是你的操作系统文件占据了C盘的一部分空间, C盘剩下的空间以及其它盘的空间就是你可以自由访问的.
nand flash在基于wince的开发板上一般被分为三个部分, 首先是一个叫boot loader的东东,它的映像文件占了nand flash的第一部分, 然后是你的wince的映像文件, 一般都有30M左右. 相当于PC机上安装完操作系统占的空间, 最后剩下的部分的格式化后你可以拿来任意使用. Boot loader 主要做两件事,一是初始化一些硬件资源(比如cache), 二是加载wince系统运行. 你可能要说,nand flash与电脑硬盘的区别就是它多了一个boot loader. 其实这样说不完全对,电脑其实也有一个bootloader, 它的名字叫BIOS. 只不过BIOS不是放在硬盘里,而是固化在主板上的只读ROM里.
Nand flash最后剩下的这部分这间怎么用呢,wince启动后,打开”我的设备”是看不到这部分空间的,需要你到”存储器管理器”(在控制面板里)去格式化一下,然后新建一个分区. 这之后即使你冷启动系统,它也是可见的.
wince最大可以支持多大的nand flash呢? 一般情况下,bootloader也就是几百K, wince系统映像几十M, 我们当然是希望nand flash越大越好, 这样我们能任意支配的空间就大了. 先来看一下PC上最大可以支持多大的硬盘容量. 目前市场上已出了T数量级的硬盘, 你的电脑能支持的硬盘容量是什么决定呢. 是主板,再具体点,是BIOS,如果你的主板支持48 bit LBA(寻址), 则硬盘最大可以是2的48次方.
市场上的nand flash 芯片硬件接口无非包括控制引脚,数据引脚夫,电源和地引脚. 然后数据口和地址是复用的. 下面是K9F1208U0B的引脚图,可以很清楚的看到上面几部分
是了,只要能和CPU在硬件上接口匹配,然后bootloader里驱动做相应改动,就可以支持市场上最大的nand flash, 目前市场上最大的nand flash容量我不是很清楚,但06年三星就已经推出了32G的nand flash, 所以现在最大的容量起码也得大过这个数.
再说说wince系统的内存分配.
一般买一块基于wince的开发板,如果厂家说这个板子的内存是64M, 一般是说SDRAM有64M, wince的内存就是指这个SDRAM.Wince 下的内存实际上是分为两个部分的. 即对象存储和程序内存.也即:
Wince内存 = 对象存储 + 程序内存.
拿64M的这个板子举例. 开发板上电, 进入控制面板—系统,左边是对象存储,右边是程序内存.
对象存储是wince里一个新的概念. 嵌入式wince操作系统一般是用在消费电子上面, 比如pocket pc, 手机, PDA等移动设备上. 这一类的设备一般都是有两个电源的, 一个是主电源(比如你的手机电池), 一个是后备电池(拆开手机,电路板上可以找到那个小电池). 后备电池的作用就是在主电源没电的情况下,维持操作系统的一些需要保存的数据, 比如注册表, 数据库等. 而这些要保存的数据就是放在对象存储里的,可以做个测试, 复制一个文件到wince的windows目录下, 你会发现对象存储占用空间变大。讲到对象存储就不能不说文件系统的概念.
wince 的文件系统分为两种,一种是内建的文件系统, 如RAM文件系统和ROM文件系统. 一种是可安装的文件系统, 如FAT文件系统. 内建的文件系统是放在对象存储里的,对象存储从物理角度来讲就是一个RAM,但从应用角度看其实是个硬盘. 除了内建的文件系统外,它还包括注册表和数据库. 最大支持256M的大小. 对象存储的存在, 面向用户隐藏了ROM文件系统和RAM文件系统的差异, 对用户来讲,都可以访问,只不过ROM里的文件是只读的. 从另一个角度也就是说,这些文件没有必要在物量上驻留在对象存储里.而可安装的外部文件系统存在的意义是提供对外部存储设备的访问,典型的比如nand flash和SD卡等.
很多人在网上问过一个问题:如何修改对象存储和程序内存的大小比例关系?
对象存储和程序内存的大小修改就比较人性化了, 打开控制面板-存储器管理器,可以看到一个滑块,左右移动它就可以改变它们的比例. 但是有一点要注意,这个设置是不会被保存的, 系统冷启动后还是会恢复默认设置的(一般是各占一半). 那怎么办呢?有办法, 如果你在配置系统时就知道这两部分内存所要占的比例,可以在config.bib里加上下面的语句
FSRAMPERCENT = 0Xxxxxxxxx
这个值可以改变默认设置.
最后一个问题, wince最大支持多大的物理内存, 也就是SDRAM最大可以是多少. 在硬件条件允许的情况下,wince的内核(最新版本5.0)只能管理最大512M的物理内存, 这是由系统本身的内存映射机制决定的.
就说这么多吧,有不对的地方请指出.