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

小付付 15576 0

调试自己的操作系统时一般都会用到虚拟机、软盘镜像文件或硬盘镜像文件。我用的虚拟机是 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, 或者自己写个小程序来操作。

地址:https://blog.csdn.net/liyuanbhu/article/details/7559953

标签: #linux

  • 评论列表

留言评论