Chinaunix首页 | 论坛 | 博客
  • 博客访问: 182856
  • 博文数量: 512
  • 博客积分: 23560
  • 博客等级: 上将
  • 技术积分: 5700
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-17 23:19
文章分类

全部博文(512)

文章存档

2010年(512)

我的朋友
最近访客

分类:

2010-10-12 00:19:02

  应该说bootpart算是微软提供的一个用于分区的模块,可以在eboot中使用。不过说实话,我很少使用它,知道有些厂商的bsp里面支持这个功能,而且也算是eboot的一部分,所以还是介绍一下。先看一下架构,如图:   在eboot中,blcommon处于最上层,这个在以前已经介绍过,bootpart模块会被oem函数来调用,而bootpart模块要操作存储设备需要flash driver的支持。这里要说的是flash driver是指wince下的flash驱动,也就是fmd_xxx接口的驱动。所以要使用bootpart模块,首先要有flash的驱动的支持。bootpart模块在”wince600publiccommonoakdriversethdbgbootpart”下面可以找到源代码,主要的实现都在bootpart.cpp中。bootpart模块主要提供对flash设备的分区功能和对binfs的支持。下面介绍一下会用到的函数:   1. bool bp_init (lpbyte pmemory, dword dwsize, lpctstr lpactivereg, ppci_reg_info pregin, ppci_reg_info pregout)   该函数可以说是bootpart模块的初始化函数,看看代码就知道他会调用fmd_init来初始化flash设备并初始化一块内存。该函数一般会在oemplatforminit函数中被调用。pmemory指向一块内存来存放mbr信息,dwsize为内存的大小,lpactivereg,pregin和pregout会被fmd_init用到,一般可以设置为null。   2. bool bp_lowlevelformat(dword dwstartblock, dword dwnumblocks, dword dwflags)   该函数用于低级格式化,它会格式化flash设备中的block,重新创建mbr并将mbr存到第一个blockd的第一个扇区中。dwstartblock为起始block,dwnumblocks为多少个block,dwflags为格式化标记位,表示采用何种格式化方式。该函数会根据需要来由eboot中的函数调用。   3. ppartentry bp_getpartitioninfo (handle hpartition)   该函数用于获得某个分区的信息。hpartition为某一个分区的句柄,返回相应的分区信息。   4. handle bp_openpartition(dword dwstartsector, dword dwnumsectors, dword dwparttype, bool factive, dword dwcreationflags)   该函数用于打开或者创建一个分区,可以通过该函数在flash设备上面创建分区。dwstartsector为起始逻辑扇区,dwnumsectors为该分区中包含多少个扇区,dwparttype表示分区的类型,factive为是否是激活分区,dwcreationflags表示是创建分区还是打开分区,执行成功后返回该分区的句柄。   5. bool bp_writedata(handle hpartition, lpbyte pbbuffer, dword dwlength)   该函数负责向某一个分区写入数据,一般eboot可以通过这个函数将wince image写入分区中。hpartition为被创建的分区的句柄,pbbuffer为要写入数据的buffer,dwlength为要写入数据的长度。   6. bool bp_readdata(handle hpartition, lpbyte pbbuffer, dword dwlength)   该函数负责从一个分区中读出数据,eboot可以通过这个函数将wince image读到ram中。hpartition为被创建的分区的句柄,pbbuffer为要读出数据的buffer,dwlength为要读出数据的长度。   7. bool bp_setdatapointer (handle hpartition, dword dwaddress)   该函数用于设置某一个分区的数据指针,实际上数据指针是指在该分区中下一次被读或写的位置。一般会配合bp_readdata(..)和bp_writedata(..)两个函数来用。hpartition为被创建分区的句柄,dwaddress为数据指针的新位置。   一般比较常用的就是这些函数。最后简单总结一下,微软提供的这个模块主要是用于在flash设备上进行分区,或者说就是帮助我们来对flash进行layout。在eboot中要使用它,首先要实现flash的驱动才可以。其实看看代码就会发现,这些函数无论是创建mbr,还是创建分区,本质上就是在flash里面写了一些标记性信息,封装了一些函数给用户使用。我很少使用bootpart模块,更习惯整个flash都由自己来管理,感觉更清楚些。 如果喜欢wince eboot中的bootpart分析请收藏或告诉您的好朋友.
阅读(149) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~