我正在读布劳恩索恩的OS教程
http://www.brokenthorn.com/Resources/OSDev6.html
我坚持了好几天。
加载“第2阶段”,
搜索根目录"stage2 sys“。
根目录包含文件名和启动群集地址。(即0x002)
加载0x002集群并查找FAT,以查找接下来要加载的集群。
FAT由12位数组和
数组大小为4077
现在,我不知道如何增加内容--让我知道如何按文件的第一个集群加载下一个提示。
问题是这个。
FAT仅由12位数组组成。多么?
谢谢。
发布于 2011-04-24 04:54:28
FAT集群列表只是一个数组,数组中的条目是文件的集群链中的下一个索引。目录中的文件条目告诉您第一个集群的位置(在示例中,集群0x002)。要找到下一个集群,请查看FAT数组中的索引0x002:
next_cluster = FAT[0x002];例如,如果FAT[0x002]保存了0x014,那么这个集群将保存文件的下一组数据,那么您可以在FAT[0x014]中查找第三个集群,等等。
如果您处理的是12位FAT,那么这就意味着在索引数组方面有一些复杂性。我觉得索引有点像
// find the 16-bit word that contains the 12-bit FAT entry
uint16_t tmp = ((uint16_t*)(((char*)FAT) + index + (index / 2)));
// keep either the high 12-bits or low 12-bits depending on if the
// index is even or odd.
next_cluster = (tmp >> ((index % 2) ? 4 : 0)) & 0x0fff;当然,这是基于记忆中的脂肪。如果FAT是从媒体读取的,则需要适当地将其转换为要读取的扇区(并将偏移量转换为扇区)。
发布于 2011-04-24 04:53:39
文件的目录项包含第一个群集号。您可以使用它从磁盘的“数据”部分获取实际的集群,再加上FAT中的下一个集群号。
FAT中的条目包含文件中下一个集群的群集号。
因此,您将有一个目录条目,它可能指示第一个集群号为22。然后,您将得到集群22的数据,并查找集群22的FAT条目,比如说,容纳了76。
因此,文件中的下一个集群是编号76,您遵循相同的过程:获取数据,并在FAT条目76中查找下一个集群号。
下一个集群号的特殊值表明,链已经完成,不再可用。我认为(从内存中),这是FAT12的0xFFF,但它可能是一个范围很高的值。
发布于 2011-04-24 04:54:23
脂肪基本上是一个链表。如果文件的开头位于集群2中,那么要查找下一个集群,请查看FAT中的条目2。它将包含该文件的下一个集群的群集号。您一直这样做,直到找到一个包含大于(从内存中) 0ff8h的数字,这标志着文件的结束。
顺便说一句,除非你真的习惯于使用12位脂肪,否则16位脂肪的处理要容易得多。
https://stackoverflow.com/questions/5768679
复制相似问题