環境: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:實現一個最簡單的內核—— 極客時間
課程鏈接#
掃碼即可加入: