制作带有 GRUB 引导功能的软盘镜像文件

调试自己的操作系统时一般都会用到虚拟机、软盘镜像文件或硬盘镜像文件。我用的虚拟机是 Bochs ,无论是软盘镜像还是硬盘镜像文件的格式都很简单,或者说根本就没格式,就是个空白的文件,而磁头数、柱面数等参数在 Bochs 的配置文件中指定。

这样有个好处就是生成镜像文件非常简单。比如说创建软盘镜像:

dd if=/dev/zero bs=512 count=2880 of=floppy.img

为了方便我们需要在镜像文件中建立文件系统,有了文件系统才比较方便放置、修改我们自己的内核和应用程序。
下面的命令在 Fedora 12 中测试通过。其他的 Linux 系统可能命令有些区别。

首先将软盘镜像与某个 Loop 设备关联。
losetup /dev/loop7 floppy.img

然后格式化:
mkfs.ext2 /dev/loop7

或者:
mkfs.msdos /dev/loop7

这里推荐采用fat12 格式创建文件系统,方便在win下用 winImage 操作。

这是文件系统就建立好了。下面是在镜像文件中安装 GRUB。

首先将镜像文件中的文件系统挂在到我们主系统的目录树上。
mount -o loop /dev/loop7 /mnt/

然后建立 GRUB 需要的目录结构。
mkdir -p /mnt/boot/grub

再然后拷贝需要的文件。
cp /boot/grub/stage1 /mnt/boot/grub
cp /boot/grub/stage2 /mnt/boot/grub

cp /boot/grub/e2fs_stage1_5 /mnt/boot/grub
或者
cp /boot/grub/fat_stage1_5 /mnt/boot/grub

创建 grub 配置文件:
vi /mnt/boot/grub/grub.conf

内容如下(这里假设我们的内核文件放在软盘镜像的/boot/目录,命名为kernel):
title test os 0.0.1
    root (fd0)
    kernel /boot/kernel

卸载镜像文件
umount /mnt/

在镜像文件中安装 GRUB

grub --device-map=/dev/null
grub> device (fd0) /dev/loop7
grub> root (fd0)
grub> setup (fd0)
grub> quit

将软盘镜像与 loop 设备的关联解除。
losetup -d /dev/loop7

这时软盘镜像已经可以使用了。
可以用 file 命令查看一下:

file floppy.img
floppy.img: DOS floppy 1440k, x86 hard disk boot sector

如果要修改软盘镜像中文件也很简单,将其挂载到某个目录就可以了。

losetup /dev/loop7 floppy.img

mount -o loop /dev/loop7 /mnt/

然后就是正常的文件操作了。

如果需要在 win 下操作,可以使用 winImage, 或者自己写个小程序来操作。

 

后记:

原文写于几年前,当时 GRUB2 还不成熟,用的人很少。现在 GRUB2 大有替代 GRUB 的趋势,本文中的方法在使用 GRUB2 的系统上已经不适用了。因此本文的内容对喜欢折腾操作系统的新手来说可能有些过时了。不过我还是选择保留了这篇Blog ,一是纪念学生时代的那段时光,也希望能对仍旧使用 GRUB 作为引导程序的爱好者们提供一点帮助。
 关于在 GRUB2 上如何创建可引导软盘镜像还有硬盘镜像文件,我将另写一篇 Blog 来说明。

你可能感兴趣的:(虚拟机,linux,File,dos,Blog,disk)