在VirtualBox中运行内核

时间:2014-07-04 11:24:59

标签: kernel virtualbox bootloader osdev

我有一个bootloader和一个内核都是用汇编编写的。

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

可是:

  1. 内核的大小为580B,VirtualBox软盘驱动器不接受它。 我怎么走出这个?那就是在VirtualBox中运行内核。
  2. 如何从bootloader将控制权转移到内核部分?
  3. 我在Windows 7环境中。

2 个答案:

答案 0 :(得分:0)

1-)使用MISO制作ISO影像

 miso my.iso -ab my.img

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

2-)我并不完全理解,但我会尽可能地帮助你。 我想你想从内核中调用bootloader中的一些代码部分。 如您所知,您必须知道要调用的代码的内存地址,或者您可以使用.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

答案 1 :(得分:0)

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

no_of_sectors equ 8
次512 * no_of_sectors db 0

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

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

loading_kernel:
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;没有阅读的部门
int 13h; BIOS中断 - 仅在实模式下使用

jc loading_kernel;在重试错误的情况下 jmp 0x1000;然后你可以简单地跳转到内核代码