前言
實現一個操作系統一直是我的一個願望,當然為了不只是願望,因此近期開始嘗試實現。搜索了相關資料后,計划先從清華大學的ucore操作系統開始,完成其8個實驗,之后再進一步修改、添加新功能,逐步實現自己的OS
另外,博客已經很久沒更新了,這是時隔3年的第一次更新,之后也會更多通過博客園記錄學習過程
內容
完成實驗環境的搭建
開發環境
ucore實驗與運行需要在Linux上,因為Win還是比較方便,所以我使用的是虛擬機安裝Linux,虛擬機使用VMware,Linux發行版使用最新版的Ubuntu 20.04
ucore實驗編寫時使用Win的VS Code,較為流暢、方便(當然也可以直接在Ubuntu中使用VS Code編輯),但是編譯、調試、運行OS時需要使用虛擬機的Ubuntu,為了使得兩者無縫切換,可以將Win的相應目錄映射到Ubuntu虛擬機/mnt目錄下。如圖我映射了Win下的整個A盤,映射名稱為a,映射到了Ubuntu的/mnt/hgfs/a目錄
下載ucore
使用git從github中下載,github地址,如下:
git clone https://github.com/chyyuu/ucore_os_lab.git
由於git clone比較慢,因此我是直接在github上下載的zip壓縮包
安裝qemu
ucore使用qemu模擬器運行,qemu支持多種cpu架構的模擬,如i386、arm、mips等,通過apt可安裝qemu,如下:
sudo apt-get install qemu-system
編譯內核
從github下載的ucore_os_lab目錄中,ucore_os_lab/labcodes_answer為較為完整的os代碼,首先通過編譯lab1的代碼了解ucore編譯過程。
- 進入
ucore_os_lab/labcodes_answer/lab1_result
目錄 - 使用
make clean
清空編譯結果 - 使用
make
命令編譯
編譯成功后生成一系列目標文件,主要有:
- ucore.img:被qemu訪問的虛擬硬盤文件
- kernel: ELF格式的toy ucore kernel執行文,被嵌入到了ucore.img中
- bootblock: 虛擬的硬盤主引導扇區(512字節),包含了bootloader執行代碼,被嵌入到了ucore.img中
- sign:外部執行程序,用來生成虛擬的硬盤主引導扇區
編譯完成后使用make qemu
即可啟動內核運行
內核調試
內核開發過程中不可能一次成功,需要反復調試、運行,為了使調試過程更為直觀、易操作,使用Ubuntu中的VS Code進行調試。VS Code需要做如下配置:
- 將lab1_result目錄在VS Code中打開
- 點擊運行-創建launch.json文件,選擇gdb調試器
- VS Code會自動創建該文件模板,在配置項中只需修改和增加下面兩個
"miDebuggerServerAddress": "127.0.0.1:1234",
"program": "bin/kernel"
完成配置后可通過VS Code進行調試
- 使用
make gdb
使qemu進入調試模式
- 在內核代碼中添加斷點
- 啟動調試
- 進行調試
參考
- ucore文檔 https://chyyuu.gitbooks.io/ucore_os_docs/content/
- 學堂在線課程 https://next.xuetangx.com/course/THU08091000267/1516699
- 手把手教你利用VS Code+Qemu+GDB調試Linux內核 https://zhuanlan.zhihu.com/p/105069730