首页 > 嵌入式软件 > WinCE

Windows CE是微软推出的一款32位的嵌入式操作系统。它具有良好的多媒体功能和友好的人机交互界面,支持PowerPC、X86、ARM和MIPS等多个系列处理器的体系结构,并为所支持的处理器提供完善的系统库[1]。它还提供了完善的设备驱动程序和软件开发包,大大缩短了开发周期,节约了电子智能产品的上市时间。在这些产品开发过程中,系统启动时间的时延是影响客户体验(QoE)的重要因素。启动速度受很多因素的影响,包括定制系统镜像文件的大小、系统内核加载驱动的多少、内存占用的大小等。为了减少系统启动时延,目前比较流行的做法是在Bootloader中添加LOGO启动画面,从而在视觉上降低客户的时延感受[2]。从本质上讲,这种方法并没有从根本上减少系统的启动时延,仅仅是从视觉的角度转移了客户的注意力。

本文在分析Windows CE 6.0系统启动过程的基础上,设计了一种在Bootloader中实现BinFS文件系统进而完成Multi-bin加载的方法,从而真正达到缩短启动时间的效果,同时还为用户节省了大量的内存空间。实验结果表明,该方法性能稳定,可移植性强,并已经应用到一款基于Samsung 2440处理器的IPTV手持式测试仪系统上。

1 Windows CE系统启动过程

Windows CE系统启动过程如图1所示。

本文引用地址: http://embed.21ic.com/software/wince/201806/64070.html


在Windows CE操作系统中,当基于Windows CE的目标设备上电启动或者复位时,系统首先加载并运行Bootloader程序,Bootloader程序进行必要的硬件初始化,然后通过Bootloader再加载并启动操作系统内核映像。启动操作系统内核的过程实际上就是加载并运行OAL(OEM Adaptation Layer)程序的过程。OAL是Windows CE操作系统内核的重要组成部分,OAL并不能被单独加载并运行,它最终被编译进操作系统内核,从而通过操作系统内核存在并发挥作用,操作系统的启动过程就是一个加载并运行OAL程序的过程[3]。

系统从启动加载内核映像文件到最后的显示桌面会有一段时间,这个时间段就是通常所说的启动时延。通常情况下为10 s~13 s。为了缩短这段时延,可以将系统映像分为多块,将系统核心启动部分的内容放到内存中,其他部分放到固态存储器(如Nand Flash)中,使用BINFS文件系统读出。即在系统启动过程中,先加载操作系统内核映像的核心部分,而操作系统内核映像的其他部分仍然驻留在Nand Flash中,需要时再从Nand Flash中进行加载,从而大大减少开机读取系统的时间。同时,也不再需要为操作系统预留全尺寸的内存空间,而只需预留最小开机核心部分的内存空间,剩下的作为通用内存空间。这样就使得操作系统内存的使用有了很大灵活性,同时可用系统内存大大增加。从而,在根本上达到了按需加载系统模块到内存的要求。这就是所谓的Multi-bin技术。

2 Windows CE .bin镜像文件解析与下载

由Windows CE的开发工具Platform Build编译生成的Windows CE操作系统及Bootloader的镜像文件主要有两种格式类型:以.bin为文件名后缀的记录型镜像文件和以.nb0为后缀的原始型(raw)镜像文件。前者以记录(Record)为单位组织镜像的数据,后者则是镜像在嵌入式系统中运行时的二进制数据快照。其中,.bin文件是一个描述性质的镜像文件,它由文件头(Head)、镜像数据目的起始地址(ImageStart)、镜像数据长度(ImageLength)和多条相对独立的记录(Record)构成。本文以实现Multi-bin的操作系统xip.bin为例进行分析,使用UltraEdit将其打开,如图2所示。

从图2可以看出,文件头(head)由7个字节组成,内容是:42 30 30 30 46 46 0A,即“B000FF\x0A”,这是判断镜像文件是.bin类型的依据。镜像数据目的起始地址(ImageStart,00 00 07 80)由4个字节组成,它定义了镜像文件解析后装载在内存中的起始地址是0x80070000。镜像数据长度(ImageLength,68 07 13 02)也由4个字节组成,它表示.bin镜像文件解析后在内存中占用的总的存储空间大小为(0x02130768)。每条记录(Record)由4字节的起始存储地址(RecordStart)、4字节的数据长度(RecordLength)、4字节的校验码(RecordCheckSum)和RecordLength个字节的记录数据(RecordData)组成。以第一条记录(阴影部分)为例,分别为0x80070040、0x00000008、0x000001E3和0X8007004C434543454。

由以上.bin的文件格式可知,.bin文件不是内存程序空间的一个简单的拷贝,所以它不能直接用串口烧写进内存或FLASH空间来直接运行,必须通过EBOOT按照.bin文件的格式解析出来具体的内容重新装载后才能运行[4]。对于xip.bin的下载流程如图3所示。

