Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2151563
  • 博文数量: 438
  • 博客积分: 3871
  • 博客等级: 中校
  • 技术积分: 6075
  • 用 户 组: 普通用户
  • 注册时间: 2011-09-10 00:11
个人简介

邮箱: wangcong02345@163.com

文章分类

全部博文(438)

文章存档

2017年(15)

2016年(119)

2015年(91)

2014年(62)

2013年(56)

2012年(79)

2011年(16)

分类: LINUX

2016-11-05 16:31:29

1. 构建用grub引导linux-0.12内核的硬盘镜像 先上图
a. 下图是grub引导linux-0.12的图


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

发现grub引导Image格式时不会执行boot/bootsect.s,但会执行boot/setup.s
  1. cong@msi:/work/os/linux-0.12/boot$ gp "SVGA"
  2. setup.s:msg1:        db    "Press to see SVGA-modes available or any other key to continue."

2.下面是构建硬盘镜像的脚本
  1. cong@msi:/work/os/rootfs/grub/grub0.97$ cat createminix.sh
  2. #!/bin/sh
  3. TOPDIR=`pwd`
  4. install_grub()
  5. {
  6.     ./grub_sh --device-map=/dev/null <<EOF
  7.     device (hd0) hdminix.img
  8.     geometry (hd0) 65 16 63
  9.     root (hd0,0)
  10.     setup (hd0)
  11.     quit
  12. EOF
  13. }
  14. create_fs()
  15. {
  16.     echo "cong: next create fs"
  17.     #create filesystem
  18.     cd /tmp/minix

  19.     #先创建系统目录
  20.     sudo mkdir -pv etc dev bin usr lib var boot
  21.     sudo mknod ./dev/tty1 c 4 1
  22.     sudo mknod ./dev/console c 5 1
  23.     sudo cp $TOPDIR/bash ./bin/sh
  24.     #sudo ln -s busybox ./bin/sh
  25.     #sudo cp $TOPDIR/libc.so.6 ./lib/
  26.     #sudo cp $TOPDIR/ld-linux.so.2 ./lib/
  27.     sudo cp -arf $TOPDIR/grub ./boot/
  28.     sudo cp -arf $TOPDIR/bzImage ./boot/
  29.     sudo cp -arf $TOPDIR/Image ./boot/
  30.     #sudo cp $TOPDIR/vmlinux ./boot/
  31.     cd -
  32. }
  33. mount_fs()
  34. {
  35.     echo "cong: next losetup /dev/loop2"
  36.     sudo losetup /dev/loop2 ./hdminix.img
  37.     #512*2048=1048576
  38.     echo "cong: next losetup /dev/loop3"
  39.     sudo losetup -o 1048576 /dev/loop3 /dev/loop2
  40.     echo "cong: next show losetup all"
  41.     sudo losetup -a

  42.     echo "cong: next mount "
  43.     mkdir /tmp/minix
  44.     sudo mount -t minix /dev/loop3 /tmp/minix/
  45. }
  46. #fdisk hdminix.img to minix 80
  47. make_fs()
  48. {
  49.     #32M=32×1024×14/512=65536
  50.     dd if=/dev/zero of=./hdminix.img bs=1M count=32
  51.     fdisk ./hdminix.img <<EOF
  52.     n
  53.     p
  54.     1
  55.     2048
  56.     65535
  57.     t
  58.     80
  59.     w
  60. EOF
  61.     sleep 1
  62.     fdisk -l ./hdminix.img

  63.     echo "cong: next losetup /dev/loop2"
  64.     sudo losetup /dev/loop2 ./hdminix.img
  65.     #512*2048=1048576
  66.     echo "cong: next losetup /dev/loop3"
  67.     sudo losetup -o 1048576 /dev/loop3 /dev/loop2
  68.     echo "cong: next show losetup all"
  69.     sudo losetup -a

  70.     echo "cong: next mkfs minix /dev/loop3"
  71.     sudo ./mkfs /dev/loop3 65535

  72.     echo "cong: next mount "
  73.     mkdir /tmp/minix
  74.     sudo mount -t minix /dev/loop3 /tmp/minix/
  75.     create_fs
  76.     install_grub
  77. }
  78. umount_fs()
  79. {
  80.     sudo umount /tmp/minix
  81.     sudo losetup -d /dev/loop3
  82.     sudo losetup -d /dev/loop2
  83.     sudo losetup -a
  84. }

  85. clean_fs()
  86. {
  87.     echo "cong: next umount /tmp/minix"
  88.     sudo umount /tmp/minix
  89.     echo "cong: next rm -rf /tmp/minix"
  90.     sudo rm -rf /tmp/minix
  91.     echo "cong: next losetup -d"
  92.     sudo losetup -d /dev/loop3
  93.     sudo losetup -d /dev/loop2
  94.     echo "cong: next show losetup"
  95.     sudo losetup -a
  96.     echo "cong: next rm -rf ./hdminix.img"
  97.     rm -rf ./hdminix.img
  98. }

  99. mytest()
  100. {
  101.     echo "TOPDIR=$TOPDIR"
  102. }
  103. case "$1" in
  104.     fs)
  105.         make_fs
  106.         ;;
  107.     clean)
  108.         clean_fs
  109.         ;;
  110.     mount)
  111.         mount_fs
  112.         ;;
  113.     umount)
  114.         umount_fs
  115.         ;;
  116.     test)
  117.         mytest
  118.         ;;
  119.     *)
  120.         make_fs
  121.         ;;
  122. esac
