对于之前我们制作好的内核文件,我们还需要下面三个步骤
一:制作镜像
二.安装grub2
三.启动
这里不描述U盘如何安装了,如果你能掌握制作虚拟镜像的方法,自然U盘不在话下了,只需修改一下有些步骤即可完成了.
这里所有的步骤都是在UBUNTU 下完成的,其他linux命令稍有不同,本人没有安装其他版本的linux 也就没有实验过,
不过你可以参考我的思路,然后修改修改命令,你的制作文档就完成了.
一 制作虚拟设备镜像,这里我们模拟一个U盘
1 产生虚拟镜像
方法一:DD工具创建镜像
dd if=/dev/zero bs=512 count=20480 of=a.img
*方法二:(需要安装BOCHS,当然还有各种办法)
接着试第二种方法,bochs自带bximage工具
linux输入命令 bximage
提示:一路回车创建了10M的镜像!
2、使用fdisk对生成的img文件进行分区
sudo fdisk a.img
m:帮助 a:增加引导标记 n:创建新分区
w:完成操作后记得写入*** p:显示设备列表
3.1 n 创建一个新分区 全部按默认来来大话 (2048-20479)只有一个主分区(前面留出的空间作为引导用)
3.2 a 加入引导标记 入下图 启动 *标记
3.3 p 看一下是否正确
设备 启动 起点 终点 块数 Id 系统
a.img1 * 2048 20159 9056 83 Linux
3.4 w 保存
3格式化分区mkfs
一个镜像文件里可能包含多个分区,所以不能简单 mount -o loop a.img,
我们需要把 a.img 里面包含的每个分区映射出来后在一个一个挂载,(因为需要格式化分区!!)
所以需要一个工具来读分区表,kpartx 就是这样一个在特定设备上读取分区表并为每个分区创建映射的工具,
-a 参数表示加入分区映射;-v 参数表示完成后输出结果:
3.1将a.img映射至loop设备,并在mapper目录下生成分区设备
*sudo kpartx -av a.img
(注意提示看看被挂载到哪个设备上了。或者3.2)
3.2查看挂载目录,当执行了上面大命令,会在/dev/mapper/目录下生成loop(x)p1类似这样名字的文件
这里/dev/loop(x)p1 被链接到/dev/loop(x).
ls -l /de v/mapper
brw-r--r-- 1 crazy crazy 252, 0 3月 17 22:16 loop0p1
接着格式化分区:
*sudo mkfs /dev/mapper/loop0p1(根据loop0p1)
二.安装grub2
1 使用mount挂载需要放置grub的分区(还没有卸载loop0p1)
sudo mkdir /mnt/img
sudo mount /dev/mapper/loop0p1 /mnt/img
2.安装GRUB2 (ubuntu 是这样 ,其他可能是 grub2-install )
*sudo grub-install --no-floppy --boot-directory=/mnt/img /dev/loop0
(注意!这里是/dev/loop0,和前面kpartx映射至的loop设备对应 如:/dev/mapper/loop0p1对应着/dev/loop0)
(可能会报一些提示:看到安装完成,如果grub能正常启动就算成功了)
三、启动内核
启动之前确保虚拟机内存设置(内存推荐265M,内存设置过小 提示: out of memory 导致启动不起来的情况)
若没有配置grub.cfg文件则:
set root=hd0,msdos1 (这里以你实际的情况为准,请输入ls查看你的磁盘设备和相关分区情况)
multiboot /kernel.img
boot
#题外话,这里可以启动内核大命令配置到./grub/grub.cfg 这样方便很多.
二话不说查阅:grub2文档,配置出一个配置文件
set timeout=15
set root=(hd0,msdos1)
#set default=0 # Set the default menu entry
insmod jpeg
if loadfont /grub/fonts/unicode.pf2 ;then
set gfxmode=800x600
insmod gfxterm
set lang=zh_CN
insmod vbe
if terminal_output gfxterm
then
true
else
terminal gfxterm
fi
fi
set menu_color_normal=white/black
set menu_color_highlight=white/blue
background_image (hd0,msdos1)/grub/logo.jpg
//这里弄了一张图片 前面加载的模块也是为了这张图片准备的,也拖累了虚拟的速度,这里只是玩一下图片而已.
//不需要的话可以吧上面的一切都销毁掉insmod jpeg 这里开始
menuentry "cows" {
set root=(hd0,msdos1) //这里也是看你的分区号了,自行更改
# chainloader +1
# 制权转交 +`1就是读取另一个操作系统安装分区的第一个扇区
multiboot /kernel.img
boot
}
贴上一张风骚grub界面
这样所有的内核准备工作全部完成....... 感觉是否其实还是挺容易的..但是一路找不到详细的文档,自己摸索还真不容易.