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 modeBootInfo 结构用于从 bootloader 阶段传递信息到 kernelelf 文件logger (用于实现 tiny os 的 打印函数以及内核开发时 debug )Page FaultGP FaultDouble Faultlinked_list_allocator 实现初步的内存分配buddy system 内存分配器spawnFAT32 文件系统shellBuilder (可以选择编译 debug 版和 release 版的镜像)bochs 可以直接加载的内核镜像,而不是通过 dd 工具刻入 bochs/os.img 中