从零开始的操作系统生活03-镜像制作
0、环境配置
安装grub-legacy与xorriso,最后我们会将制作好的镜像放入虚拟机中运行,而不是在虚拟机中再安装一个虚拟机运行
但是安装grub-legacy时会发现报错了,原因应该是因为版本迭代问题导致的,最新的安装包名称应该是grub-efi-amd64
1 |
|
1、mykernel.iso
我们在使用虚拟机安装ubuntu系统的时候,选择的虚拟盘都是.iso后缀格式的,ISO文件是光盘的镜像文件,所有我们要做的事情就是将我们目前所写的内容转换成ISO镜像然后使用虚拟机打开即可
GRUB是一款multiboot loader,在链接中我们可以看到,grub-legacy已经不再维护了,所以我们需要安装替代的包,前面我们提过loader使用multiboot规范,multiboot规范对应的就是Multiboot loader
xorriso是一个用来创建和操作ISO 9660文件系统映像文件的工具,可以用来将影响文件烧录到DVD/CD中
接下来开始制作镜像
我们在Makefile中添加如下语句:
1 |
|
前三句命令负责创建对应文件夹,**$<**表示第一个依赖文件,也就是把mykernel.bin复制到/iso/boot/文件夹中去
grub是引导操作系统的程序,他会根据自己的配置文件去引导内核,这项配置文件就是grub.cfg
set timeout=0是设置启动等待的时间,加入我们的电脑存在两个系统,设置timeout=10,则进入系统之前会给我们10s的时间去选择进入哪一个系统
set default=0表示设置默认进入的系统,计算机都是从0开始的,也就是默认进入第一个系统。当然,我们也只有这一个系统
menuentry指设置启动菜单,My Operating System是菜单名称,multiboot /boot/mykernel.bin是指其中的一个启动项
下面的boot不清楚是干什么的,暂时码住,以后有机会回来解释
运行结束后的grub.cfg内容如下所示:
1 |
|
像看到这个文件内容则需要删除makefile的最后一句rm -rf iso,但是记得下一次编译的时候加上这句话并且先把iso文件夹删除掉
最后grub-mkrescue --output=$@ iso则是使用grub-mkrescue命令制作镜像文件,–output是指定输出文件,但是后面的iso我并不清楚是什么作用,如果是指定文件夹,那么生成的mykernel.iso会在/iso中,但实际上是与/iso同名文件夹,也不需要修改文件的后缀,甚至稍作修改也不会出现问题,此处码住,有待解决
最后的rm -rf iso就是删除无用的文件夹
2、打开mykernel.iso
激动人心的时刻到了,我们经过了三节的努力,终于可以看到一些成果了
首先,本人使用的是virtualbox虚拟机安装的ubuntu 20.04系统,生成的iso镜像文件也在ubuntu系统中,想要再次使用虚拟机运行则需要将iso文件拷贝到windows系统中,这部分使用共享文件夹或者直接拖动即可,大家根据自身情况自行解决这个问题
然后打开VirtualBox,选择新建
操作系统类型和版本要选择Other
点击下一步之后打开虚拟机,然后选择设备->分配光驱->选择虚拟盘
然后将我们制作好的iso镜像添加进去,关闭虚拟机后再次开启即可。
最后的运行效果如下:
3、补充
3.1、timeout
大家也可以试试修改Makefile中的set timeout=10,然后再运行看看结果
3.2、VirtualBox虚拟机中使用VirtualBox
为了方便运行我们的结果,而不是来回调换系统运行调试,并且在参考视频的提示下,我们最终选择使用VIrtualBox虚拟机中再安装VirtualBox虚拟机
首先我的ubuntu虚拟机配置 8192MB 显存 16MB
在ubuntu中安装VirtualBox之前记得设置windows的VirtualBox中的启用嵌套VT-x/AMD-V
具体设置方式如下:设置->系统->处理器->启用嵌套VT-x/AMD-V
如果启用嵌套VT-x/AMD-V是灰色的,请参考链接
然后虚拟机中安装VirtualBox
1 |
|
安装完毕之后打开VIrtualBox,然后和前面的流程相同,创建新的虚拟电脑,不添加镜像,启动虚拟电脑然后添加镜像,最后重启虚拟电脑即可。
最后的最后,我们在Makefile中添加内容
1 |
|
这样每次我们编译完成后只要执行make run即可