WinCE的快速启动

PXA270上的双启动功能已经实现了,但又引入了一个新问题,WinCE的启动太慢,大概需要2分钟!这显然是不能忍受的。通过两天的努力,现在已经缩短到20秒,虽然还是有点长,但已改善不少了。先整理一下,免得忘了,有时间再做优化。

      WinCE启动慢的主要原因是从NAND FLASH中加载NK到内存特别慢,这几乎占了99%的时间,而加载完NK后的启动其实是挺快的。所以要缩短启动时间,可以通过缩小NK来实现,因为NAND FLASH的读写速度是一定的,没有太大的改善空间。

      WinCE中提供了Multi-BIN的功能,它将整个内核映像分成几部分,在WinCE启动时可只加载核心部分,这样就能有效提高WinCE的启动速度。

      要实现Multi-BIN,必须做两部分的修改,一是EBOOT,另外一个是映像。下面就简要说一下这两部分实现时的要点和注意点。

EBOOT中需要支持BINFS,这在先前做双启动时已经留好了路,没什么问题。

EBOOT中需要支持Multi-BIN的下载和烧写,这一部分可参考帮助文档的相关部分。

映像的修改,首先是bib文件,配置各部分的大小,并设定NK.bin中包含的文件,需要注意的是FLASH的驱动(nandflash.dll)必须包涵在NK.bin中。在定制系统时,需要添加BINFSFATFSROMONLYFSHIVE-BASEED的注册表。修改NANDFLASH的注册表配置,使其在BOOTPHASE 0加载。整个过程,代码的修改比较少,除了EBOOT中需要修改一些代码外,映像只需修改几个配置文件。

需要注意的是调试Multi-BIN的映像最好不要用Debug的方式编译下载,否则会出现一堆可怕的打印信息,摘录如下:

0x83d16000: BINFS: InitVolume - Signature of ROM Header does not Match- Assuming Chain Region

0x83d16000: FLASHDRV.DLL:L2P_GetPhysicalSectorAddr() - Secondary table doesn't exist for logical sector 0x11689!!!

等这些打印信息完成,得要好几分钟。用Release的方式编译则不会有这个问题。Debug模式下,为什么会出现这些,还不清楚,有时间再看吧。

贴两张效果图,实现MULTI-BIN前后SDRAM的大小比较。


这是采用MULTI-BIN时,SDRAM的大小,60M Bytes


没有采用MULTI-BIN时,只有35M Bytes

这两幅图表明,MULTI-BIN除了能提高WinCE启动的速度,还能增加WinCE的可用内存。这是MULTI-BIN的另外一个重要作用。

除了MULTI-BIN能提高WinCE的启动速度外,优化启动时驱动的加载也能提高WinCE的启动速度。一般情况下,驱动的加载都很快,可以不予考虑。但在驱动加载很费时间时,如果通过异步的方式加载驱动,那将给用户带来极速体验,5秒钟进入WinCE界面!

、、============在CSDN里发贴问到的======================

30m的话你的NK是中文的吧? 
如果是中文的添加Agfa AC3 Font Compression\GB18030 Dta Converter\simsun&nsimsun(subset 2_50) 
这样大概可以小10M左右 
另外你的BSP都调试确定没有问题之后,生产的时候可以将那些串口打印信息都屏蔽掉,还会省一点时间。

增加字体压缩组件,如LS所说是一个可行的方法

如果CPU速度低于300MHZ,Agfa AC3 Font Compression最好不要选,这样仍然可以比默认的减小7M左右



你的意思是不用设置下面的这个菜单了? 

要设置,只是上边选组件的时候选的字体比PB默认选的中文字体小,并且Agfa AC3 Font Compression是压缩字库的。 
我目前16M

相应的Boot程序也得跟着改,如果NK是10M,Boot上电只读10M。这样开机Boot读NK到内存速度快,NK启动速度也快。可以控制在10秒内

可以修改下启动文件,在NANDFLASH中存放nk.bin,在copy时将nk.bin释放到ram中,这样的话会快点。

IE浏览器也有几兆,还有那些JSCRIPT,去掉一些组件,目前我的压缩到18M了 
如果用XIP会不会速度快点,或者调试注册表的信息。具体的我也不清楚,但是我想内核大和启动速度应该不是完全对应的吧!

调试信息,设备管理器加载驱动的多少等,也影响启动速度。所以注册表和BSP都要瘦身!

从NANDFLAG拷贝到SDRAM的时候很慢,要大概15S,运行的时候不慢。 
所以问大家如何把WINCE剪小。 
另外我重新编译的时候,发现NK.NB0并没有变小,字节长度一样,但NK.BIN却小很多了, 

补充下(未测试): 
================================================== 
下载NK.NB0的时候,先清空SDRAMD的内润NB0后面的NULL数据都不下了,然后直接运行。 
====================================================== 
如何在不删除必要组件的前提下减小内核文件长度? 
1是自定义组件 
2是压缩字库。 
首先,NK.BIN中的内容是被压缩过的,NK.NB0中的内容是没有压缩的。 
两者大小的区别是因为在生成过程中BIN会将你设定的后面的NULL自动去掉,而NB0就不会。 
NB0的大小就是第三个变量ROMSIZE所设置的大小。 
由于nk.nb0是非压缩的数据,里面的数据就是NK展开以后在内存里面的数据。 
而nk.bin是有压缩的数据,里面的数据是压缩以后类似于成块形的数据,被loader拷贝到内存以后没有区别。 
由于bin文件需要解压,因而其下载方式也不一样, 
通常,通过串口直接下载用nb0,pb下载用bin。


其次,nk.nb0是可以直接烧到FLASH/ROM中的,是代码镜像,可以直接跳转到其入口执行。 
而nk.bin是Microsoft binary image格式的文件,必须按其格式定义解开到其指定的地址空间的位置才能执行。
75、如何在不删除必要组件的前提下减小内核文件长度?   
   要减小内核文件长度首先要在使用PB的定制内核向导中选择自定义,也就是说对于每个组件都由自己来选择,而不是选择PB的标准配置。但减小内核文件长度最有效最直接的办法是缩小字体,尤其对于东亚字体,采用字体压缩技术并且选择合理的字库文件将明显缩小文件长度。   
1)、在定制内核时选择AGFA AC3 Font Compression组件。SYSGEN变量为SYSGEN_AGFA_FONT。   
2)、参考标题为“East Asian Font Versions”的帮助文档,从中选择你需要的字库文件加到内核中,从文档可以看出加AC3压缩比不加压缩在文件长度方面差距很大。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值