环境:Windows 下的 Ubuntu 18.04 虚拟机
实践一下#
🎯目标:让自己的系统输出 "Hello OS"
下载源码#
- 可在系统任意位置,打开终端执行以下命令,下载源码到虚拟机上
git clone https://gitee.com/lmos/cosmos.git
生成 bin 文件#
- 在库中具体位置:/lesson02/HelloOS 下,编译源码,生成 HelloOS.bin
- 首先,需要安装工具 gcc、make、nasm,默认只有 nasm 没有,其它工具如没有再安装
sudo apt update
sudo apt install nasm
- 然后,执行编译即可,默认按照 Makefile 里的规则,生成 HelloOS.bin
make
移动 bin 文件#
- 将 HelloOS.bin 放到 /boot/ 目录下
mv HelloOS.bin /boot/
修改 grub 启动配置⭐#
- 修改 /boot/grub/grub.cfg 文件
- 使用 sudo 权限,用 vim 打开
sudo vim /boot/grub/grub.cfg
- 在最后位置插入以下代码,注意修改两个地方:set root、multiboot2
menuentry 'HelloOS' {
insmod part_msdos # GRUB加载分区模块识别分区
insmod ext2 # GRUB加载ext文件系统模块识别ext文件系统
set root='hd0,msdos4' # 注意boot目录挂载的分区
multiboot2 /boot/HelloOS.bin # GRUB以multiboot2协议加载HelloOS.bin
boot # GRUB启动HelloOS.bin
}
- 修改内容参考此步骤,再打开一个终端,观察 df /boot/ 的结果,关注两个地方:文件系统、挂载点
- 文件系统⭐
- 若为 /dev/sda1,即 1 对应修改 set root='hd0,msdos1'
- 如果不是 sda [其它系统环境],还需看情况修改 [看课程评论]
- 挂载点⭐
- 若为 /boot,对应修改 multiboot2 /HelloOS.bin
- 若为 /,则无需修改
PS:使用:w!
保存,使用:q
退出编辑
重启机器#
- 重启机器,在加载系统前疯狂按 shift 键 [也可能是其他键,如 esc 键],进入 grub 引导界面
- 选择自己的系统,按 enter 键
- 如果此处报错,主要涉及系统类型(物理机、其它虚拟机系统)、系统分区类型(UEFI)、分区表类型(GPT)等因素,可参考以下参考内容👇
参考内容#
如果在其他环境下运行,可参考课程里的评论和相关博客
- 操作系统实战 45 讲 01:运行 HelloOS——CSDN
- pedro/pos—— 码云
- 可在非桌面端(如 WSL2)下实现
- 彭东的【操作系统实战】交流群核心问题汇总—— 石墨
- ❗ 这里基本都能找到答案!
- 02 | 几行汇编几行 C:实现一个最简单的内核—— 极客时间
课程链接#
扫码即可加入: