bios加载更多扇区......虚拟磁盘映像为qemu的硬盘无法正常工作

时间:2012-07-20 21:37:27

标签: bootloader bios

我一直在编写一个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

请帮我解决你的建议。

1 个答案:

答案 0 :(得分:0)

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

  

快乐的答案是,尽管编写引导加载程序很容易,但让它工作最令人满意。