【问题标题】:bios loading more sectors ... with virtual disk image as harddisk for qemu not workingBIOS 加载更多扇区...使用虚拟磁盘映像作为 qemu 的硬盘无法正常工作
【发布时间】:2012-07-20 04:43:18
【问题描述】:

我一直在编写一个 2 阶段引导加载程序,第一阶段只是加载第二阶段并设置 gdt 并打开保护模式和所有 .我浏览了几本手册和以前的问题,但我仍然面临这个问题。使用 BIOS int 0x13 调用加载扇区会全部为零,我无法找出原因。这是我阅读该部门的代码。我什至尝试读取第一个扇区,但这也给了内存中的所有零。

    read:
    xorw    %ax,%ax
    movw    %ax,%es
    movw    $0x1000,%bx
    movb    $0x2, %ah   #command to read the sector
    movb    $0x80, %dl  #read from the hard disk
    movb    $0x1, %al  # read one sector
    movb    $0x1, %ch  #track no
    movb    $0x1, %cl  # read the first sector
    movb    $0x1 , %dh  # head number
    int     $0x13    
    jc      read
    movw    $0x11fe, %di
    movw    (%di),%ax
    cmpw     $0xaa55,%ax  # testing the signature
    jne     error
    ljmp    $0x0,$0x1000

所以,如您所见,我正在尝试再次读取第一个扇区(只是为了测试),但内存中包含全零 我正在使用我使用以下内容创建的虚拟磁盘映像:

    dd if=/dev/zero of=obj/kern/kernel.img~ bs=512 count=20000 2>/dev/null
dd if=obj/boot/boot of=obj/kern/kernel.img~ conv=notrunc 2>/dev/null
dd if=obj/boot1/boot of=obj/kern/kernel.img~ seek=1 conv=notrunc 2>/dev/null
dd if=obj/kern/kernel of=obj/kern/kernel.img~ seek=3 conv=notrunc 2>/dev/null
mv obj/kern/kernel.img~ obj/kern/kernel.img

请帮我提出您的建议。

【问题讨论】:

    标签: bootloader bios


    【解决方案1】:

    简单的答案是第一个扇区是扇区1,磁道0,磁头0。

    令人高兴的答案是,虽然编写引导加载程序很容易,但让它工作是最令人满意的。

    【讨论】:

    • 我试过了,但没用。我不确定我创建的虚拟磁盘是否可以使用 CHS 标准访问。所以我用 LBA 标准和 in 和 out 指令尝试了它,它工作了:)。无论如何感谢您的回复。真的很想知道这段代码失败的真正原因。
    猜你喜欢
    • 2013-11-20
    • 1970-01-01
    • 1970-01-01
    • 2014-01-21
    • 2019-12-11
    • 1970-01-01
    • 2019-01-30
    • 2020-06-12
    • 1970-01-01
    相关资源
    最近更新 更多