操作系统实战:实验环境搭建热门问题解答
Posted 小杰666
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了操作系统实战:实验环境搭建热门问题解答相关的知识,希望对你有一定的参考价值。
文章目录
本系列文章是极客时间《操作系统实战45讲》学习过程中的心得体会与问题汇总。
系列文章将会放入「操作系统实战」分类里。如果对你有帮助,欢迎关注我。
话不多说,进入正题。本文分为两个部分:一、实验环境搭建。二、前4节课遇到的问题与解答。
实验环境搭建
- 一台电脑。电脑上装有Windows或MacOS系统。我用的是MacOS系统。
- 虚拟机。我选择的是VMware Fusion 12(若是Windows,装个最新版VMware即可)。
- Ubuntu/CentOS系统。我选择的是Ubuntu,作为虚拟机系统,用来实现自己的操作系统。
搭建过程
-
安装好虚拟机软件VMware,基本都是点下一步,下一步,直到安装完成。
-
从 这里 下载Ubuntu 20.04系统安装文件,是一个iso文件。
-
在VMware里创建一个新的虚拟机,用来安装Ubuntu 20.04系统:
选择新建,后面的步骤比较简单,跟着提示做就可以了。
记得Ubuntu需要分配至少1G的内存,不然可能无法正常启动Ubuntu。
- 安装完Ubuntu 20.04后,登录系统,在Ubuntu系统里安装工具(以后我们自己写的系统就叫HelloOS):
# 按下 Control+Option+T 组合键打开一个终端(Windows下是 Control+Alt+T)
# 在终端里输入如下命令行,并按 回车,开始执行
# gcc是编译工具集,包含了C语言编译器等。nasm是Ubuntu下的汇编器。
sudo apt install -y gcc nasm
截图如下:
- 克隆HelloOS的源代码并编译(下面的命令继续在Ubuntu终端里执行):
sudo apt install -y git # 安装git工具
git clone https://gitee.com/lmos/cosmos # 克隆源代码
cd cosmos/lesson02/HelloOS/ # 进入源码目录
make # 编译HelloOS内核文件HelloOS.bin
sudo cp HelloOS.bin /boot/HelloOS.bin # 拷贝内核文件到grub的引导分区里
- 添加grub启动项,用来启动我们的HelloOS:
# 编辑grub的配置文件
sudo vim /boot/grub/grub.cfg
# 在键盘上依次按下:
shift + g + o
# 把下面内容粘贴到文末
#### BEGIN HelloOS.bin ####
menuentry 'HelloOS' {
insmod part_msdos #GRUB加载分区模块识别分区
insmod ext2 #GRUB加载ext文件系统模块识别ext文件系统
set root='hd0,msdos1' #注意boot目录挂载的分区,这是我机器上的情况
multiboot2 /boot/HelloOS.bin #GRUB以multiboot2协议加载HelloOS.bin
boot #GRUB启动HelloOS.bin
}
#### End /boot/HelloOS.bin ####
# 在键盘上依次按下,然后回车,添加的内容就保存好了:
esc + shift + ; + wq!
# 在终端重启系统,输入:
reboot
- 重启Ubuntu系统后,在系统启动项菜单里选择 HelloOS(上下箭头选择HelloOS,然后按回车启动它):
- 启动成功后,如下图所示(HelloOS还没重启代码,要回到Ubuntu,直接重启虚拟机,选上图的第一项来启动):
问题与解答
1、为什么没有出现引导菜单,让我选择HelloOS来启动?
首先,什么是引导菜单?请看上文步骤7中的截图。
答:这与grub的设置有关,菜单项可能隐藏了,按如下操作:
# 进入Ubuntu系统后,进入终端(还记得吗,可以按 Ctrl+Opt+T/Ctrl+Alt+T启动终端)
# 输入命令编辑grub配置文件
sudo vim /etc/default/grub
把红框的3行,修改成如下图所示(没有的行就加上):
然后更新grub:
# 执行命令
sudo update-grub2
更新后,需要重新添加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看看。
5、选择HelloOS启动后黑屏?
答:如果使用uefi启动,并且是虚拟机,在虚拟机设置里把固件类型从UEFI
改为传统Bios
,然后重试。
此课程的一系列文章,我都会放到「操作系统实战」分类专栏。如果对你有帮助,可以关注我,一起学习进步。
以上是关于操作系统实战:实验环境搭建热门问题解答的主要内容,如果未能解决你的问题,请参考以下文章
Spark入门实战系列--2.Spark编译与部署(上)--基础环境搭建