甲基苯丙酮合成原理及材料? 苯基丙酮的合成路线
2023-08-07
很多朋友对FATFS文件系统详解,一不是很了解,每日小编刚好整理了这方面的知识,今天就来带大家一探究竟。
1.介绍
在计算机发展的早期,硬盘尺寸和flash设备容量都比较小,随着技术的不断迭代更新,硬盘容量越来越大。早期,面对小容量的硬盘/flash,往往是用对应的地址来存储对应的数据。因为数据量小,操作起来还可以。
但是今天,随着硬盘/闪存的容量越来越大,存储的数据越来越多。早期的在单一对应地址存储对应数据的方案已经不能满足我们的需求,操作硬盘/flash会变得异常困难和复杂。
所以针对以上问题,一群大佬开始设计文件系统来管理硬盘/flash上的数据信息,就像在我们的电脑上打开一个文件夹,访问里面的文件,其实就是基于文件系统访问电脑硬盘上的数据的操作。
到目前为止,文件系统有许多版本。本文主要分享FAT文件系统的详细设计。FAT文件系统适用于嵌入式设备,如SD卡、SD nand、spi nor flash等多种存储设备,基于该文件系统的文件也可以被计算机正常读取。2.基本概念在研究文件系统之前,我们需要先了解几个关于内存块的基本概念:区分的概念==扇区、块和簇==
扇区:Flash可以操作的最小单位,通常指我们擦除的最小单位大小。以sd nand为例,通常最小的是512Byte。
Block和cluster:其实这两个概念是一样的,只是由于历史原因,在windows中叫做集群,在linux中叫做blocks。一个簇/块由多个扇区组成。因为一个扇区的空间小,所以文件系统会把多个扇区组合成一个簇,簇内读写!一个集群通常可以由2、4、8、…,2的n次方组成。
FAT文件系统由三个版本组成:FAT12、FAT16和FAT32。这是因为随着存储技术的不断发展和FAT文件系统的迭代,数字越大,版本越新,新版本完全兼容旧版本!3.fat文件系统的组成FAT文件系统在flash上的布局如下图所示,一共由四个区域组成:保留区、FAT区、根区(FAT32型不包括这个区域)和数据区。
接下来我们分析一个FAT格式的SD卡,了解FAT文件系统的实现细节:4。FAT文件系统4.1格式SD nand/sd卡的分析FAT格式和用win10格式化一个118.5M的SD nand/sd卡。我这里用的是Genesis CS的一个SD nand加一个转接卡,和sd卡完全不一样,SD nand在稳定性上比sd卡有优势。
==由于SD nand(SD卡)的尺寸问题,默认使用FAT16进行格式化!所以在下面,我们先用FAT16来分析,再重新格式化成FAT32来分析,很好理解!==4.2引导扇区分析使用winhex工具打开相应的磁盘,注意管理员的权限才能运行。打开后,我们可以以二进制格式查看SD卡上的所有数据。首先我们会看到第一个扇区,也就是对应的引导扇区,注意引导扇区位于保留区!
接下来,我们根据官方文件来分析引导扇区。注意,FAT文件系统数据是小端格式的!a)首先是FAT12/16/32的公共部分,(偏移量0-35): EB3C90: BS _ JMP引导,跳转指令4D53 444F53 352E30: BS _ OEMNAME,MSDOS 5.0,一个名称,表示创建这个卷的操作系统,没有其他功能00 02:BPB_BytsPerSec。
04: bpb _ secperclus,每次操作的最小扇区数,Cluster,4(匹配格式化时选择的大小:2048=512 * 4) 0600: bpb _ rsvdseccnt,保留区的扇区数,6(由此计算,FAT区的起始地址为6 * 512=0xc00) 02: bpp。FAT个数,2(一般这个值为2,多一个用于冗余备份,在第一个因系统异常损坏时增加恢复的可能性,表示FAT区有两个FAT备份)。
0002: BPB _ rootentnt,512,在FAT12/16系统中,该字段表示根目录中32字节目录条目的数量。设置该值时,应注意对齐。为了获得最大的兼容性,在FAT16系统上,该值应设置为512,在FAT32系统上,该值应设置为0。
00 00 00:BPB_TotSec16,16位大小的区域描述了FAT卷的总扇区数,0。当FAT12/16系统的扇区数0x10000(65536)时,该域应置0,实数值存放在BPB_TotSec32域;对于FAT32系统,该值必须为0。(这里因为我们的总扇区数=118.51041024/512=24268865536,所以这个字段为0) F8: BPB _ media媒体类型。
Ed 00: BPB _ FATSZ16,237,一个FAT占用的扇区数,这个字段只在FAT12/16系统中使用;对于FAT32系统,该字段必须为0,而使用BPB_FATSz32字段。脂肪面积总大小等于BPB_FATSz?BPB_NumFATs扇区(2372*512=242688=0x3B400,由此可以计算出根目录区的起始地址:0x3B4000xC00=0x3C000)。3f00: bpb _ secterrk,每个磁道的扇区数。该字段仅与具有几何形状的介质相关,仅用于IBM PC的磁盘BIOS,无论如何。
FF 00:BPB_NumHeads,头数量,此字段仅与具有几何形状且仅用于IBM PC 的磁盘BIOS 的介质相关,不用管。
00 00 00 00:BPB_HiddSec,0,FAT 卷之前的隐藏物理扇区数(当磁盘被分区之后,当前分区并不一定是从扇区头开始的)
00 B4 03 00:BPB_TotSec32,242688,32位大小区域描述FAT卷扇区总数(整个卷空间大小)。 FAT12/16系统,扇区总数小于0x10000时,此字段必须为0,真实值存放在BPB_FATSz16;FAT32系统,此字段一直有效。(118.5M=512 * 242688)
b) 接下来是FAT12/16特有字段(偏移值36)
80:BS_DrvNum,IBM PC 的磁盘BIOS 使用的驱动器号,00h代表软盘,80h代表固定磁盘
00:BS_Reserved,保留字段,0
29:BS_BootSig,扩展引导签名,表示以下存在三个字段
83 3E 07 E4:BS_VolID,与BS_VolLab 一起构成卷序列号,一般在格式化的时候结合时间生成
4E 4F 20 4E 41 4D 45 20 20 20 20:(解析为:”NO NAME “),BS_VolLab,11byte卷标,当卷标不存在时,此值应设置为”NO NAME”
46 41 54 31 36 20 20 20:(解析为:”FAT16 “),BS_FilSysType文件系统类型,支持字段有:”FAT12 “, “FAT16 “ or “FAT “,注意很多人认为是通过此字段区分FAT12/16/32系统类型,实际是错误的,文件系统类型实际上是根据磁盘大小确定的,官方文档“Determination of FAT sub-type” 章节或本博文后文有描述,不过为了最大的兼容性考虑,此字段应设置为对应文件系统的名字。
33 C9 ~ CB D8:BS_BootCode,引导启动程序,与平台有关,不使用时填充为0
55 AA:BS_BootSign,0xAA55,引导签名,指示这是一个有效的引导扇区
当扇区大小大于512字节时,剩余的字段应全部使用0x0填充。
c) 如果是FAT32,则采用FAT32特有字段解析(偏移值和FAT12/16特有字段一致为36)
虽然此处我们的是FAT16格式,不过此处也将FAT的字段进行描述,方便理解。
BPB_FATSz32:一个FAT占用的扇区数,此字段仅在FAT32系统有效。FAT区总大小等于BPB_FATSz? * BPB_NumFATs 扇区。
BPB_ExtFlags:扩展标识字段,bit7=0,表示所有FAT都是镜像的和活跃的;bit7=1,表示只有bit3-0表示的FAT是有效的。
BPB_FSVer:FAT32版本,高字节是主版本号,低字节是次版本号。
BPB_RootClus:根目录的第一个簇号,此值通常为2,因为前两个簇一般用于保留。
BPB_FSInfo:FSInfo结构扇区与FAT32卷顶部的偏移扇区值。此值通常为1,因为其通常位于引导扇区旁边。
BPB_BkBootSec:备份引导扇区与FAT32卷顶部的偏移扇区值。此值通常为6,考虑最大的兼容性,此值不建议为其他值。
BPB_Reserved:保留
BS_DrvNum:含义与FAT12/16字段一样
BS_Reserved:含义与FAT12/16字段一样
BS_BootSig:含义与FAT12/16字段一样
BS_VolID:含义与FAT12/16字段一样
BS_VolLab:含义与FAT12/16字段一样
BS_FilSysType:始终为”FAT32 “,对FAT类型的确定没有任何影响。
BS_BootCode32:引导启动程序,与平台有关,不使用时填充为0
BS_BootSign:0xAA55,引导签名,指示这是一个有效的引导扇区
当扇区大小大于512字节时,剩余的字段应全部使用0x0填充。
以上就是引导扇区内容的详细分析了,通过引导扇区的内容,我们即可知道FAT文件系统依赖的硬件存储空间大小、簇大小、扇区大小以及以及FAT系统版本等重要信息。
同时通过引导扇区的内容,我们便可计算出对应的FAT的四个区域的大小及起始偏移位置等重要信息,接下来计算FAT四个分区的起始位置及大小。
4.3 分区偏移及大小计算
FAT卷总共分为以下四个区域:
保留区
第一个扇区为引导扇区,存放BPB(BIOS Parameter Block)数据,存放的是FAT卷的配置参数。
上述参数中以BPB 命名的字段都是BPB 的一部分,而以BS 标题命名的字段都不是BPB 的一部分,而只是引导扇区的一部分
FAT区(分区表装载区)
根目录区
数据区
各分区偏移地址及大小如下:
此外,关于FAT区,通常存在一个以上的FAT,如此处所格式化的sd卡便存在两个FAT,对应的偏移地址和大小如下:
4.4 FAT子类型确认
关于FAT的类型是FAT12/16/32确认:FAT类型由数据区内簇的数量决定,除此之外无其他办法!
当一个卷,簇的数量4085 时,为FAT12
当一个卷,簇的数量4086 且65525 时,为FAT16
当一个卷,簇的数量65526 时,为FAT32
簇的数量计算公式:CountofClusters=DataSectors/BPB_SecPerClus;
如我们这里:CountofClusters===242176==/4=60544,==所以为FAT16!==
当簇的大小从512 ~ 32768字节的各种条件下,不同类型FAT对应卷的大小范围如下:
以上知识分享希望能够帮助到大家!
版权声明:本站所有作品图文均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系我们
推荐阅读
2023-08-07
2023-08-07
2023-08-07
2023-08-07
2023-08-07
2023-08-07
2023-08-07
2023-08-07
2023-08-07
2023-08-07
2023-08-07
2023-08-07
2023-08-07
栏目热点
甲基苯丙酮合成原理及材料? 苯基丙酮的合成路线
LilyGoT手表键盘C3迷你电脑套件
索泰ZBOXEdgeCI342迷你电脑正式上市
谷歌在最新的视频预告片中展示了PixelWatch的独特设计
三星与设计师Juun.J合作推出限量版可折叠产品和配件
从2023年起Fitbit设备将需要Google帐户
TOKKCAMC2+智能WiFi独立日 夜视摄像头
三星正在与全球时尚品牌JUUN.J合作
OnePlusNordWatch的颜色选项通过泄露的渲染揭示
就在第一款Nothing手机发布之前一种新的TWS芽设计浮出水面