实战目的:建立自己的操作系统
本节目标:搭建实验环境
课程来源:操作系统实战45讲
实验环境:windows
总体思路
我们使用Ubuntu进行操作系统(COSMOS)的开发工作, 为了避免套娃操作(虚拟机启动Ubuntu,Ubuntu再启动一个虚拟机运行COSMOS),将一块硬盘同时挂载在两个虚拟机下,在Ubuntu里进行修改,COSMOS里进行验证。
前置准备
在虚拟机上安装Ubuntu
点击新建,名字输入Ubuntu
内存选4G,硬盘选“现在创建虚拟硬盘”,之后选vdi、动态分配,10G,点击创建。
现在开始安装Ubuntu,先将iso文件加载为虚拟光盘。点击设置 -> 存储,选择本地的iso文件
然后点击启动,进行安装。安装并启动之后可以点击设备 -> 安装增强功能,来获得更好的使用体验
新建虚拟硬盘
在virtualBox的设置 -> 存储里新建虚拟硬盘,选择100M大小。
进入Ubuntu,查看当前磁盘情况:lsblk
可以看到有块sdb(我已挂载,因此有挂载点)
将其格式化并挂载:1
2
3
4sudo mkfs.ext4 /dev/sdb
cd ~
mkdir hdisk
mount /dev/sdb ./hdisk
mount命令是临时挂载,如果要开机自动挂载,需要写到/etc/fstab文件1
sudo vim /etc/fstab
在最后一行加入:1
/dev/sdb /home/zgq/hdisk ext4 defaults 0 0
目录名根据实际调整。
注:磁盘常用命令:1
2
3
4lsblk 查看当前磁盘情况
df -lh 查看文件系统情况 -l 查看挂载点
parted -l 会列出文件系统类型
fdisk -l 查看当前未挂载硬盘
新建虚拟机COSMOS
新建COSMOS,注意在选择硬盘时选择已有的100M硬盘

安装并配置grub
grub是在启动时用来引导操作系统的工具。计算机启动时,首先读取MBR(主引导记录),找到启动管理器grub的安装地址,然后运行grub,grub让用户选择启动某个操作系统。
首先在Ubuntu里创建目录sudo mkdir hdisk/boot
然后安装grubsudo grub-install --boot-directory=./hdisk/boot/ --force --allow-floppy /dev/sdb
—boot-directory:执行grub的启动位置
—force —allow-floppy :指向我们的虚拟硬盘设备文件/dev/loop0
然后在hidsk/boot/grub下建立grub.cfg, grub通过这个文件找到我们的操作系统1
2
3
4
5
6
7
8
9
10
11menuentry 'COSMOS' {
insmod part_msdos
insmod ext2
set root='hd0' #我们的硬盘只有一个分区
multiboot2 /boot/COSMOS.eki #COSMOS.eki文件
boot #引导启动
}
set timeout_style=menu
if [ "${timeout}" = 0 ]; then
set timeout=10 #等待10秒钟自动启动
fi
语法可以看Grub2语法学习
启动COSMOS
关闭Ubuntu,因为一块硬盘不能同时被两个运行的虚拟机挂载。然后启动COSMOS,可以看到已经出现我们的COSMOS,不过点击之后会报错,那是正常的,因为还没有/boot/COSMOS.eki这个内核文件

故障排查
如果启动COSMOS时grub的报错信息不对,一般是文件路径有问题,通过grub rescue的命令进行排查1
ls (hd0)/boot/grub/
看看有无我们写的grub.cfg。如果还有报错重新进行grub安装这步
参考链接:
计算机是如何启动的?
Linux之——挂载新硬盘方法