fat文件系统简介

简介: fat文件系统

Fat文件系统是sd卡常用的一种文件系统类型,在电脑上,我们可以把sd卡格式化成exfat类型或者ntfs类型。在linux系统里,我们可以用mkfs.vfat /dev/mmcblk0把sd卡格式化成fat文件系统类型,容量大于512M的默认会格式化成fat32,就是32位,除了fat32,还有fat12,fat16。 Fat文件系统是以簇为基本单元管理的,什么是簇? 簇其实就是一连串的扇区,我们知道sd卡在格式化完后,通常一个sector为512字节,所以我们以常见情况假设一个sector为512字节,用winhex读sd卡的信息,可以看到,格式化完的fat32默认一个簇是8K,一个sector是512字节,也就是一个簇是16个sector,所以簇的本质其实就是一串扇区。Fat文件系统限制了最大簇为32K。

e8f180ec8e1e78baf7729e714439f9c.png

7e5ecf4baa5dd5e1bcdcef3a907b5f0.png

Fat(file allocation table)

Fat文件系统有2个隐藏文件,就是fat1和fat2,这两个文件内容是一样的,fat2是fat1的备份。 如何阅读fat表? Fat表里4个字节为一个fat项,fat项的内容为下一个簇的簇号,所以fat表其实就是一个簇链。其中,fat表的第0项和第1项是固定值,根目录为第2项。关于fat表的值的含义:

2ce55680664211af2270735a588a1a0.png

528829c700f8e0f8c798cb4e0fd8601.png

Fdt

理解fdt对我们来说十分重要。从下面表格可以看到fdt表的内容,一个fat占32字节,其中包括簇号和文件名。在代码里对应的结构体是msdos_dir_entry

struct msdos_dir_entry {
 __u8 name[MSDOS_NAME];/* name and extension */
 __u8 attr;  /* attribute bits */
 __u8    lcase;  /* Case for base and extension */
 __u8 ctime_cs; /* Creation time, centiseconds (0-199) */
 __le16 ctime;  /* Creation time */
 __le16 cdate;  /* Creation date */
 __le16 adate;  /* Last access date */
 __le16 starthi; /* High 16 bits of cluster in FAT32 */
 __le16 time,date,start;/* time, date and first cluster */
 __le32 size;  /* file size (in bytes) */
};

簇号十分重要,我们需要通过簇号找到对应的扇区。除此之外,fdt还跟inode,dentry这些信息要关联起来。 介绍完fat文件系统两大基石:fat和fdt,下篇介绍fat文件系统查找,删除文件。

号主:一枚机械专业本科生,经历了转行,从外包逆袭到芯片原厂的Linux驱动开发工程师,深入操作系统的世界,贯彻终身学习、终身成长的理念。平时喜欢折腾,寒冬之下,抱团取暖,期待你来一起探讨技术、搞自媒体副业,程序员接单和投资理财。【对了,不定期送闲置开发板、书籍、键盘等等】。

如果你想了解我的转行经验,欢迎找我交流~gongzhong号【哆哆jarvis】

一起不断探索自我、走出迷茫、找到热爱,希望和你成为朋友,一起成长~

相关文章
|
安全 应用服务中间件 网络安全
VM tomcat启动成功,但是访问不到tomcat欢迎页
VM tomcat启动成功,但是访问不到tomcat欢迎页
700 0
VM tomcat启动成功,但是访问不到tomcat欢迎页
|
网络协议 Linux C++
Linux C/C++ 开发(学习笔记十一 ):TCP服务器(并发网络网络编程 一请求一线程)
Linux C/C++ 开发(学习笔记十一 ):TCP服务器(并发网络网络编程 一请求一线程)
302 0
|
4月前
|
关系型数据库 Linux 数据库
Linux系统安装Postgre和Postgis教程
本文详细介绍了PostgreSQL/PostGIS的卸载与安装步骤。卸载部分涵盖Docker、Yum/RPM及源码编译安装的清理方法,包括停止服务、删除容器/包、清理残留文件和环境变量等操作,并强调卸载前需备份数据库数据。安装部分提供在线yum安装和离线源码编译两种方式,前者简单快捷,后者需准备依赖(如gcc、readline-devel等)、创建用户组、初始化数据库及配置访问规则。每步均附带命令示例,确保操作清晰明确。
656 0
|
11月前
|
存储 关系型数据库 MySQL
MySQL 8.0特性-自增变量的持久化
【11月更文挑战第8天】在 MySQL 8.0 之前,自增变量(`AUTO_INCREMENT`)的行为在服务器重启后可能会发生变化,导致意外结果。MySQL 8.0 引入了自增变量的持久化特性,将其信息存储在数据字典中,确保重启后的一致性。这提高了开发和管理的稳定性,减少了主键冲突和数据不一致的风险。默认情况下,MySQL 8.0 启用了这一特性,但在升级时需注意行为变化。
233 1
Byte 高位/低位简介绍(大端格式/小端格式)
Byte 高位/低位简介绍(大端格式/小端格式)
1709 1
|
机器学习/深度学习 传感器 算法
【信号去噪】基于小波变换实现脉搏信号去噪附Matlab代码
【信号去噪】基于小波变换实现脉搏信号去噪附Matlab代码
QGS
|
JSON Java 关系型数据库
手拉手Springboot获取yml配置文件信息
手拉手Springboot获取yml配置文件信息
QGS
288 1
|
编解码 Go 图形学
Adobe Premiere Pro:掌控视频剪辑的魔法之手,让你的创作腾飞!
Adobe Premiere Pro:掌控视频剪辑的魔法之手,让你的创作腾飞!
355 2
|
存储 缓存 关系型数据库
谈谈Redo Log和Undo Log
谈谈Redo Log和Undo Log
|
Windows
Visual Studio 2022如何创建Win32项目
Visual Studio 2022如何创建Win32项目
2390 0
Visual Studio 2022如何创建Win32项目