操作系统实战:实验环境搭建、热门问题解答


本系列文章是极客时间《操作系统实战45讲》学习过程中的心得体会与问题汇总。

系列文章将会放入「操作系统实战」分类里。如果对你有帮助,欢迎关注我。

话不多说,进入正题。本文分为两个部分:一、实验环境搭建。二、前4节课遇到的问题与解答。

实验环境搭建

  1. 一台电脑。电脑上装有Windows或MacOS系统。我用的是MacOS系统。
  2. 虚拟机。我选择的是VMware Fusion 12(若是Windows,装个最新版VMware即可)。
  3. Ubuntu/CentOS系统。我选择的是Ubuntu,作为虚拟机系统,用来实现自己的操作系统。

搭建过程

  1. 安装好虚拟机软件VMware,基本都是点下一步,下一步,直到安装完成。

  2. 这里 下载Ubuntu 20.04系统安装文件,是一个iso文件。

  3. 在VMware里创建一个新的虚拟机,用来安装Ubuntu 20.04系统:

新建虚拟机

选择新建,后面的步骤比较简单,跟着提示做就可以了。

记得Ubuntu需要分配至少1G的内存,不然可能无法正常启动Ubuntu。

  1. 安装完Ubuntu 20.04后,登录系统,在Ubuntu系统里安装工具(以后我们自己写的系统就叫HelloOS):
# 按下 Control+Option+T 组合键打开一个终端(Windows下是 Control+Alt+T)
# 在终端里输入如下命令行,并按 回车,开始执行
# gcc是编译工具集,包含了C语言编译器等。nasm是Ubuntu下的汇编器。
sudo apt install -y gcc nasm

截图如下:

安装编译工具

  1. 克隆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的引导分区里
  1. 添加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
  1. 重启Ubuntu系统后,在系统启动项菜单里选择 HelloOS(上下箭头选择HelloOS,然后按回车启动它):

启动HelloOS

  1. 启动成功后,如下图所示(HelloOS还没重启代码,要回到Ubuntu,直接重启虚拟机,选上图的第一项来启动):

启动成功

问题与解答

1、为什么没有出现引导菜单,让我选择HelloOS来启动?

首先,什么是引导菜单?请看上文步骤7中的截图。
答:这与grub的设置有关,菜单项可能隐藏了,按如下操作:

# 进入Ubuntu系统后,进入终端(还记得吗,可以按 Ctrl+Opt+T/Ctrl+Alt+T启动终端)
# 输入命令编辑grub配置文件
sudo vim /etc/default/grub

把红框的3行,修改成如下图所示(没有的行就加上):

设置grub

然后更新grub:

# 执行命令
sudo update-grub2

更新后,需要重新添加HelloOS的引导项到grub.cfg文件。见上文步骤6、步骤7。

2、重启选择HelloOS启动后显示 error: file `/boot/HelloOS.bin’ not found.

HelloOS.bin未找到

答:这与boot分区是否独立有关。重新进入Ubuntu系统,打开终端(步骤见上文),执行命令:df /boot /

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分区方案

如果是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,然后重试。

此课程的一系列文章,我都会放到「操作系统实战」分类专栏。如果对你有帮助,可以关注我,一起学习进步

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 23
    评论
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值