嵌入式爱好者

查看: 11571|回复: 6

有关wince6.0分区驱动flashpart.dll的问题

[复制链接]

5

主题

6

帖子

69

积分

扫一扫,手机访问本帖
发表于 2012-12-5 15:52:23 | 显示全部楼层 |阅读模式
本帖最后由 mu163163 于 2012-12-11 11:52 编辑

(板子是OK6410A,256MB DDR,2GB NAND FLASH)
       最近看了wince的nandflash驱动,采用的是MDD+PDD+FMD的架构,分区驱动是flashpart.dll,在网上查了好久,发现flashpart.dll是无法识别由mspart创建的MBR的。在eboot中采用的是mspart的函数来创建分区,实际上在nandflash上有三个分区:boot分区(这个在内核中略过),binfs分区(存储NK.bin),FAT32分区(用于永久存储用户数据以及应用程序)。
       既然flashpart.dll无法识别MBR的分区表,那它是如何识别nandflash上的分区的?实际上是无法识别的,只是flashpart分区驱动却能跳过binfs分区前的区域,把后面的nandflash空间当成是一个分区挂载在根目录的nandflash目录下。系统起来后去查看这个分区的类型,会发现是0x07(MSIFS),而不是0x0B(FATFS),大小是516224个扇区(我的nandflash总共有524288个扇区);如果对这个分区进行分区操作(即把它分成两个或更多),是无法成功的。
       我的问题是:这个过程是怎么实现的(即跳过binfs前面的区域,把后面的空间格式化成一个分区),因为微软没有公开flashpart的源码,不知道分区驱动的工作过程是怎样的,如果我要把后面的区域再分区,或者是扩大binfs分区的容量,需要修改哪些地方?
       希望能尽快得到回答,有哪位大神研究过的也希望能给予指导,小弟无比感谢!:handshake
该会员没有填写今日想说内容.
回复

使用道具 举报

5

主题

6

帖子

69

积分

 楼主| 发表于 2012-12-11 11:51:34 | 显示全部楼层
本帖最后由 mu163163 于 2012-12-11 12:04 编辑

      又到了自己回答自己问题的时间了:lol
      通过这几天的努力,不断在内核中打印出信息,发现了一种可行的方法,跟大家说说吧。
      首先,要在eboot阶段创建flashpart.dll可以识别的分区表,我只在一个英文论坛(好像是论坛,不太清楚,当时没怎么留意)上看到过一种别人介绍的方法,他是说wince7里已经有了eboot代码的新架构,新架构里采用的是新的分区方法,也就是说你可以去移植这个架构的eboot分区代码,然后创建你要的分区表。这种方法我没有去实现过,有意愿的人可以去试一试,这是一种思路吧,我觉得。
     下面来说说我的另一种方法。上面已经说了,flashpart.dll无法识别mspart.dll创建的MBR格式的分区表,但是我在内核打印信息里发现了一件事,就是内核第一次启动的时候会去查分区表,查不到的话,会收集nand flash的block情况,然后根据block的情况以及注册表里的对应的信息对nand flash进行格式化以及分区,下次启动的时候就可以找的到分区表了。其中,有两种block内核是不会去使用它们的,一种是bad block,另一种就是reserved block。
      所以说,你如果想内核不去使用某一些block,那你可以选择把它们标记成上面的两种类型的block;如果你想把后面的区域分多个分区的话,可以在内核启动起来后,在存储管理器里进行分区。不过,这种办法并不能挂载binfs分区,不过至少可以使用剩下来的nand flash了。至于怎么去设置这些标记,我就不透露了,自己可以琢磨一下。
      不过也有一个问题我没搞懂,就是我保留了一部分的block,剩下的被格式化成一个分区,可是分区大小却不对,它的扇区数总是会比我(总的扇区数 - 保留的扇区数)多,这令我很是纳闷,如果有哪位知道原因的,请你告诉我,那将解我心头一大疑惑。
      发现我发帖问的问题都没什么人回答,不知道是大家不太看帖还是不知道答案,还是希望大家能互相帮助,共同进步!:lol
      以上都是个人见解,有不对之处,希望大家指正。
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

lgytc214 该用户已被删除
发表于 2013-4-9 15:04:41 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

lgytc214 该用户已被删除
发表于 2013-4-10 14:32:56 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

lgytc214 该用户已被删除
发表于 2013-4-11 17:08:57 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

5

主题

6

帖子

69

积分

 楼主| 发表于 2013-7-14 13:57:26 | 显示全部楼层
lgytc214 发表于 2013-4-11 17:08
看来与上面的仁兄一样了,自问自答了~
问题解决了,我来总结下,首先这里有个很重要的概念没搞清楚,就是关 ...

兄弟还在继续努力么,隔段时间没上论坛,就被扣积分到负了,结果连自己的帖子都看不了,自然也看不到你的问题跟回复了,表示歉意哈。现在终于可以看到了,泪奔啊,不过许久没看这些东西了,现在也忘了咯,之后可能不常来论坛了,大家努力!!!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋| 飞凌嵌入式 ( 冀ICP备12004394号-1 )

GMT+8, 2024-11-23 10:18

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表