3.脚本及用到的工具打包
grub0.rar(下载后改名为grub0.97_ext2_minix.tar.gz)
4.使用说明
  1. 1.目录说明
  2. cong@msi:/work/os/rootfs/grub/grub0.97$ tree
  3. .
  4. ├── bash -->a.out格式
  5. ├── bochrc -->bochs启动配置
  6. ├── bzImage -->linux-2.4.12的内核
  7. ├── createminix.sh -->创建minix文件系统硬盘镜像的脚本
  8. ├── creatext2.sh -->创建ext文件系统硬盘镜像的脚本
  9. ├── grub -->在grub的install时会用到
  10. │   ├── default
  11. │   ├── device.map
  12. │   ├── e2fs_stage1_5
  13. │   ├── fat_stage1_5
  14. │   ├── installed-version
  15. │   ├── jfs_stage1_5
  16. │   ├── menu.lst -->现在默认是引导bzImage
  17. │   ├── menu.lst_bak
  18. │   ├── minix_stage1_5
  19. │   ├── reiserfs_stage1_5
  20. │   ├── stage1
  21. │   ├── stage2
  22. │   └── xfs_stage1_5
  23. ├── grub-floppy
  24. ├── grub-install
  25. ├── grub-md5-crypt
  26. ├── grub-mkdevicemap
  27. ├── grub-probe
  28. ├── grub-reboot
  29. ├── grub-set-default
  30. ├── grub_sh -->grub的命令行,但与grub目录重名,改名了
  31. ├── grub-terminfo
  32. ├── Image -->linux-0.12的内核
  33. ├── Makefile -->make qemu 启动qemu
  34. ├── mkfs -->格式化minix文件系统的命令
  35. └── Readme.txt


  36. 2. 使用说明
  37. 2.1 创建minix的硬盘镜像
  38. a. 执行createminix.sh脚本会在当前目录下生成hdminix.img
  39. cong@msi:/work/os/rootfs/grub/grub0.97$ ./执行createminix.sh

  40. b.启动qemu即可看到启动grub的界面
  41. cong@msi:/work/os/rootfs/grub/grub0.97$ make qemu
  42. 默认是引导了bzImage,需要默认引导Image就把menu.lst中的default 0 --->default 1

  43. 2.2 创建ext2的硬盘镜像
  44. a. 执行creatext2.sh脚本会在当前目录下生成hdc.img
  45. cong@msi:/work/os/rootfs/grub/grub0.97$ ./creatext2.sh

  46. b.启动qemu即可看到启动grub的界面
  47. cong@msi:/work/os/rootfs/grub/grub0.97$ make qemu
  48. 默认是引导了bzImage

阅读(1477) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~