3 BinFS的实现

3.1 BinFS简介

二进制ROM映像文件系统(BinFS)是一个读取由romimage.exe产生的二进制映像(.bin)文件格式的文件系统。BinFS可以分析每个区域(Region)中的.bin文件记录,这些.bin文件记录,最终用户是无法看见的。.bin文件以特定的片段(Section)组织数据,每个片段包含一个片段头,片段头定义了这个片段的起始地址、片段长度及校验和。Romimage.exe将以逻辑片段组织的数据写到.bin文件中。

本文所采用的硬件平台使用Samsung K9F1208U0B 64 MB的DDR SDRAM作为程序运行的内存,使用K9F-
1208UOM的64 MB Nand Flash作为保存Windows CE操作系统映像的存储器。由于使用的是64 MB的Nand Flash存储器,而最终的Release(发布版)Windows CE操作系统映像的大小在32 MB左右[5],因此,如果将整个Flash存储器只用来存储操作系统映像文件,将无疑是一种巨大的浪费。一种经济、合理的做法是将整个Flash分为两部分,一部分是BinFS文件系统,用于保存Windows CE操作系统的多个映像文件(支持Multi-bin);另一部分为FAT文件系统,用于保存其他用户文件。采用这种方法,操作系统裁剪的越小,留给用户的存储空间就越大[6]。这一方案的实现需要BinFS文件系统的支撑。

3.2 BinFS的实现

Bootloader管理着目标设备初始化、下载运行时映像和引导运行时映像的启动过程。在操作系统开发过程中,使用Bootloader可以快速地将一个运行时映像下载到目标设备,节约开发时间。如果Bootloader支持BinFS,则这个Bootloader是可以分区和格式化的,并且它可以把数据写进存储设备。

为了实现这个分区,Bootloader使用bootpart.lib静态库函数产生一个BinFS分区和一个外部扩展分区。Bootpart支持库将FMD的代码从Bootloader中抽象出来,在进行分区时,完成对Flash的低级格式化。也可以通过指定字节的偏移完成对分区指定长度的读或写。

4 Multi-bin的实现

Multi-bin是把内核映像分为“最小内核”(xipkernel.bin)与“系统其他文件”(本文中的nk.bin)。在系统启动时加载的是BinFS分区上的xipkernel部分,它位于xip.bin的起始位置。

4.1 修改Config.bib file的内存段

添加XIPKERNEL区域并且将它的存储属性设置为RAMIMAGE。XIPKERNEL是一个并不存储NK的文件,这里可以将其看成最小系统。设置NK区域的存储属性为NANDIMAGE,这将会阻止NK地址空间被分配为RAM地址。CHAIN是实现Multi-bin的必须部分,其作用是通知系统各bin文件的位置。

当加载带有BinFS的映像时,Nand Flash设备上的Windows CE kernel(内核)重定位到RAM区域,当系统访问该区域时,BinFS负责访问Nand Flash设备上相对应的位置,并返回数据给系统。实际就是在Nand Flash设备上面实现了XIP(execute In place)的功能。

XIPKERNEL文件至少要包括下面的模块:

Nk.exe;Kernel.dll;Coredll.dll;K.coredll.dll;Oalioctl.dll;
Filesys.dll;Fsdmgr.dll;Mspart.dll
Romfsd.dll;Binfs.dll;Default.fdf or boot.hv(here choose
boot.hv);Fpcrt.dll (ARM-only)
Ceddk.dll (if required by your flash driver);Smflash.dll
(your flash driver)

将上述模块添加进Config.bib中的Moudle段,加入方法如下:

MODULES
nk.exe$(_FLATRELEASEDIR)\oal.exe
XIPKERNELSHZ
kernel.dll$(_FLATRELEASEDIR)\kern.dll
XIPKERNELSHZ
……

4.2 修改Config.bib file的配置段部分

在Config.bib文件中的CONFIG下指定RAM_AUTOSIZE=OFF,ROM_AUTOSIZE=OFF,同时标识出CHAIN区域起始地址XIPSCHAIN的值。这个值要和MEMORY 段指定的值相匹配。

4.3 在注册表设置中添加相应的注册表键值

在本文中,XIP.bin映像文件被存放到Nand Flash存储设备上,为了让其支持BinFS文件系统,需要在注册表中的;HIVE BOOT SECTION和;END HIVE BOOT SECTION两条语句之间加入键值。

下面给出Nand Flash存储设备在注册表中的键值,其作用是将BinFS设定为默认的文件系统。

[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\
NANDFLASH]
"DefaultFileSystem"="BINFS"
"PartitionDriver"="mspart.dll"
"MountHidden"=dword:1
"MountAsROM"=dword:1
"Folder"="NandFlash"
"Name"= "FLASH Disk Block Device"
[HKEY_LOCAL_MACHINE\System\StorageManager\BinFS]
"FriendlyName"="BIN Filesystem"
"Dll"="binfs.dll"
"Paging"=dword:1

