MiniOS 是一個面向操作系統開發學習者的、微型的操作系統內核,可以運行在32位x86 架構的CPU 上。 MiniOS 專注於對操作系統開發中的核心概念和基礎原理的學習與研究,並基於通用硬件對操作系統中的各基本子系統或模塊進行實現。
流行的Linux 、 FreeBSD 等操作系統內核固然很好,然而它們卻並不適合內核開發的初學者。一方面,這些操作系統內核已經發展了很多年,積累了十分龐大的代碼量(發佈於2005 年的Linux 內核早期版本v2.6.12 就已經有大約400 萬行代碼),另一方面,因為應用在生產環境中的需要,這些內核代碼中包含了大量和操作系統基本原理無關的細節,初學者很難抓到其中的要領。因此,從一個簡單的、代碼量較少的操作系統內核入手,使用較短的時間熟悉並掌握操作系統內核開發領域的核心概念和基礎原理,等把這些基礎性知識掌握到一定程度,再投身於Linux 等實用內核的開發,對於內核初學者來說是一個比較現實可行的策略。即使不打算從事內核開發,通過一個易於入手的內核學習一些操作系統相關的基礎知識,也會有利於寫出更健壯、性能更好的應用程序。
MiniOS 主要基於C 語言和x86 彙編語言開發,使用的開發工具包括:
其中,Binutils 是一套對二進製文件進行操作的工具集,包括創建靜態庫的工具ar,從二進製文件中去除符號表以減小文件體積的工具strip 等。
MiniOS 當前從軟盤中啟動,啟動流程為:
由於MiniOS 是一個面向學習者的操作系統內核,因此目前主要運行在虛擬機中,可選的虛擬機有Bochs 和Qemu 。
在Bochs 中運行MiniOS
sudo apt-get install bochs進行安裝,也可以先下載Bochs 的源碼再進行編譯安裝,通過源碼進行安裝可以選擇想要的Bochs 版本。tar zxvf misc/80m.img.tar.gz . ,從硬盤鏡像壓縮包中解壓出硬盤鏡像。bochs命令啟動Bochs 虛擬機,Bochs 首先會從bochsrc 文件中讀取配置信息,然後對Bochs 給出的運行提示信息進行確認便可讓MiniOS 在Bochs 內運行。在Qemu 中運行MiniOS
sudo apt-get install qemu-system-x86進行安裝,也可以下載Qemu 的源代碼進行編譯安裝。tar zxvf misc/80m.img.tar.gz . ,從硬盤鏡像壓縮包中解壓出硬盤鏡像。./launch-qemu.sh命令啟動Qemu 虛擬機,之後MiniOS 將直接在Qemu 內開始運行。 Qemu 虛擬機沒有使用像bochsrc 一樣的配置文件,配置信息是通過命令行選項指定的,腳本launch-qemu.sh 中包含了當前使用的配置選項。 通過使用Bochs 或Qemu 中自帶的調試功能可以對MiniOS 進行彙編語言級的調試,但由於彙編程序比較冗長且難以閱讀,這種調試方式使用起來不太方便。幸運的是,Bochs 和Qemu 中都內置了gdb 支持,通過和gdb 提供的遠程調試功能配合,可以對MiniOS 進行C 源碼級的調試。
使用Bochs+gdb 調試MiniOS
./launch-bochs-gdb.sh ,所運行的shell 腳本會在一個新的終端窗口中運行gdb,並加載debug 版的內核二進製文件。target remote :2345和Bochs 建立連接。使用Qemu+gdb 調試MiniOS
./launch-bochs-gdb.sh ,所運行的shell 腳本會在一個新的終端窗口中運行gdb ,並加載debug 版的內核二進製文件。target remote :1234和Qemu 建立連接。 # 编译 MiniOS 内核和用户程序 init,并写入到软盘镜像 a.img 中
make image
# 清除所有 .o 目标文件
make clean
# 清除所有 .o 目标文件和可执行文件
make realclean