当前位置:首页 > 嵌入式 > 嵌入式软件
[导读]Windows CE操作系统存在启动速度慢的现象。为此在解析系统镜像文件和研究镜像文件下载函数的基础上,设计了一种在Windows CE系统Bootloader中实现Multi-bin的方法。通过调用Bootloader中的BootPart支持库的接口函数,借助BinFS文件系统,从而减少了系统的启动时延,增加了用户的可用内存,降低了客户的等待时间,最终达到提高客户用户体验(QoE)的目的。

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所示。


在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,即“B000FFx0A”,这是判断镜像文件是.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_MACHINESystemStorageManagerProfiles
NANDFLASH]
"DefaultFileSystem"="BINFS"
"PartitionDriver"="mspart.dll"
"MountHidden"=dword:1
"MountAsROM"=dword:1
"Folder"="NandFlash"
"Name"= "FLASH Disk Block Device"
[HKEY_LOCAL_MACHINESystemStorageManagerBinFS]
"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)的开发也具有一定的参考价值。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

好用、高效的多合一传感器开发工具,支持给新一代高科技 MEMS 传感器产品开发应用软件

关键字: 传感器 Windows MacOS

双系统将是下述内容的主要介绍对象,通过这篇文章,小编希望大家可以对双系统的相关情况以及信息有所认识和了解,详细内容如下。

关键字: 双系统 Windows Linux

今天,小编将在这篇文章中为大家带来Windows 11系统的有关报道,通过阅读这篇文章,大家可以对Windows 11系统具备清晰的认识,主要内容如下。

关键字: Windows 操作系统

(全球TMT2023年9月8日讯)亚马逊云科技日前在一年一度的存储服务创新日上宣布推出诸多亚马逊云科技存储服务的新功能,其中重点包括为支持人工智能/机器学习、大数据分析等数据密集型工作负载进一步提升Amazon Ela...

关键字: 亚马逊 FOR IC Windows

此芯科技自去年加入Linaro Windows on Arm工作组之后,发起成立了Client PC合作项目,旨在推动基于UEFI + ACPI标准的Arm PC启动架构标准化,通过统一的系统固件支持Windows和Li...

关键字: Arm PC生态 Windows Linux操作系统

北京2023年3月13日 /美通社/ -- 近日,亚马逊云科技宣布针对其广泛的存储服务推出诸多可帮助客户进一步优化成本的新功能,功能更新涵盖Amazon Simple Storage Service(Amazo...

关键字: 亚马逊 STORAGE LM Windows

量子计算领域的新里程碑,来了! 谷歌科学家证明,通过增加量子比特的数量,就能降低量子计算的错误率。

关键字: 谷歌 Android Windows

QVM人工智能引擎是Qihoo Support Vector Machine(奇虎支持向量机)的缩写。是360完全自主研发的第三代引擎(具有中国的自主知识产权的引擎)。

关键字: 微软 Windows 系统

据业内信息报道,近日微软公司正式结束了对于Windows7操作系统的付费外延扩展支持,未来也不再为Windows7提供安全更新。

关键字: 微软 Windows 操作系统

开源开放的RISC-V已经成为仅次于ARM、x86的第三大CPU指令集,也受到了各大芯片厂商的重视,然而要想进入主流市场,还需要一些突破,其中谷歌安卓系统的支持至关重要,好消息是谷歌已经表态支持RSIC-V架构,并且重视...

关键字: 谷歌 Android Windows
关闭
关闭