系列文章将会放入「操作系统实战」分类里。如果对你有帮助,欢迎关注我。
话不多说,进入正题。本文分为两个部分:一、实验环境搭建。二、前4节课遇到的问题与解答。
安装好虚拟机软件VMware,基本都是点下一步,下一步,直到安装完成。
从 这里 下载Ubuntu 20.04系统安装文件,是一个iso文件。
在VMware里创建一个新的虚拟机,用来安装Ubuntu 20.04系统:
选择新建,后面的步骤比较简单,跟着提示做就可以了。
记得Ubuntu需要分配至少1G的内存,不然可能无法正常启动Ubuntu。
# 按下 Control+Option+T 组合键打开一个终端(Windows下是 Control+Alt+T)
# 在终端里输入如下命令行,并按 回车,开始执行
# gcc是编译工具集,包含了C语言编译器等。nasm是Ubuntu下的汇编器。
sudo apt install -y gcc nasm
截图如下:
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的配置文件
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
首先,什么是引导菜单?请看上文步骤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。
答:这与boot分区是否独立有关。重新进入Ubuntu系统,打开终端(步骤见上文),执行命令:df /boot /
如上,文件系统(Filesystem)一列,两行内容不一样,/boot在/dev/sda1,那就把/boot/grub/grub.cfg文件里的 multiboot2 /boot/HelloOS.bin
改成 multiboot2 /HelloOS.bin
,保存文件。然后重启系统,选择HelloOS启动。
答:可能是在你的Ubuntu系统上,msdos2这个分区不存在。或者你用了gpt分区,如何查看?执行如下命令:
如果是gpt分区,那就修改grub.cfg文件,把 insmod part_msdos
改为 insmod part_gpt
,保存文件。然后重启选HelloOS启动。
答:基本步骤与Ubuntu一样,几乎无差别。但有的人开机遇到了黑屏,没有显示Hello OS!
。还有的人,虚拟机显示了CPU禁止。我是这么做的:修改 grub.cfg
文件,把HelloOS启动项里的 multiboot2
改为 multiboot
,保存文件。重启系统,再进入HelloOS看看。
答:如果使用uefi启动,并且是虚拟机,在虚拟机设置里把固件类型从UEFI
改为传统BIOS
,然后重试。
此课程的一系列文章,我都会放到「操作系统实战」分类专栏。如果对你有帮助,可以关注我,一起学习进步。