FAT32 中sector number和cluster number的转换关系

#define DOS_MIN_CLUSTER         (2)

secNo<->ClusterNo.
typedef long long sector_t

sector_t clus2sec(clusNo)
{
    sector_t secNo;
    secNo=(clusNo-DOS_MIN_CLUSTER)*secPerCluster+dataStartSec;
    return secNo;
}

int sec2clus(sector_t secNo)
{
    int clusNo;
    clusNo=(secNo-dataStartSec)/secPerCluster+DOS_MIN_CLUSTER;
    return clusNo;
}
所以cluster最小从2开始

dataStartSec=nReservedSecs+secPerFat*nFats
pFatDesc->fatStartSec  = pVolDesc->nReservedSecs     

一些数据在BPB中的偏移:
bootSecNum = DOS_BOOT_SEC_NUM对应物理secNo是nHiddenSecs
nHiddenSecs     <->DOS_BOOT_NHIDDEN_SECS        (0x1C,4)    
rootStartClust  <->DOS32_BOOT_ROOT_START_CLUST  (0x2c,4)
nReservedSecs   <->DOS_BOOT_NRESRVD_SECS        (0x0E,2)
secPerClust     <->DOS_BOOT_SEC_PER_CLUST       (0x0D,1)
secPerFat       <->DOS32_BOOT_SEC_PER_FAT       (0x24,4)
bytesPerSec     <->DOS_BOOT_BYTES_PER_SEC       (0x0b,2)
totalSec        <->DOS_BOOT_LONG_NSECTORS       (0x20,4)
nFats           <->DOS_BOOT_NFATS               (0x10,1)

猜你喜欢

转载自blog.csdn.net/ambercctv/article/details/80434405