【问题标题】:Running a Kernel in VirtualBox在 VirtualBox 中运行内核
【发布时间】:2014-07-04 11:24:59
【问题描述】:

我有一个用汇编语言编写的引导加载程序和一个内核。

现在我对这些文件有两个问题。由于引导加载程序的大小为 512B,我能够在 VirtualBox 中成功运行引导加载程序的 .img 文件。

但是:

  1. 内核大小为 580B,VirtualBox 软驱不接受。 我该如何摆脱这种状态?那就是在 VirtualBox 中运行内核。
  2. 如何将控制权从引导加载程序转移到内核部分?

我在 Windows 7 环境中。

【问题讨论】:

  • 有人可以在这里回复我吗?拜托!
  • 软盘映像需要是扇区大小的倍数,即 512 字节。而且,只是一个警告,只有前 512 个字节会被加载到内存中;您必须编写自己的代码来加载软盘图像的其余部分。

标签: kernel virtualbox bootloader osdev


【解决方案1】:

1-)使用 MISO 制作 ISO 映像

 miso my.iso -ab my.img

(您必须使用 copy /b 将它们复制到一个 img 文件中)

2-)我没有完全理解,但我会尽我所能帮助你。 我认为您想从内核调用引导加载程序内部的一些代码部分。 如您所知,您必须知道要调用的代码的内存地址,或者您可以使用 .inc 文件来调用这部分代码。如果您想让内核能够在运行时访问引导加载程序的内存段,例如我的第一个建议是,您必须知道要调用它的代码的内存地址,例如:

[Bits 16]
[ORG 0x7c00]
start:
...
times 256-($-$$) db 0
blbla:;I know that is in the [0x7d00]
jmp $
times 256-($-$$) db 0
dw 0xAA55

随时问我问题:afcultraos@gmail.com

【讨论】:

    【解决方案2】:

    对于第一部分,在内核代码的末尾添加一行 -
    ...

    no_of_sectors equ 8
    乘以 512*no_of_sectors db 0

    根据扇区更改数字以固定大小。

    第二个 - 您可以使用中断 13h 将内核加载到内存中

    加载内核:
    mov bx,0x1000 ;where_to_load_kernel
    mov dl,128 ;DRIVE_NUMBER 通常 128 用于 HDD,0 用于软盘
    mov dh,0 ;head_no - 从 0 开始
    mov ah,0x02 ;BIOS 中读取扇区功能
    mov al,0x12
    mov cx,0x0002 ;要读取的扇区数
    诠释 13h ; BIOS 中断 - 仅在实模式下使用

    jc loading_kernel ;万一出错重试
    jmp 0x1000 ;那么就可以直接跳转到内核代码了

    【讨论】:

      猜你喜欢
      • 2015-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-11
      相关资源
      最近更新 更多