深入浅出Wince的存储机制

来源:互联网 发布:大学生网络购物2016 编辑:程序博客网 时间:2024/05/23 00:03

转载请注明出处

作者:小马


刚学wince那会,对它的文件存储老是理解不了. 最近公司在做一个wince下的终端移植项目,中间也遇到了一些存储方面的问题,随着学习慢慢深入, 有了一些自己的理解.

 

wince的设备,一般有下面几种物理存储设备:
nand flash

nor flash

SDRAM

另外还有诸如SD卡, u 盘等一些不常用的外部存储.

 

nand flash你可以把它理解为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里.


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的物理内存, 这是由系统本身的内存映射机制决定的.