4.4 生成与调试

生成系统映像文件,如图4所示。

选择xip.bin文件并用EBOOT将其下载到硬件平台中,启动系统。经过测试,系统的启动时延缩短到8 s左右。打开“我的设备”,双击控制面板中的系统属性,可以看见系统的可用内存增大为61 020 KB。

本文提出一种普遍适用于Windows CE 6.0操作系统的Multi-bin技术。该技术的实现具有一定的通用性,不仅在Windows CE 6.0操作系统下实现了减少开机启动时延,而且节省了可观的内存空间,提高了用户质量体验(QoS)。基于本文提出的原理和方法对使用Windows CE操作系统的同类硬件平台(如ARM9、ARM11)的开发也具有一定的参考价值。

换一批

延伸阅读

[疯狂史] 大学学了四年电子出来啥都干不成,原因难道都在我自己吗?

大学学了四年电子出来啥都干不成,原因难道都在我自己吗?

随着嵌入式EDA电子技术的飞速发展和应用领域的延伸扩张,仅仅在30多年前尚未曾有过的大量学科纷纷出现在高等教育的课程设置中。......

关键字:大学 嵌入式 EDA

[新鲜事] 杨利伟首次对太空中发出的诡异敲击声进行回应

杨利伟首次对太空中发出的诡异敲击声进行回应

近日,在自述中杨利伟透露,“飞天”其实一点也不好玩,可以说是身、心、灵的巨大煎熬,身:除了身体遭受的极限挑战,还要忍受孤独,寂寞,恐惧,还有各种不可知的诡异事件——没错,真的有诡异事件,比如有敲击飞船的声音。......

关键字:杨利伟 太空 诡异事件

[新鲜事] 世界卫生组织将“游戏成瘾”列入精神疾病,任天堂索尼激烈反对...

世界卫生组织将“游戏成瘾”列入精神疾病,任天堂索尼激烈反对...

北京时间6月20日早间消息,美国娱乐软件协会(ESA)就世界卫生组织将“游戏成瘾”列入精神疾病的做法提出激烈批评,认为他们列举的证据不够充分,而且可能引发误诊。ESA呼吁世界卫生组织在将游戏成瘾正式列入......

关键字:游戏 任天堂 索尼

[真心话] 性格决定命运,程序员亦莫能外

性格决定命运,程序员亦莫能外

性格影响机缘有无,影响才情发挥,影响努力深浅,最终影响人生之结局,是人这一生里可以把握,又往往被忽视的因素。......

关键字:性格 程序员

[真心话] 神吐槽:高级硬件工程师需不需要懂基本电路?

神吐槽:高级硬件工程师需不需要懂基本电路?

那么请大家说说, 高级硬件工程师需不需要懂三极管电路? 难道拿着参考设计照猫画虎, 了解一些行情, 熟悉一些方案公司(出了事找方案公司来解决), 就算高工了?......

关键字:高级硬件工程师 基本电路
条评论

我 要 评 论

网友评论

大家都爱看

  • 扇出型晶圆级封装的优势和挑战!

    我们有能力创造一些能保持前代性能并且更好更小的电子设备,例如今天的可穿戴设备、智能手机或平板电脑,这是由于很多因素超过摩尔定律而快速发展,从而能够从底层的嵌入组件发展到今天把它们封…

    2018-03-29
  • Xilinx推出革命性的新型自适应计算产品

    自适应和智能计算的全球领先企业赛灵思公司(Xilinx, Inc.,(NASDAQ:XLNX)),近日宣布推出一款超越FPGA功能的突破性新型产品,名为ACAP(Adaptive Compute Acceleration Platform,自适应计算加速…

    2018-03-20
  • 赛普拉斯为树莓派3 B+ IoT单板计算机提供强大稳定的无

    先进嵌入式系统解决方案的领导者赛普拉斯(纳斯达克代码:CY)近日宣布其Wi-Fi®和蓝牙®combo解决方案为全新的树莓派 3 B+(Raspberry Pi 3Model B+)IoT单板计算机提供强大稳定的无线连接…

    2018-03-20
  • 观看直播领红包,SEED-A10加速卡助力人工智能

    随着云服务器、云计算的发展,大家对硬件加速的需求越来越多,但是随着设备功耗的上升、性能需求越来越高,常规加速设备以及开始不能满足需求,因此FPGA逐渐在硬件加速中找到了自己的位置,而艾…

    2018-03-19
  • 特朗普:博通不得以任何形式收购高通

    白宫周一(3月12日)晚发出声明,川普(特朗普)总统出于“国家安全”考量、禁止新加坡博通公司(Broadcom)收购美国高通公司(Qualcomm)。

    2018-03-14