内容纲要
本课时的目的是将DBR部分的数据全部由代码产生,实现DBR的完全自主生成,不再依赖于模板数据。
主要内容
BPB_SecPerClus的计算
该项值依赖于格式化时选择的簇大小。
注意,目前课程中并没有检查用户选择的簇大小的合法性。
目前的代码中,允许用户设置任意大小的簇。但是,簇过大,会导致数据区中划分出来的簇数量少。簇数量少,可能会导致FAT类型解析失败。
在FAT技术文档(中文版 第8页)中,有如下说明。当簇的数量较小时,可能会被识别为FAT16或FAT12。
有关这方面的判断,可能会在以下的课时中实现。
BPB_RsvdSecCnt的计算
手册中讲建议设置成32,但我们在这里应当按照原模板中的值,设置成相同的值。
否则,由于导致系统加载时,FAT表、数据区的位置计算成其它值,与磁盘映像文件中现有的位置值不同,导致解析失败。
BPB_NumFATs的计算
根据手册中的建议,以及磁盘映像文件中的实际值,课程中设置的是2。
BPB_FATSz32的计算
该值的计算,需要用到解二元方程组的方法,才能得到正确计算公式。
具体的解法,如需了解,请百度或参考数学课本。
注:这个计算公式可能不是那么准备,如发现问题,欢迎向我提出。
重点难点
注意事项
请在调试前,将相关的值用winhex查看一下,然后在调试过程中与这些值进行对比,方便找出问题。