我正在开发一个简约的操作系统。我创建了一个MBR,它在Master Partition Table
中查找活动分区。我面临的问题是将扇区加载到内存中。
关于装载行业,我遇到了两个方案,
我读到几乎所有BIOS都支持CHS,但问题在于它可以解决最近8GB
这个问题并且LBA已经解决了这个缺点。
说到这些,我想问一些问题:
问题1:
最好选择哪种方案?如果CHS,我有什么方法可以访问8GB以上的标记吗?
问题2:
在LBA中,我如何能够从(例如)分区4加载扇区?
ie:我如何能够找到第4个分区的起始块号?
注意:该方案发生在16 bit real mode
。
感谢。
操作系统:Ubuntu
编译器:CC
答案 0 :(得分:2)
使用BIOS扩展读取功能,该功能使用64位LBA(Sata驱动器将使用LBA的低48位)。
INT 13 - IBM/MS INT 13 Extensions - EXTENDED READ
AH = 42h
DL = drive number
DS:SI -> disk address packet
Return: CF clear if successful
AH = 00h
CF set on error
AH = error code
disk address packet's block count field set to number of blocks
successfully transferred
Format of disk address packet:
Offset Size Description
00h BYTE 10h (size of packet)
01h BYTE reserved (0)
02h WORD number of blocks to transfer
04h DWORD -> transfer buffer
08h QWORD starting absolute block number (LBA)
问题提及MBR。通常,硬盘驱动器上的第一个扇区是一个分区扇区,它包括一个分区表(通常是4个分区),哪个是活动分区。分区引导代码通常重定位(Microsoft重定位到00000h:00600h),并将MBR从活动分区读入00000h:07c00h,然后跳转到MBR代码。