kernel - 在 VirtualBox,运行一个内核

  显示原文与译文双语对照的内容
0 0

我有一个装载程序和一个内核,都写在程序集中。

现在我有两个关于这些文件的问题。 由于装载程序的大小是 512,我可以在VirtualBox中成功地运行引导装载程序的. img 文件。

但是:

  1. 内核大小为 580B,它不被VirtualBox软盘驱动器接受。 我该怎么来? 那是在VirtualBox里运行内核。
  2. 如何从引导程序中将控制转移到内核部件?

我在 Windows 7环境下。

时间: 原作者:

0 0

1- ) 使用MISO使它成为ISO映像


 miso my.iso -ab my.img

( 你必须使用复制/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

原作者:
0 0

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

no_of_sectors设备 8
512 *no_of_sectors db 0

根据扇区更改要调整大小的数字。

秒- 你可以使用中断 13将内核加载到内存中

loading_kernel:
mov,0x1000 ;where_to_load_kernel
for,128 ;DRIVE_NUMBER通常为软硬盘 128,软盘为 0
,0 ;head_no - 开始它的0
mov 0x02 ;读取扇区函数在BIOS中
mov,0x12
mov,0x0002 ;无扇区读取
int 13h ;BIOS中断- 仅在实际模式下使用

jc loading_kernel ;错误重试时
jmp 0 x1000 ;然后你可以直接跳转到内核代码

...