整合grub
1.安装grub
从ftp://alpha.gnu.org/gnu/grub/下载GRUB Legacy的最后一个版本0.97的编译好的文件grub-0.97-i386-pc.tar.gz.
在当前文件夹cworkplace目录下:
tar zxvf grub-0.97-i386-pc.tar.gz
#建立软盘映像:
dd if=/dev/zero of=boot.img bs=512 count=2880
#在boot.img中安装grub:
sudo losetup /dev/loop0 boot.img
sudo dd if=./grub-0.97-i386-pc/boot/grub/stage1 of=/dev/loop1 bs=512 count=1
sudo dd if=./grub-0.97-i386-pc/boot/grub/stage2 of=/dev/loop1 bs=512 seek=1
sudo losetup -d /dev/loop1
在qemu中测试是否可以进入grub
qemu -fda boot.img
2.整合grub, kernel, busybox在一起
#拷贝boot.img到当前目录(在cworkplace目录下)
sudo cp ./grub-0.97-i386-pc/boot.img ./
#创建rootfs文件夹
mkdir rootfs
#创建一个32M的磁盘镜像文件
dd if=/dev/zero of=32M.img bs=4096 count=8192
#给磁盘映像分区
fdisk -C 16065 -H 255 -S 63 32M.img
解释:设置Opuntu.img的磁头数为255、磁道数为16065、扇区数为63,同时给磁盘分区。
这里我们只分一个区,并设置该分区为引导分区。示意图如下:
3.格式化分区
sudo losetup -o 1048576 /dev/loop1 32M.img
sudo mkfs.ext3 -m 0 /dev/loop1
解释:我们把前面的2048个扇区(0~2047)作为引导扇区使用,格式化分区从第2048个扇区开始,所以1048576=2048*512
#拷贝之前做好的initrd.img和bzImage.img到rootfs
sudo mount /dev/loop1 rootfs/
sudo cp ./Linuxkernel./linux-3.9/arch/x86/boot/bzImage ./rootfs/
sudo cp ./init/initrd.img ./rootfs/
4.添加grub
sudo mkdir rootfs/boot
sudo mkdir rootfs/boot/grub
sudo cp ./grub-0.97-i386-pc/boot/grub/* ./rootfs/boot/grub
sudo vi ./rootfs/boot/grub/menu.lst
default 0
timeout 30
title linux on 32M.img
root (hd0,0)
kernel (hd0,0)/bzImage root=/dev/ram init=/bin/ash
initrd (hd0,0)/initrd.img
5.卸载磁盘镜像
sudo umount rootfs
sudo losetup -d /dev/loop0
6.利用grub启动软盘,在硬盘上添加grub功能
qemu -boot a -fda boot.img -hda 32M.img
执行图中的两步(注意空格):
7.运行成功之后,32M.img就是最终成果,集成了busybox,linux,kernel3.9
qemu -hda 32M.img
直接回车,启动linux
系统启动之后:
最后的文件视图:
参考链接:
http://blog.youkuaiyun.com/qp120291570/article/details/9100749
http://blog.sina.com.cn/s/blog_70dd169101013gcw.html