Using grub in floppy image file to start your own kernel inside bochs

1.3k views Asked by At

Basically I've followed the instructions here http://sig9.com/bochs-grub to create a bare image file which does nothing but lets the BIOS start GRUB.

The problems are:

  • The kernel I am writing will be 32-bit, using http://www.jamesmolloy.co.uk/tutorial_html/index.html for a start, but my host (physical) machine is x86_64 with bochs configured like this:

    ./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

so I'm not sure this will work, even after solving the next issue:

  • The grub shell won't start when I boot up bochs.

All I get is:

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

Does anyone have any idea what I could be doing wrong?

I suspect following the instructions from http://sig9.com/bochs-grub had as an effect copying my host's 64-bit grub binaries onto floppy.img which is supposed to be a 32-bit emulated system.

1

There are 1 answers

1
ughoavgfhw On BEST ANSWER

That last line is the debugger printing out the current line of code. Press 'c' and hit enter, and it should start running. As for using 32 bit, it should work as x86-64 processors will run in protected mode just like any other x86 processor.