tiny_os
1.0.0
Tiny OS是一個運行在x86_64架構上的操作系統。
本項目在linux系統上開發。 windows系統上可以通過安裝WSL運行linux子系統。
如果你使用的是WSL :
windows中安裝一個X Server;推薦安裝Xming 或VcXsvr。-ac啟動X Server , 或者通過GUI 勾選disable access control 。WSL中:WSL (version 1): export DISPLAY=:0WSL2 (version 2): export DISPLAY= $( cat /etc/resolv.conf | grep nameserver | awk ' {print $2} ' ) :0~/.bashrc或者~/.profile文件的末尾。Could not initialize SDL (No available video device) ...或者任何關於GTK 等錯誤,請檢查你的X Server 是否啟動以及是否正確設置了環境變量DISPLAY 。 Rust是一門現代的系統級編程語言,本項目主要使用Rust語言開發。通過Rust 官網下載並安裝。注意:本項目要求安裝nightly版工具鏈。
在安裝完成後,通過rustup安裝llvm-tools :
rustup component add llvm-tools-preview通過cargo安裝一些有用的工具,用於開發:
cargo install cargo-binutilsbochs模擬器通過bochs模擬器進行模擬。源代碼下載鏈接:Source Forge -- Bochs x86 PC emulator 。下載完後, 編譯安裝。
命令如下:
cargo run --release編譯好的內核鏡像路徑為target/os.img 。
通過bximage在./bochs目錄下創建一個os.img文件:
bximage -func=create -hd=10M -imgmode=flat ./bochs/os.img -q通過dd工具將./target/os.img刻入./bochs/os.img中:
# 注意下面的参数 count 要根据生成的 target/os.img 文件的大小进行调整
dd if=target/os.img of=bochs/os.img bs=512 count=250 conv=notruncbochs在目錄下bochs/conf有如下配置文件:
bochsdbg-gdb.bxrc : 可以通過gdb遠程調試,綁定localhost:1234 (需要在編譯bochs時,開啟--enable-gdb-stub )bochsdbg-win : 在window平台上開啟bochs的、帶有圖形界面的debuggerbochsrc.bxrc : 最基礎的bochs配置文件,不帶有debug功能運行bochs ,開啟模擬:
bochs -q -f bochs/conf/bochsrc.bxrcqemu不同於bochs , qemu可以直接加載生成的target/os.img :
qemu-system-x86_64 -drive format=raw,file=bochs/os.img -boot c
項目根目錄下有一個Makefile文件,裡面定義了一些運行和調試的命令:
clean : 用於清理生成的文件build-release : 用於編譯release版內核鏡像build-debug : 用於編譯debug版內核鏡像(未完成)run-bochs : 用於編譯內核鏡像,並啟動bochs模擬run-qemu : 用於編譯內核鏡像,並啟動qemu模擬debug-bochs : 用於編譯內核鏡像,啟動bochs並通過rust-gdb遠程debugdebug-qemu : 用於編譯內核鏡像,啟動qemu並通過rust-gdb遠程debug 本項目主要分為4個部分:
builder : 位於src目錄下,主要用於編譯、構建內核鏡像boot : 位於boot目錄下,是tiny OS的bootloaderboot_info : 位於boot_info目錄下,提供BootInfo結構kernel : 位於kernel目錄下,是tiny OS的內核代碼long mode BootInfo結構用於從bootloader階段傳遞信息到kernel elf文件logger (用於實現tiny os的打印函數以及內核開發時debug ) Page Fault GP Fault Double Fault linked_list_allocator實現初步的內存分配buddy system內存分配器spawn FAT32文件系統shellBuilder (可以選擇編譯debug版和release版的鏡像) bochs可以直接加載的內核鏡像,而不是通過dd工具刻入bochs/os.img中