FAT32学习笔记(一)

1,基本概念

fat32 spec
FAT的全称是File Allocation Table,FAT是在1980s年代初由微软开发的,主要有FAT12,FAT16,FAT32三种,分为这三种的主要原因是FAT12的FAT entry有12bits,FAT16的FAT entry有16bits,FAT32的FAT entry有32bit

2,FAT format

一个扇区(sector)大小为512Byte,一个cluster的大小通常为2的整数次幂的cluster的个数,最大32KB,一个文件至少占用一个cluster,通常为整数个cluster,这整数个cluster互为链表关系

FAT32 format(Data是从cluster计算起的,不存在cluster0和cluster1的。)


MBR


Boot


FSInfo


Rsv


FAT1


FAT2


Data

FAT16 format(Data从Cluster2开始)


MBR


Boot


Rsv


FAT1


FAT2


RotDir


Data

Boot指的是Boot Sector,Boot Sector占用第一个逻辑扇区,大小为512Byte.Boot Sector的详细解释可以参考FAT32 spec,其中主要有用成员如下:


Name


Offset(byte)


Size(byte)


Description


BPB_BytsPerSec


11


2


描述每个sector多少byte,通常为512(向前兼容),也可以取值为1024,2048,4096,

注:如果设备有物理sector为N且N大于512,那么取值为N但是不能超过4096


BPB_SecPerClus


13


1


表明每个cluster有多少个sector,通常为2的整数次幂,但是一个cluster通常不会超过32K


BPB_RsvdSecCnt


14


2


在Reserved region里保留sector的个数,对于FAT12 FAT16此值为1,对于FAT32此值为32


BPB_NumFATs


16


1


FAT data structure的个数,通常为2,FAT1和FAT2,安全性互为备份的关系


BPB_RootEntCnt


17


2


对于FAT32此值为0,对于FAT12和FAT16,此值含义是32byte根目录入口的个数


BPB_TotSec16


19


2


对于FAT12和FAT16,此值表示的是整个fatimg里sector的个数,对于FAT32此值为0,整个fatimg里sector的个数在offset 32长度为4的范围里表示。


BPB_Media


21


1


0Xf8表示的是non-removable media,0XF0表示的是removable media,该值要和FAT[0]的低位相同


BPB_FATSz16


22


2


对于FAT12和FAT16,表明的是一个FAT占用sector的大小,对于FAT32,此值为0


BPB_HiddSec


28


4


对于不带分区的设备,此值为0,对于其他的,此值的含义是在partition前的隐藏sector的个数


BPB_TotSec32


32


4


对于FAT32表明的是整个设备的sector的个数。不包含之前的MBR

以下是针对FAT32的。


Name


Offset(byte)


Size(byte)


Description


BPB_FATSz32


36


4


一个FAT表占用的sector的个数,FAT32有两个FAT表,互为备份关系,FAT12和FAT16该项内容为空。


BPB_ExtFlags


40


2


Bit7为0表示的是在运行的时候FAT表1和FAT表2是互为镜像的,bit7为1表示在运行的时候只有一个FAT表是活动的,FAT12和FAT16该项内容为空。


BPB_RootClus


44


4


根目录所在cluster的cluster的序号,通常为2,即Data region的第二个cluster是根目录,这样从cluster2就可以方便找到根目录(个人理解cluster是从Data region开始算起)


BPB_FSInfo


48


2


表明了fsinfo占用的sector的个数


BPB_BkBootSec


50


2


Reserved area里对boot sector备份的个数。


BPB_Reserved


52


12


保留将来扩展使用


BS_DrvNum


64


1


BS_FilSysType


82


8


FAT32通常设置为字符串“FAT32”


510


2


固定值 0X55 AA,这个固定值一定偏移是510位置,不随sector的改变而改变

时间: 2024-10-22 12:39:32

FAT32学习笔记(一)的相关文章

FAT32学习笔记(五)——fat相关工具

