本系列文章是《操作系统实战45讲》课程学习过程中的心得体会与问题汇总。
系列文章放入「操作系统实战」分类里。如果对你有帮助,欢迎关注我。
如果你也想一起写一个属于自己的操作系统,直接翻到文末查看。
话不多说,现在进入正题。本文分为两个部分:一、实验环境搭建。二、前4节课遇到的问题与解答。
实验环境搭建
1、一台电脑。电脑上装有Windows或MacOS系统。我用的是MacOS系统。
2、虚拟机。我选择的是VMware Fusion 12(若是Windows,装个最新版VMware即可)。
3、Ubuntu/CentOS系统。我选择的是Ubuntu,作为虚拟机系统,用来实现自己的操作系统。
搭建过程
安装好虚拟机软件VMware,基本都是点下一步,下一步,直到安装完成。
从 这里[1] 下载Ubuntu 20.04系统安装文件,是一个iso文件。
在VMware里创建一个新的虚拟机,用来安装Ubuntu 20.04系统:
选择新建,后面的步骤比较简单,跟着提示做就可以了。
记得Ubuntu需要分配至少1G的内存,不然可能无法正常启动Ubuntu。
- 安装完Ubuntu 20.04后,登录系统,在Ubuntu系统里安装工具(以后我们自己写的系统就叫HelloOS):
1 | # 按下 Control+Option+T 组合键打开一个终端(Windows下是 Control+Alt+T) |
截图如下:
- 克隆HelloOS的源代码并编译(下面的命令继续在Ubuntu终端里执行):
1 | sudo apt install -y git # 安装git工具 |
- 添加grub启动项,用来启动我们的HelloOS:
1 | # 编辑grub的配置文件 |
- 重启Ubuntu系统后,在系统启动项菜单里选择 HelloOS(上下箭头选择HelloOS,然后按回车启动它):
- 启动成功后,如下图所示(HelloOS还没重启代码,要回到Ubuntu,直接重启虚拟机,选上图的第一项来启动):
问题与解答
1、为什么没有出现引导菜单,让我选择HelloOS来启动?
首先,什么是引导菜单?请看上文步骤7中的截图。
答:这与grub的设置有关,菜单项可能隐藏了,按如下操作:
1 | # 进入Ubuntu系统后,进入终端(还记得吗,可以按 Ctrl+Opt+T/Ctrl+Alt+T启动终端) |
把红框的3行,修改成如下图所示(没有的行就加上):
然后更新grub:
1 | # 执行命令 |
更新后,需要重新添加HelloOS的引导项到grub.cfg文件。见上文步骤6、步骤7。
2、重启选择HelloOS启动后显示 error: file `/boot/HelloOS.bin’ not found.
答:这与boot分区是否独立有关。重新进入Ubuntu系统,打开终端(步骤见上文),执行命令:df /boot /
如上,文件系统(Filesystem)一列,两行内容不一样,/boot在/dev/sda1,那就把/boot/grub/grub.cfg文件里的 multiboot2 /boot/HelloOS.bin
改成 multiboot2 /HelloOS.bin
,保存文件。然后重启系统,选择HelloOS启动。
3、重启选择HelloOS启动后显示 error: disk `hd0,msdos2’ not found. 之类的错误
答:可能是在你的Ubuntu系统上,msdos2这个分区不存在。或者你用了gpt分区,如何查看?执行如下命令:
如果是gpt分区,那就修改grub.cfg文件,把 insmod part_msdos
改为 insmod part_gpt
,保存文件。然后重启选HelloOS启动。
4、我用的是CentOS7,为什么没有成功?
答:基本步骤与Ubuntu一样,几乎无差别。但有的人开机遇到了黑屏,没有显示Hello OS!
。还有的人,虚拟机显示了CPU禁止。我是这么做的:修改 grub.cfg
文件,把HelloOS启动项里的 multiboot2
改为 multiboot
,保存文件。重启系统,再进入HelloOS看看。
本文源自 极客时间《操作系统实战45讲》 学习过程中的心得与问题汇总,欢迎扫码加入。
此课程的一系列文章,我都会放到「操作系统实战」分类。如果对你有帮助,可以关注我,一起学习进步。
参考:
[1] http://mirrors.ustc.edu.cn/ubuntu-releases/20.04/ubuntu-20.04.2.0-desktop-amd64.iso