用单片机的RAM虚拟U盘(文件系统:Fat16)
0x2c | 4 | 根目录启始簇(FAT32) |
0x2b | 11 | 卷标(非FAT32) |
0x30 | 2 | FSInfo扇区(FAT32) |
0x32 | 2 | 启动扇区备份(FAT32) |
0x34 | 12 | 保留未使用(FAT32) |
0x36 | 8 | FAT文件系统类型(如FAT、FAT12、FAT16) |
0x3e | 2 | 操作系统自引导代码 |
0x40 | 1 | BIOS设备代号(FAT32) |
0x41 | 1 | 未使用(FAT32) |
0x42 | 1 | 标记(FAT32) |
0x43 | 4 | 卷序号(FAT32) |
0x47 | 11 | 卷标(FAT32) |
0x52 | 8 | FAT文件系统类型(FAT32) |
0x1FE | 2 | 扇区结束符(0x55 0xAA) |
表1 图2分区表第一字段 | |||
字节位移 | 字段长度 | 值 | 字段名和定义 |
0x01BE | BYTE | 0x80 | 引导指示符(Boot Indicator) 指明该分区是否是活动分区。 |
0x01BF | BYTE | 0x01 | 开始磁头(Starting Head) |
0x01C0 | 6位 | 0x01 | 开始扇区(Starting Sector) 只用了0~5位。后面的两位(第6位和第7位)被开始柱面字段所使用 |
0x01C1 | 10位 | 0x00 | 开始柱面(Starting Cylinder) 除了开始扇区字段的最后两位外,还使用了1位来组成该柱面值。开始柱面是一个10位数,最大值为1023 |
0x01C2 | BYTE | 0x07 | 系统ID(System ID) 定义了分区的类型,详细定义,请参阅图4 |
0x01C3 | BYTE | 0xFE | 结束磁头(Ending Head) |
0x01C4 | 6位 | 0xFF | 结束扇区(Ending Sector) 只使用了0~5位。最后两位(第6、7位)被结束柱面字段所使用 |
0x01C5 | 10位 | 0x7B | 结束柱面(Ending Cylinder) 除了结束扇区字段最后的两位外,还使用了1位,以组成该柱面值。结束柱面是一个10位的数,最大值为1023 |
0x01C6 | DWORD | 0x0000003F | 相对扇区数(Relative Sectors) 从该磁盘的开始到该分区的开始的位移量,以扇区来计算 |
0x01CA | DWORD | 0x00DAA83D | 总扇区数(Total Sectors) 该分区中的扇区总数 |
3、FAT分区原理:
下面终于开始说FAT。
对于一个存储介质,隐藏区之后,才是文件系统的起始部分,以保留区开头。
FAT文件系统的结构是按照这个方式排列的:保留区、FAT区、副FAT区、根目录区、数据区。
(1)、保留区(Reserved Region)
保留区就是分区的开始扇区到FAT表之前的扇区,注意,保留区是位于分区之内,每个分区的开头都会有一个保留区。而保留区的第一个扇区必须是BPB。如果隐藏区为0,那么BPB将位于第0扇区。
DBR(Dos Boot Record):即操作系统引导记录,通常位于分区的第0个扇区,共512个字节(特殊情况也要占用其它保留扇区)。在这512个字节中,其实又是由跳转指令,厂商标志和操作系统版本号,BPB(BIOS Parameter Block),扩展BPB,os引导程序,结束标志几部分组成。 以用的最多的FAT32为例说明分区DBR各字节的含义。见图:
对应解释见下表:
表3 FAT32分区上DBR中各部分的位置划分 | |||
字节位移 | 字段长度 | 字段名 | 对应图8颜色 |
0x00 | 3个字节 | 跳转指令 | |
0x03 | 8个字节 | 厂商标志和os版本号 | |
0x0B | 53个字节 | BPB | |
0x40 | 26个字节 | 扩展BPB | |
0x5A | 420个字节 | 引导程序代码 | |
0x01FE | 2个字节 | 有效结束标志 |
其实,图中,除了黑色部分,其他部分同MBR是一样的,可以直接查看上面对MBR内容的分析表格。
需要注意的是:
1)跳转指令:EB xx 90,也就说第0和第2为分别是EB和90,至于具体意义,没有暂时没有深究;
2)对应MBR,最大的区别是,DBR没有分区表DPT!
(2)、FAT区
即文件分配表,有两份,第二份是第一份的备份。文件分配表每项代表一个簇,由于fat16使用两字节即16位来描述一个簇,所以最多只能管理65536个簇,又由于每簇最大只有32kB,所以使用fat16的时候,每个分区最大容量是2G。分区表的大小可以在DBR里设置。
(3)、根目录区:
第二个FAT表(即备份FAT)后面紧接着的下一个扇区,就是根目录区的开始。存放目录项,每个目录下为32个字节,记录一个文件或目录的信息(长文件名例外)。目录项所占的扇区与可以容纳的目录项有关,一般为512项,将占“512(目录项数)×32/512(扇区大小)”个扇区。但是目录项×32一定是扇区大小512的整数倍。
32字节目录项内容如下表:
字节偏移 | 长度 | 描述 | |||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x00 | 8 | DOS文件名(附加空格) 第一个字节可以是下面的特殊数值:
| |||||||||||||||||||||||||||
0x08 | 3 | DOS文件扩展名(空格补齐) | |||||||||||||||||||||||||||
0x0b | 1 | 文档属性 第一个字节可以是下面一些特殊值:
属性值0x0F用来表示长文件名条目。 | |||||||||||||||||||||||||||
0x0c | 1 | 保留,NT使用(参见后面) | |||||||||||||||||||||||||||
0x0d | 1 | 创建时间,最小时间分辨率:10ms单位,数值从0到199。 | |||||||||||||||||||||||||||
0x0e | 2 | 创建时间。小时、分钟和秒根据后面的图示描述进行编码:
|
单片机RAM虚拟U 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)