1,将一个块设备格式化为fat32的工具有 mkfs.fat32(linux自带该工具) newfs_msdos(android平台上可以使用该工具) newfs_msdos -F 32 /dev/block/ram0 -s 8192 -O android -L zhiliao(-F 32的含义是将其格式化为fat32格式,/dev/block/ram0是要被格式化的设备,-s 8192是设备的大小,8192表示的是8192个sector,每个sector大小为512Byte,-O androi

FAT32学习笔记(二)——spec

1,如何区别FAT12 FAT16和FAT32 区分FAT12,FAT16,FAT32的主要依据是该分区上cluster的个数(注意:第一个cluster是以cluster2开始计数的).FAT32的RootDirSectors大小始终为0TotSec=BPB_TotSec32DataSec = TotSec – (BPB_ResvdSecCnt + (BPB_NumFATs * FATSz) + RootDirSectors);CountofClusters = DataSec / BPB_S

EasyARM i.mx28学习笔记——开箱试用总结

0 前言 本月初(2014年8月)购买了周立功的EasyARM开发板,主控为EasyARM i.mx287.出于下面几个理由购买了该开发板. [1]主要原因,有人约我一起学习一起使用该开发板. [2]该开发板性价比較高,到手300元以内,比2440/2410开发板稍廉价些. [3]该开发板的CAN功能是一个特色. [4]通过学习EasyARM i.mx287,比較和树莓派的开发的不同.     [建议] 假设亲爱的读者Linux的基础比較薄弱的话,请优先考虑树莓派.假设从此类ARM开发板入手,可

学习笔记二

ncpa.pcl打开网卡 打开属性,ip,点击高级,添加ip 尽量同一个网段,确定 在这里我们可以添加多个ip,在同一个服务器上,创建不同的网站以及80端口的使用 安装dns,解析域名,给计算机访问 Apmserv的使用 释放到一个文件夹下 点击主程序运行即可,直接点击启动,可能会报错,因为端口被占用,这个时候,我们可以修改端口 要是还是不行,我们可以点击计算机管理,查看性能日志和警报 错误的原因是,我们找到 apache/conf/extra 找到httpd-ssl.conf,修改目录所在的位

GRUB学习笔记(转自http://www.cnblogs.com/evilzy/archive/2008/03/30/1130173.html)

grub学习笔记1 首先要了解的几个概念 1.1 启动管理器 启动管理器是存储在磁盘开始扇区中的一段程序,例如,硬盘的MBR(Master Boot Record),在系统完成启动测试后,如果系统是从MBR启动,则BIOS(Basic Input/Output System)将控制传送给MBR.然后存储在MBR中的这段程序将运行.这段程序被称为启动管理器.它的任务就是将控制传送给操作系统,完成启动过程>有许多可用的启动管理器,包括GNU GRUB (Grand Unified Boot Load

<<linux命令行与shell脚本编程大全>>学习笔记(1)

一章初识linux shell 一.什么是linux 1.linux系统可大致划分为四部分: l Linux内核 l GNU工具组件 l 图形化桌面环境 l 应用软件 在linux系统里,这四部分中的每一部分都扮演着一个特别的角色,但如果将他们分开,每一部分都没太大的作用. 1)探究linux内核 Linux系统的核心是内核,内核控制着计算机系统上的所有硬件和软件,必要时分配硬件,有时需要执行软件. 内核基本负责以下四项主要功能: l 系统内存管理 l 软件程序管理 l 硬件设备管理 l 文件系

Android深度探索(卷1)HAL与驱动开发学习笔记(5)

Android深度探索(卷1)HAL与驱动开发学习笔记(5) 第五章 搭建S3C6410的开发版的测试环境 1.  S3C6410 处理器概述   S3C6410是一个16/32位RISC微处理器,旨在提供一个具有成本效益.功耗低,性能高的应用处理器解决方案,像移动电话和一般的应用.它为2.5G 和 3G通信服务提供优化的H /W性能, S3C6410采用了64/32位内部总线架构.该64/32位内部总线结构由AXI.AHB 和APB总线组成.它还包括许多强大的硬件加速器,像视频处理,音频处理,

vector 学习笔记

vector 使用练习: /**************************************** * File Name: vector.cpp * Author: sky0917 * Created Time: 2014年04月27日 11:07:33 ****************************************/ #include <iostream> #include <vector> using namespace std; int main

Caliburn.Micro学习笔记(一)----引导类和命名匹配规则

Caliburn.Micro学习笔记(一)----引导类和命名匹配规则 用了几天时间看了一下开源框架Caliburn.Micro 这是他源码的地址http://caliburnmicro.codeplex.com/ 文档也写的很详细,自己在看它的文档和代码时写了一些demo和笔记,还有它实现的原理记录一下 学习Caliburn.Micro要有MEF和MVVM的基础 先说一下他的命名规则和引导类 以后我会把Caliburn.Micro的 Actions IResult,IHandle ICondu