如何从MBR的分区表中访问CHS信息?

时间:2016-12-19 15:36:42

标签: assembly operating-system kernel x86-16 mbr

我正在创建一个基本的MBR,它读取分区表并加载可引导分区的第一个扇区。我对CHS和LBA寻址模式感到困惑。我在教程中读到CHS或多或少没有被使用,除了兼容性原因。 所以,我选择使用LBA(INT 13h扩展)。要加载驱动器的扇区,我必须从该分区的分区表中读取CHS值。只有这样我才能将其转换为LBA并将其存储在“磁盘地址包”中。

我的疑问是,分区表中的CHS每个都是1个字节。我应该直接获取此值并将其转换为LBA(或)我必须先将其转换为

Cylinder = 10 bits
Sector   = 6 bits
Head     = 8 bits

然后将其转换为LBA?

注意:我的MBR必须能够访问HDD和USB上的扇区 - 这就是动机。

操作系统:Ubuntu

汇编程序:气体

1 个答案:

答案 0 :(得分:2)

Partition table entries仅使用CHS来向后兼容非常旧的操作系统 他们还有LBA地址的字段:



Format of the MBR partition table


注意,这使用LBA32,因此分区大小和位置有限制。引用维基百科:

  

由于块地址和大小使用32位存储在MBR的分区表中,因此使用具有512字节扇区(实际或仿真)的驱动器的分区的最大大小和最高起始地址不能超过2 TiB-512字节(2,199,023,255,040字节或4,294,967,295(232-1)扇区×每扇区512(29)字节)。[2]减轻这种能力限制是GPT发展的主要动机之一。

CHS寻址也是如此 使用CHS字段的操作系统的大小限制为大约8 GiB 因此,如果您想与它们兼容,则需要保持在该限制之下。

转换LBA的公式< - >可以在Internet上轻松派生或找到CHS,您可以根据扇区号(即LBA)进行思考,并在创建分区条目时转换为CHS(或者使用默认值1023,255,63对于CHS来说分区太大)

该行的底部,使用LBA字段 或者去GPT