我正在创建一个基本的MBR,它读取分区表并加载可引导分区的第一个扇区。我对CHS和LBA的寻址方式感到困惑。我在一个教程中读到,除了兼容性原因之外,CHS或多或少是不被使用的。因此,我选择使用LBA(int13h扩展)。要加载驱动器的扇区,我必须从分区的分区表中读取CHS值。只有这样,我才能将其转换为LBA,并将其存储在“磁盘地址包”中。
我的疑问是,分区表中的CHS是每个1字节。我应该直接接受这个值并将其转换为LBA (或),我必须首先将它转换为,
Cylinder = 10 bits
Sector = 6 bits
Head = 8 bits
然后把它转化成LBA?
注意:我的MBR必须能够访问HDD和USB上的扇区--这就是动机。
操作系统: Ubuntu
装配者:气体
发布于 2016-12-21 09:59:20
分区表条目使用CHS只是为了与非常老的OSes向后兼容。
它们还有LBA地址的字段:
请注意,这使用LBA32,因此分区大小和位置都有限制。引用维基百科的话:
由于块地址和大小存储在使用32位的MBR的分区表中,使用具有512字节扇区(实际或模拟)的驱动器的分区的最大大小和最高起始地址不能超过2−512字节(2,199,023,255,040字节或每扇区4,294,967,295 (232−1)扇区×512 (29)字节),从而缓解了这种容量限制是开发GPT的主要动机之一。
CHS地址也是如此。
使用CHS字段的OSes的大小限制约为8 GiB。
因此,如果你想要与他们兼容,你需要保持在这个限度内。
可以很容易地在Internet上导出或找到转换LBA <-> CHS的公式,您可以根据扇区编号(即LBA)进行思考,并在创建分区条目时将其转换为CHS (或对CHS太大的分区使用默认值1023、255、63 tuble )。
行的底部,使用LBA字段。
或者去找GPT。
https://stackoverflow.com/questions/41226127
复制相似问题