a. 下图是grub引导linux-0.12的图

b.对比一下Linux-0.12软盘引导的打印

发现grub引导Image格式时不会执行boot/bootsect.s,但会执行boot/setup.s
-
cong@msi:/work/os/linux-0.12/boot$ gp "SVGA"
-
setup.s:msg1: db "Press
to see SVGA-modes available or any other key to continue."
2.下面是构建硬盘镜像的脚本
-
cong@msi:/work/os/rootfs/grub/grub0.97$ cat createminix.sh
-
#!/bin/sh
-
TOPDIR=`pwd`
-
install_grub()
-
{
-
./grub_sh --device-map=/dev/null <<EOF
-
device (hd0) hdminix.img
-
geometry (hd0) 65 16 63
-
root (hd0,0)
-
setup (hd0)
-
quit
-
EOF
-
}
-
create_fs()
-
{
-
echo "cong: next create fs"
-
#create filesystem
-
cd /tmp/minix
-
-
#先创建系统目录
-
sudo mkdir -pv etc dev bin usr lib var boot
-
sudo mknod ./dev/tty1 c 4 1
-
sudo mknod ./dev/console c 5 1
-
sudo cp $TOPDIR/bash ./bin/sh
-
#sudo ln -s busybox ./bin/sh
-
#sudo cp $TOPDIR/libc.so.6 ./lib/
-
#sudo cp $TOPDIR/ld-linux.so.2 ./lib/
-
sudo cp -arf $TOPDIR/grub ./boot/
-
sudo cp -arf $TOPDIR/bzImage ./boot/
-
sudo cp -arf $TOPDIR/Image ./boot/
-
#sudo cp $TOPDIR/vmlinux ./boot/
-
cd -
-
}
-
mount_fs()
-
{
-
echo "cong: next losetup /dev/loop2"
-
sudo losetup /dev/loop2 ./hdminix.img
-
#512*2048=1048576
-
echo "cong: next losetup /dev/loop3"
-
sudo losetup -o 1048576 /dev/loop3 /dev/loop2
-
echo "cong: next show losetup all"
-
sudo losetup -a
-
-
echo "cong: next mount "
-
mkdir /tmp/minix
-
sudo mount -t minix /dev/loop3 /tmp/minix/
-
}
-
#fdisk hdminix.img to minix 80
-
make_fs()
-
{
-
#32M=32×1024×14/512=65536
-
dd if=/dev/zero of=./hdminix.img bs=1M count=32
-
fdisk ./hdminix.img <<EOF
-
n
-
p
-
1
-
2048
-
65535
-
t
-
80
-
w
-
EOF
-
sleep 1
-
fdisk -l ./hdminix.img
-
-
echo "cong: next losetup /dev/loop2"
-
sudo losetup /dev/loop2 ./hdminix.img
-
#512*2048=1048576
-
echo "cong: next losetup /dev/loop3"
-
sudo losetup -o 1048576 /dev/loop3 /dev/loop2
-
echo "cong: next show losetup all"
-
sudo losetup -a
-
-
echo "cong: next mkfs minix /dev/loop3"
-
sudo ./mkfs /dev/loop3 65535
-
-
echo "cong: next mount "
-
mkdir /tmp/minix
-
sudo mount -t minix /dev/loop3 /tmp/minix/
-
create_fs
-
install_grub
-
}
-
umount_fs()
-
{
-
sudo umount /tmp/minix
-
sudo losetup -d /dev/loop3
-
sudo losetup -d /dev/loop2
-
sudo losetup -a
-
}
-
-
clean_fs()
-
{
-
echo "cong: next umount /tmp/minix"
-
sudo umount /tmp/minix
-
echo "cong: next rm -rf /tmp/minix"
-
sudo rm -rf /tmp/minix
-
echo "cong: next losetup -d"
-
sudo losetup -d /dev/loop3
-
sudo losetup -d /dev/loop2
-
echo "cong: next show losetup"
-
sudo losetup -a
-
echo "cong: next rm -rf ./hdminix.img"
-
rm -rf ./hdminix.img
-
}
-
-
mytest()
-
{
-
echo "TOPDIR=$TOPDIR"
-
}
-
case "$1" in
-
fs)
-
make_fs
-
;;
-
clean)
-
clean_fs
-
;;
-
mount)
-
mount_fs
-
;;
-
umount)
-
umount_fs
-
;;
-
test)
-
mytest
-
;;
-
*)
-
make_fs
-
;;
- esac

4.使用说明
-
1.目录说明
-
cong@msi:/work/os/rootfs/grub/grub0.97$ tree
-
.
-
├── bash -->a.out格式
-
├── bochrc -->bochs启动配置
-
├── bzImage -->linux-2.4.12的内核
-
├── createminix.sh -->创建minix文件系统硬盘镜像的脚本
-
├── creatext2.sh -->创建ext文件系统硬盘镜像的脚本
-
├── grub -->在grub的install时会用到
-
│ ├── default
-
│ ├── device.map
-
│ ├── e2fs_stage1_5
-
│ ├── fat_stage1_5
-
│ ├── installed-version
-
│ ├── jfs_stage1_5
-
│ ├── menu.lst -->现在默认是引导bzImage
-
│ ├── menu.lst_bak
-
│ ├── minix_stage1_5
-
│ ├── reiserfs_stage1_5
-
│ ├── stage1
-
│ ├── stage2
-
│ └── xfs_stage1_5
-
├── grub-floppy
-
├── grub-install
-
├── grub-md5-crypt
-
├── grub-mkdevicemap
-
├── grub-probe
-
├── grub-reboot
-
├── grub-set-default
-
├── grub_sh -->grub的命令行,但与grub目录重名,改名了
-
├── grub-terminfo
-
├── Image -->linux-0.12的内核
-
├── Makefile -->make qemu 启动qemu
-
├── mkfs -->格式化minix文件系统的命令
-
└── Readme.txt
-
-
-
2. 使用说明
-
2.1 创建minix的硬盘镜像
-
a. 执行createminix.sh脚本会在当前目录下生成hdminix.img
-
cong@msi:/work/os/rootfs/grub/grub0.97$ ./执行createminix.sh
-
-
b.启动qemu即可看到启动grub的界面
-
cong@msi:/work/os/rootfs/grub/grub0.97$ make qemu
-
默认是引导了bzImage,需要默认引导Image就把menu.lst中的default 0 --->default 1
-
-
2.2 创建ext2的硬盘镜像
-
a. 执行creatext2.sh脚本会在当前目录下生成hdc.img
-
cong@msi:/work/os/rootfs/grub/grub0.97$ ./creatext2.sh
-
-
b.启动qemu即可看到启动grub的界面
-
cong@msi:/work/os/rootfs/grub/grub0.97$ make qemu
- 默认是引导了bzImage