"); //-->
这段时间基本上是泡在wince6.0+s3c6410上,这也是我第一次做wince6的开发,以前对wince也只是了解,ce5.0以前给我的感觉就是这个系统设计的非常奇怪,而且UGLY!但wince6.0做了全新设计,微软终于做了个不ugly的ce了。
这段时间主要精力花在FAT文件系统上,遇到的第一个问题是,在ce6上FAT文件系统已经升级为 exFAT,其动态链接库也从fatfsd.dll改为exfat.dll,这让我浪费了5天时间,从网上5.0的各种技术帖子,包括微软ce6.0的help中全是在说如何如何在注册表中指定dll=fatfsd.dll,结果导致每次挂在我的Nand flash的时候失败,unable to mount partition。debug了几天,把nand flash的驱动以及微软ce关于存储管理这块的文章看了一遍又一遍,均未找到原因,最后还是我灵感来了,鬼使神差的想到去检查生成的文件中有没有fatfsd.dll,结果果然没有这个文件,只看到个exfat.dll文件。但是wince6的帮助中没有提到任何这方面的说明,显然ce6的文档微软基本上直接抄wince5的,很多都没有更新。最后我把dll换成exfat.dll,果然问题解决。
遇到的第2个问题是,我用eboot把1GB的nand flash分成两个分区,一个BINFS放image,一个FATFS放用户数据。eboot启动wince后,在控制面板的存储管理器里能看到两个分区:part00,part01,大小,文件系统信息等等均正确。然而它不会被系统在启动的时候自动挂载。看了很多文章,基本上就是说注册表不对,automount,autoformat这些的设置。我尝试了所有的可能性,均不能成功,每次我都要在控制面板的存储管理器里,手工先format分区,才可以mount。下次重新启动又需要重复上述过程。为了解决这个问题,我仔细分析了下eboot的代码和FAL,FMD驱动以及mspart分区驱动代码。发现一个问题,eboot在分区的时候,所有的操作都是针对物理flash的,即它会把MBR写到第一个可用的Flash物理块上,然而wince下面的mspart以及fsdmgr等都是基于FAL提供的虚拟的(逻辑的)block设备上,我看mspart每次都把MBR的位置定位在第一个逻辑块上,而第一个逻辑块经过FAL的映射,并不一定是在第一个可用的物理块上,它的wear-level机制会随机的把任何一个逻辑块映射到随机的一个物理块上,我的疑问就是既然如此,eboot分区的信息,wince怎么能看到?但看上去它确实看到了,但是既然看到了,却又不能自动加载。如果根据我分析的代码来看,eboot写的MBR,wince应该是不会看到的,因为对于wince来说它认为MBR在逻辑块0上,而逻辑块0对应的物理块是随机的。
但是网上很多人宣称在 wince5 上就用eboot分区,wince可以认识,并且一切正常,而且用eboot分区似乎已经是标准的做法了。那么根据我分析的代码来看,这是不可能的,所以我怀疑微软在wince6 上已经偷偷的改掉了太多东西,而没有说明。
如果有高手知道这是怎么回事,非常欢迎给予指点,非常感谢!
第3个问题是activesync,昨天同事一直没能把它用起来,今天我搞了下,发现也是无法连接,后来找到原因,在wince6的控制面板的网络连接与拨号连接中新建的连接,在pc connect设置的时候,选择的连接名称一定要与注册表中[HKEY_CURRENT_USER\ControlPanel\Comm]下的Cnct指定的值一致。
还有其他的问题,主要还是FAT文件系统的问题,这几天是把这块代码看了一半,本来想写个文章来分析FAL和MSPART+FSDMGR的,但没那么多时间了。
微软在ce6中提供的另外一种新的MDD+PDD+FMD的文件系统架构,工作的挺好,我相当怀疑微软在开发了这种新的架构后,就把老的FAL+FMD的结构给丢了,虽然文档中还在宣称支持老的架构,但实际上里面很多东西都没有经过测试,问题多多了。
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。