在FATFS中经常用到chk_mount这个函数,主要是对物理驱动器检测它的可用性,即磁盘现在是否可用,避免了磁盘中途掉电的情况,在其中有这么一段程序
fmt = check_fs(fs, bsect = 0); /* Check sector 0 if it is a VBR */可用的分区记录
if (fmt == 1) { /* Not an FAT-VBR, the disk may be partitioned */
//结束符正确,确不是FAT系统,则读取下一个分区的数据,看是否是有效的结束符和FAT系统
/* Check the partition listed in top of the partition table */
tbl = &fs->win[MBR_Table + LD2PT(vol) * SZ_PTE];/* Partition table */下一个分区属性的16字节存储指针
if (tbl[4]) { /* Is the partition existing? */系统ID对于FAT32为0x01,未用是为0
bsect = LD_DWORD(&tbl[8]); /* Partition offset in LBA */分区偏移地址
fmt = check_fs(fs, bsect); //root record /* Check the partition */这一句不懂了
}
}
这一次它是要检测什么的??
后来想了一想,对于我们的硬盘,大多是只有一个分区的,但是有的可能会有多个分区,而对于每一个分区而言,他都有一个MBR区,又称为伪MBR区,存储了这一个分区的引导程序,以及分区的信息,这样的话,如果第一个分区不是FAT系统,我们就查找是否又下一个分区,如果有的话,就开始对下一分区的判断……
|