在软盘映像文件中使用 grub 在 bochs 中启动您自己的内核

Posted

技术标签:

【中文标题】在软盘映像文件中使用 grub 在 bochs 中启动您自己的内核【英文标题】:Using grub in floppy image file to start your own kernel inside bochs 【发布时间】:2011-06-30 19:43:07 【问题描述】:

基本上我已经按照http://sig9.com/bochs-grub 此处的说明创建了一个裸映像文件,它什么都不做,只是让 Bios 启动 GRUB。

问题是:

我正在编写的内核将是 32 位的,首先使用 http://www.jamesmolloy.co.uk/tutorial_html/index.html,但我的主机(物理)机器是 x86_64,bochs 配置如下:

./configure --prefix=/usr --enable-vbe --without-wx --enable-cpu-level=6 \ --enable-fpu \ --enable-plugins --enable-x86-64 --enable-smp \ --enable-long-phy-address --enable-debugger --enable-disasm --enable-debugger-gui \ --enable-raw-serial --enable-vmx --enable-x86-debugger --enable-iodebug

所以我不确定这是否可行,即使在解决了下一个问题之后:

当我启动 bochs 时,grub shell 不会启动。

我得到的是:

00000000000i[SYS  ] bx_pc_system_c::Reset(HARDWARE) called
00000000000i[CPU0 ] cpu hardware reset
00000000000i[APIC0] allocate APIC id=0 (MMIO enabled) to 0x00000000fee00000
00000000000i[CPU0 ] CPU[0] is the bootstrap processor
00000000000i[CPU0 ] CPUID[0x00000000]: 00000003 756e6547 6c65746e 49656e69
00000000000i[CPU0 ] CPUID[0x00000001]: 00000f20 00000800 00002020 078bfbff
00000000000i[CPU0 ] CPUID[0x00000002]: 00410601 00000000 00000000 00000000
00000000000i[CPU0 ] CPUID[0x00000003]: 00000000 00000000 00000000 00000000
00000000000i[CPU0 ] CPUID[0x00000004]: 00000000 00000000 00000000 00000000
00000000000i[CPU0 ] CPUID[0x80000000]: 80000008 00000000 00000000 00000000
00000000000i[CPU0 ] CPUID[0x80000001]: 00000000 00000000 00000101 2a100800
00000000000i[CPU0 ] CPUID[0x80000002]: 20202020 20202020 20202020 6e492020
00000000000i[CPU0 ] CPUID[0x80000003]: 286c6574 50202952 69746e65 52286d75
00000000000i[CPU0 ] CPUID[0x80000004]: 20342029 20555043 20202020 00202020
00000000000i[CPU0 ] CPUID[0x80000006]: 00000000 42004200 02008140 00000000
00000000000i[CPU0 ] CPUID[0x80000007]: 00000000 00000000 00000000 00000000
00000000000i[CPU0 ] CPUID[0x80000008]: 00003028 00000000 00000000 00000000
00000000000i[PLGIN] reset of 'unmapped' plugin device by virtual method
00000000000i[PLGIN] reset of 'biosdev' plugin device by virtual method
00000000000i[PLGIN] reset of 'speaker' plugin device by virtual method
00000000000i[PLGIN] reset of 'extfpuirq' plugin device by virtual method
00000000000i[PLGIN] reset of 'iodebug' plugin device by virtual method
00000000000i[PLGIN] reset of 'ioapic' plugin device by virtual method
00000000000i[PLGIN] reset of 'keyboard' plugin device by virtual method
00000000000i[PLGIN] reset of 'harddrv' plugin device by virtual method
00000000000i[PLGIN] reset of 'serial' plugin device by virtual method
00000000000i[PLGIN] reset of 'parallel' plugin device by virtual method
00000000000i[XGUI ] [x] Mouse off
00000000000i[     ] set SIGINT handler to bx_debug_ctrlc_handler
Next at t=0
(0) [0x00000000fffffff0] f000:fff0 (unk. ctxt): jmp far f000:e05b         ; ea5be000f0

有人知道我做错了什么吗?

我怀疑按照 http://sig9.com/bochs-grub 的说明将主机的 64 位 grub 二进制文件复制到 floppy.img 应该是 32 位仿真系统。

【问题讨论】:

sig9.com/bochs-grub 已经死了,你能分享一下你是如何在软盘上安装 grub 的吗? 【参考方案1】:

最后一行是调试器打印出当前代码行。按“c”并回车,它应该开始运行。至于使用 32 位,它应该可以工作,因为 x86-64 处理器将像任何其他 x86 处理器一样在保护模式下运行。

【讨论】:

谢谢。我现在觉得好傻哈哈。我盯着它看,没有意识到它只是一个断点。

以上是关于在软盘映像文件中使用 grub 在 bochs 中启动您自己的内核的主要内容,如果未能解决你的问题,请参考以下文章

在 C 函数调用中传递 char 字符串时,Bochs (2.4.6)/GRUB (0.97) “错误 13 无效或不受支持的可执行格式”

如何以编程方式创建可引导 CD?

bochs helloworld程序

创建一个没有挂载的虚拟软盘映像? [关闭]

在Mac中安装bochs并启动

在虚拟机上运行 HelloX Kernel