fat32 中加载LOADER

为了简洁起见,FAT32的内容 可以参考 数据重现 该书 介绍FAT32的内容,下面只说对FAT32的应用

现在,跳入做U盘引导正题 ,就是讲分区格式化为FAT32文件系统

先看看 大致 FAT32结构

保留区中 第0号扇区是DBR扇区(FAT32的dbr不只只有1个扇区 )

数据区的 数据按簇存放,不满一个簇就按簇存放,大于一个簇分多个簇存放。

簇号从2簇开始(不是0簇)  而且从数据区开始才以簇描述数据块,之前的描述按扇区来讲。

FAT表: FAT表 按每个簇号 32bit,4字节,存放的是改簇号的下一簇地址  第0,1号记录不用 从二号开始用。也和数据区从2号簇开始对应

根目录:存放在数据区的第二簇中,如果不够用 更改FAT表2号记录,存入下一簇地址。

 

比如 :寻找一个文件,先查看根目录 ,根目录中 存放着 短文件目录项 和长文件目录项,(只看短文件目录项,为简答起见长文件不讨论),

{短文件前11个字节为文件名} {短目录项中还存放着 文件的起始簇号} 根据这两项找到了文件的首 簇号

然后查FAT表 ,该簇号是否有下一簇,有则继续读下一簇,查FAT表,直到结束标志为止。 一个文件就这样被读出来了。

 

我们来考虑DBR扇区中的内容  其中有BPB 和引导代码。

BPB中的 隐藏扇区 是 该分区的物理地址,我们制作的镜像只有一个分区 所以就是0,当加入MBR后隐藏藏扇区的自然就可以改成其他的了。

引导代码 部分只用 将LOADER内容读到内存  某空闲处 然后跳入loader代码中。

考虑到512字节比较紧张 所有可以把一部分代码放到DBR分区之后的空闲区中,让DBR将这部分代码加载到07c00h之后

对于硬盘读写的问题  用 拓展INT13H 中断 读LBA扇区 较为方便。

 

 

 

 

 

-

posted @ 2013-08-04 16:51  敷衍。  阅读(246)  评论(0编辑  收藏  举报