1.写在前面
上一篇博客由于我们使用的虚拟机导致无法启动对应的虚拟机,然后就不了了之,今天我带领着你们来搭建对应的环境。
上一篇博客的地址
2.环境的准备
2.1Virtualbox
考虑每个人环境都是不一样的,可能有Mac、Windows的,这儿我们先准备一个虚拟机,我们先下载一个virtualbox,对应的下载地址,然后下载对应好的版本直接安装就可以了。
2.2Ubuntu18
直接按照如下的步骤就可以完成安装。
-
新建虚拟机
-
选择对应的系统
-
设置内存
-
创建虚拟硬盘
-
设置虚拟硬盘类型
-
设置硬盘大小
-
设置硬盘大小和位置
-
设置CPU个数
-
设置显存大小
-
设置镜像
-
设置网络模式
-
启动虚拟机
-
选择中文简体
-
点击安装,选择键盘
-
点击继续
-
点击继续
-
点击现在安装
-
点击继续
-
设置好账号密码,点击继续
-
等待安装
-
安装完成,现在重启
-
再次重启一次,因为这儿有我们的安装盘,需要移出
-
进入系统,准备更新组件
-
重启设备
-
安装增强功能,点击设备,然后点击安装增强功能
-
安装完成,重启,调整对应的分辨率
-
关闭操作系统
2.3创建虚拟硬盘
-
创建虚拟硬盘
-
选择虚拟硬盘的类型大小
-
关联起来
2.4创建操作系统
-
创建虚拟机
-
分配内存
-
关联对应的虚拟硬盘
-
点击创建,至此我们所有的环境准备完毕。
注意:虚拟硬盘os.vdi即跟Ubuntu虚拟机关联又跟myOS虚拟机关联。这个时候我们只需要在Ubuntu虚拟机上进行对虚拟硬盘的改写,就能同步到我们的操作系统
3.安装GRUB
先打开我们的Ubuntu虚拟机,然后打开对应控制台。执行如下的命令:
lsblk
可以看到一共有两块硬盘:sda、sdb,其中sda是Ubuntu系统的专用硬盘,sdb就是我们的目标硬盘os.vdi。
接下来依次执行如下的命令:
//sdb设备只是一块新的硬盘,上面需要建立文件系统才能够使用
//mkfs.ext4即是在sdb上建立ext4文件系统
sudo mkfs.ext4 /dev/sdb
//进入~目录建立hdisk文件夹作为sdb的挂载目录
cd ~
mkdir hdisk
//将/dev/sdb挂载在hdisk目录下,这样我们就能通过访问hdisk目录访问sdb硬盘
sudo mount /dev/sdb ./hdisk
再次输入lsblk命令,可以看到sdb设备已经被加载到了hdisk目录下(可以认为访问hdisk就是访问sdb硬盘)
而后创建boot目录,作为内核的加载目录:
sudo mkdir ./hdisk/boot
将grub安装到boot中(grub可以看做是bootloader,是用来加载操作系统的),这需要借助grub-install工具:
sudo grub-install --boot-directory=./hdisk/boot/ --force --allow-floppy /dev/sdb
若无误则表明grub安装完毕,进入boot目录可以看到多出了grub文件夹。
现在还需做一件事情,那就是配置grub的启动项,在boot/grub目录下新建一个grub.cfg,其中的内容如下:
//设置HelloOS是启动系统的第一个选项
menuentry 'myOS' {
#加载part_msdos、ext2模块
#这是grub的语法
insmod part_msdos
insmod ext2
set root='hd0' #只有一个硬盘,因此设置根目录为hd0(就是hd.vdi)
multiboot2 /boot/COSMOSOS.eki #加载boot目录下的.eki内核文件
boot #加载启动内核文件
}
#设置过时样式为目录
set timeout_style=menu
#设置过时时间
if [ "${timeout}" = 0 ]; then
set timeout=10 #等待10秒钟自动启动
fi
注:上述grub.cfg文件内容暂时不懂没关系,语法的学习可以参考:GRUB2语法学习,并且在下一篇博客会对GRUB、Boot、efi等概念做一个总结,到时候一切都明白了。
保存后关闭虚拟机Ubuntu,启动虚拟机myOS。
注:两个虚拟机不能同时开启,因为两者都挂载了hd.vdi,两个同时开启会出现文件冲突。
4.启动myOS
启动myOS之后可以看到下面的结果:
点击myOS之后,提示找不到eki文件:
之所以找不到eki文件,是因为我们暂时还没有往os.vdi硬盘中放入内核文件,而这就是我们以后要做的工作——将内核编译为eki文件放入grub文件夹下,而后利用虚拟机myOS进行测试!