管理员
  
- 积分
- 165371
- 金钱
- 165371
- 注册时间
- 2010-12-1
- 在线时间
- 2110 小时
|
发表于 2011-2-10 11:43:57
|
显示全部楼层
bootsector710与bpb710,你说的前者包含后者是对的。但不是重复的。
bootsector710的结构体定义如下:
//FAT32 DBR区,操作系统引导记录区
typedef __packed struct
{
BYTE bsJump[3]; // jump inst E9xxxx or EBxx90
BYTE bsOemName[8]; // OEM name and version
BYTE bsBPB[53]; // BIOS parameter block
BYTE bsExt[26]; // Bootsector Extension
BYTE bsBootCode[418]; // pad so structure is 512b
BYTE bsBootSectSig2; // boot sector signature byte 0x00
BYTE bsBootSectSig3; // boot sector signature byte 0x00
BYTE bsBootSectSig0; // boot sector signature byte 0x55
BYTE bsBootSectSig1; // boot sector signature byte 0xAA
#define BOOTSIG0 0x55
#define BOOTSIG1 0xaa
#define BOOTSIG2 0x00
#define BOOTSIG3 0x00
}bootsector710;
这个主要为了获取bsJump这个参数,以及bsBPB。
而bpb710,则是对bsBPB的解析。
这样,两个结构体分别解析不同的字段,从而得到各种参数。
第一次读取的是MBR,后面读取的是DBR。
思路看代码基本就明白了吧?初始化主要就是完成了获取文件系统的各种参数,比如:文件系统的类型(FAT12/16/32),文件系统的根目录所在的扇区,每个扇区的字节数,每个簇的扇区数,FAT表所在扇区等等这些信息。
在有了这些信息之后,就可以按部就班的去读取各个文件,及数据了。
具体请看《FAT文件系统原理》一文。
|
|