http://sig9.com/bochs-grub
Bochs+Grub, Testing Kernels
Lack of resources means finding newer, crooked ways of doing things, including emulating them. Being an os development enthusiast with just a single x86 PC at my disposal, I have often relied on Bochs for emulation purposes such as trying out Linux, BSD and even my own kernels. Here is how I use a file backed floppy disk image with grub installed in it for quick kernel try-outs; because rebooting can be a pain. The steps described here are specific to GNU/Linux based systems, and some of them may require super user privileges. Ofcourse, you need to have Bochs and Grub installed.
- Create the floppy disk image (1.44M capacity).
$ dd if=/dev/zero of=floppy.img bs=1024 count=1440
- Create and attach a loopback device to the image.
$ losetup /dev/loop1 floppy.img
- Create a file system (EXT2FS).
$ mkfs /dev/loop1
- Mount the device, so we can read and write to it.
$ mount -o loop /dev/loop1 /mnt
- Setup grub directory with stage1 and stage2. For this step, you will need to determine the location of grub "stage1" and "stage2" files. Some common locations are "/boot/grub" "/usr/share/grub", "/usr/local/share/grub/" etc. The following worked for me (on my Fedora Core 3 system).
$ mkdir -p /mnt/boot/grub
$ cp /boot/grub/stage1 /boot/grub/stage2 /mnt/boot/grub/
- Create the grub configuration file.
$ vi /mnt/boot/grub/grub.conf
The following is a sample "grub.conf". More about the menu here .
# My Grub.conf
And unmount the device.
#
title=MyTestKernel
root (fd0)
kernel /mykern
title=TestLinux
root (fd0)
kernel /vmlinuz
$ umount /mnt
- Install and embed grub into the image.
$ grub --device-map=/dev/null
Upon which you should get the grub interface. Enter the following commands into it -
grub> device (fd0) /dev/loop1
grub> root (fd0)
grub> setup (fd0)
grub> quit
- Detach the loopback device.
$ losetup -d /dev/loop1
- Create and attach a loopback device to the image and mount it.
$ losetup /dev/loop1 floppy.img
$ mount -o loop /dev/loop1 /mnt
- Perform operations on the image file, such as installing new kernel images or updating grub.conf. Once thats done, perform the next step.
- Unmount device and detach the loopback device.
$ umount /mnt
$ losetup -d /dev/loop1
$ dd if=floppy.img of=/dev/fd0