自己做一个带grub引导的,可以开起OS的img!(踩坑记录)
0x00: 环境介绍
linux kali 2019.4 kde
ubuntu 以及其他linux发行版应该也可以用,毕竟用的远古版本的grub.
0x01: GET grubFILE
其他也可以,但是记作一定要用编译好的版本(或者自己编译)
不然后面grub setup会失败……QaQ
我们需要:
stage1、stage2、与对应文件系统的stage_1_5
反正我是用的这个版本,没试过grub2……
我这里用的是FAT12文件系统……
0x02: make img
dd if=/dev/zero bs=512 count=2880 of=floppy.img
一行dd
完事,因为建出来的img是空的……
0x03: make file system
首先把这个img与某个loop设备相关联.
再开个文件系统.
这里就用loop3作例子好了
losetup /dev/loop3 floppy.img
mkfs.vfat -F 12 /dev/loop3
0x04: 挂载文件系统
随便找个喜欢的目录挂载:(这里是/mnt/tst)
mkdir /mnt/tst
mount /dev/loop3 /mnt/tst
0x05: 安装grub的前置工作
建立grub需要的目录结构:
mkdir -p /mnt/tst/boot/grub
把我们之前说的需要的grub文件复制到/mnt/tst/boot/grub
cp ./stage1 /mnt/tst/boot/grub
cp ./stage2 /mnt/tst/boot/grub
cp ./fat_stage1_5 /mnt/tst/boot/grub
建立两个必要的配置文件: // 我安装时没加菜单凉了……qemu能出grub但是出不了OS
grub.conf
menu.lst
内容如下:
grub.conf: // grub选项
title TSTOS
root (fd0)
kernel /hx_kernel # kernel path
menu.lst: // 设置菜单用的
title TSTOS
root (fd0)
kernel /hx_kernel # kernel path
把这两个文件也丢进/mnt/tst/boot/grub
cp ./grub.conf /mnt/tst/boot/grub
cp ./menu.lst /mnt/tst/boot/grub
然后取消挂载
umount /mnt/tst
0x06: 在img上安装grub
先得有grub:
apt install grub
apt_get install grub
之后
grub --device-map=/dev/null
grub> device (fd0) /dev/loop3
grub> root (fd0)
grub> setup (fd0)
grub> quit
0x07: 解除img与loop设备的关联
losetup -d /dev/loop3
结束! 现在它可以用了1
附: 一个脚本:
#!/bin/bash
dd if=/dev/zero bs=512 count=2880 of=floppy.img
losetup /dev/loop3 floppy.img
mkfs.vfat -F 12 /dev/loop3
mount /dev/loop3 /mnt/tst
mkdir -p /mnt/tst/boot/grub
cp ./stage1 /mnt/tst/boot/grub
cp ./stage2 /mnt/tst/boot/grub
cp ./fat_stage1_5 /mnt/tst/boot/grub
cp ./grub.conf /mnt/tst/boot/grub
cp ./menu.lst /mnt/tst/boot/grub
umount /mnt/tst
grub --device-map=/dev/null
# manual
# device (fd0) /dev/loop3
# root (fd0)
# setup (fd0)
# quit
losetup -d /dev/loop3
echo "Done!"
参考资料:
https://www.cnblogs.com/chaunceyctx/p/7358827.html
https://www.cnblogs.com/WuCountry/archive/2010/01/01/1637344.html
https://blog.csdn.net/RichardGreenhhh/article/details/78087066