BP_OpenPartition的疑问

elise   2010-4-30 10:58 楼主

  1. *      dwStartSector - Logical sector to start the partition.  NEXT_FREE_LOC if none
  2. *          specified.  Ignored if opening existing partition.

  3. *      dwNumSectors - Number of logical sectors of the partition.  USE_REMAINING_SPACE
  4. *          to indicate to take up the rest of the space on the flash for that partition (should
  5. *          only be used when creating extended partitions).  This parameter is ignored
  6. *          if opening existing partition.
  7. ...
  8. HANDLE BP_OpenPartition(DWORD dwStartSector, DWORD dwNumSectors, DWORD dwPartType, BOOL fActive, DWORD dwCreationFlags)



第一个参数说明是开始的Sector,第二个参数是Sector的数目
但是我看代码怎么好像是Page呢?


  1. hPart = BP_OpenPartition( (NK_START_BLOCK+1)*PAGES_PER_BLOCK,  // next block of MBR   
  2. SECTOR_TO_BLOCK_SIZE(FILE_TO_SECTOR_SIZE(dwBINFSPartLength))*PAGES_PER_BLOCK,  //align to block
  3.                               PART_BINFS,
  4.                               TRUE,
  5.                               PART_OPEN_ALWAYS);


(NK_START_BLOCK+1)*PAGES_PER_BLOCK ?? NK_START_BLOCK 在s3c6410中为6,PAGES_PER_BLOCK = 64
算出来应该是前面总共的Pages偏移量才对啊,第二个参数不是也是算Pages的数目吗?

另外还有一个问题,eboot里面这个分区为什么从(NK_START_BLOCK+1)开始,+1做什么。
第一sector放uboot,第二sector放TOC,第3-6(4个)放eboot,要跳开1个sector做什么?






回复评论 (7)

Page跟Sector是一个意思吧Page->block,Sector->block

eboot里面这个分区为什么从(NK_START_BLOCK+1)开始,+1做什么
加1的意思是不是NK_START_BLOCK是MBR,我猜的,不敢确定
点赞  2010-4-30 11:19
1sector=512,1page=4*sector=2k,1block=64*page=128k
好像是这样的关系吧。
不过看了FMD_ReadSector、FMD_WriteSector等函数好像参数实际上也是用page的概念。
FMD_EraseBlock参数用的是Block的概念。
我的理解是这样。不知道对不对。
+1为了前面放MBR,有可能,这部分代码没看懂。不过MBR不是才512Byte吗?
说实在的,对于磁盘里面这些概念一直不清楚。
什么柱面啊,磁头啊,扇区啊....没什么概念。
哪位高手能简单介绍一下。


点赞  2010-4-30 14:31
硬盘由很多盘片(platter)组成,每个盘片的每个面都有一个读写磁头。如果有N个盘片。就有2N个面,对应2N个磁头(Heads),从0、1、2 开始编号。每个盘片被划分成若干个同心圆磁道(逻辑上的,是不可见的。)每个盘片的划分规则通常是一样的。这样每个盘片的半径均为固定值R的同心圆再逻辑上形成了一个以电机主轴为轴的柱面(Cylinders),从外至里编号为0、1、2……每个盘片上的每个磁道又被划分为几十个扇区(Sector),通常的容量是512byte,并按照一定规则编号为1、2、3……形成Cylinders×Heads×Sector个扇区。这三个参数即是硬盘的物理参数。
上层对应的是页
底层是块
这方面以前好像有个帖子专门说了
点赞  2010-4-30 16:12
引用: 引用 3 楼 xilidecai 的回复:
硬盘由很多盘片(platter)组成,每个盘片的每个面都有一个读写磁头。如果有N个盘片。就有2N个面,对应2N个磁头(Heads),从0、1、2 开始编号。每个盘片被划分成若干个同心圆磁道(逻辑上的,是不可见的。)每个盘片的划分规则通常是一样的。这样每个盘片的半径均为固定值R的同心圆再逻辑上形成了一个以电机主轴为轴的柱面(Cylinders),从外至里编号为0、1、2……每个盘片上的每个磁道又被划……


先顶你~~呵呵


LZ应该已经很清楚了,从你这段解释中:
*      dwStartSector - Logical sector to start the partition.  NEXT_FREE_LOC if none
*          specified.  Ignored if opening existing partition.

*      dwNumSectors - Number of logical sectors of the partition.  USE_REMAINING_SPACE
*          to indicate to take up the rest of the space on the flash for that partition (should
*          only be used when creating extended partitions).  This parameter is ignored
*          if opening existing partition.
...
HANDLE BP_OpenPartition(DWORD dwStartSector, DWORD dwNumSectors, DWORD dwPartType, BOOL fActive, DWORD dwCreationFlags)






点赞  2010-4-30 23:45
HANDLE BP_OpenPartition(DWORD dwStartSector, DWORD dwNumSectors, DWORD dwPartType, BOOL fActive, DWORD dwCreationFlags)中:
这个函数是文件系统分区函数

StartSector:文件系统分区起始地址
dwNumSectors:这是长度了

注意这里是系统打印出来的时候 转成了逻辑地址
譬如:
CreatePartition: Start = 0x100, Num = 0xae00.
Log2Phys: Logical 0x100 -> Physical 0x500

这样有些厂家的BSP中EBOOT就可能存在问题(打印出来的信息与实际不符)
点赞  2010-5-1 00:09
引用: 引用 3 楼 xilidecai 的回复:
硬盘由很多盘片(platter)组成,每个盘片的每个面都有一个读写磁头。如果有N个盘片。就有2N个面,对应2N个磁头(Heads),从0、1、2 开始编号。每个盘片被划分成若干个同心圆磁道(逻辑上的,是不可见的。)每个盘片的划分规则通常是一样的。这样每个盘片的半径均为固定值R的同心圆再逻辑上形成了一个以电机主轴为轴的柱面(Cylinders),从外至里编号为0、1、2……每个盘片上的每个磁道又被划……

有点懂了。

谢谢各位。不过就更觉得注释中Logical sector更不对。
点赞  2010-5-4 09:56
引用: 引用 2 楼 accessysq 的回复:
1sector=512,1page=4*sector=2k,1block=64*page=128k
好像是这样的关系吧。
不过看了FMD_ReadSector、FMD_WriteSector等函数好像参数实际上也是用page的概念。
FMD_EraseBlock参数用的是Block的概念。
我的理解是这样。不知道对不对。
+1为了前面放MBR,有可能,这部分代码没看懂。不过MBR不是才5……


学习了,正解
点赞  2010-5-4 18:59
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复