git-try-it / tiny_os

使用 rust 开发的64位操作系统,可运行在 x86-64 架构上,目前仍在开发中。

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Tiny OS

简介

Tiny OS 是一个运行在 x86_64 架构上的操作系统。

环境配置

开发平台

本项目在 linux 系统上开发。windows 系统上可以通过安装 WSL 运行 linux 子系统。

如果你使用的是 WSL:

  • windows 中安装一个 X Server;推荐安装 XmingVcXsvr
    • 需要通过 -ac 启动 X Server , 或者通过 GUI 勾选 disable access control
  • WSL 中:
    • 如果使用的是 WSL (version 1):
    export DISPLAY=:0
    • 如果使用的是 WSL2 (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 语言开发。通过Rust 官网下载并安装。注意:本项目要求安装 nightly 版工具链。

在安装完成后,通过 rustup 安装 llvm-tools:

rustup component add llvm-tools-preview

通过 cargo 安装一些有用的工具,用于开发:

cargo install cargo-binutils

安装 bochs 模拟器

通过 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=notrunc

运行 bochs

在目录下 bochs/conf 有如下配置文件:

  • bochsdbg-gdb.bxrc: 可以通过 gdb 远程调试,绑定 localhost:1234(需要在编译 bochs 时,开启 --enable-gdb-stub)
  • bochsdbg-win: 在 window 平台上开启 bochs 的、带有图形界面的 debugger
  • bochsrc.bxrc: 最基础的 bochs 配置文件,不带有 debug 功能

运行 bochs,开启模拟:

bochs -q -f bochs/conf/bochsrc.bxrc

运行 qemu

不同于 bochsqemu 可以直接加载生成的 target/os.img:

qemu-system-x86_64 -drive format=raw,file=bochs/os.img -boot c

Makefile

项目根目录下有一个 Makefile 文件,里面定义了一些运行和调试的命令:

  • clean: 用于清理生成的文件
  • build-release: 用于编译 release 版内核镜像
  • build-debug: 用于编译 debug 版内核镜像 (未完成)
  • run-bochs: 用于编译内核镜像,并启动 bochs 模拟
  • run-qemu: 用于编译内核镜像,并启动 qemu 模拟
  • debug-bochs: 用于编译内核镜像,启动 bochs 并通过 rust-gdb 远程 debug
  • debug-qemu: 用于编译内核镜像,启动 qemu 并通过 rust-gdb 远程 debug

项目结构

本项目主要分为 4 个部分:

  • builder: 位于 src 目录下,主要用于编译、构建内核镜像
  • boot: 位于 boot 目录下,是 tiny OSbootloader
  • boot_info: 位于 boot_info 目录下,提供 BootInfo 结构
  • kernel: 位于 kernel 目录下,是 tiny OS 的内核代码

开发计划

  • bootloader
    • 进入保护模式
    • 开启分页管理
    • 开启 VGA 的图形显示模式
    • 通过 0xE820 BIOS function 获取 memory_map
    • 进入 long mode
    • 准备 BootInfo 结构用于从 bootloader 阶段传递信息到 kernel
    • 加载内核的 elf 文件
    • 为内核代码做虚拟地址映射, 并跳转到内核运行
  • kernel
    • 准备 logger (用于实现 tiny os 的 打印函数以及内核开发时 debug )
    • 处理各种异常、中断
      • 初步处理时钟中断
      • 初步处理键盘输入
      • 初步处理 Page Fault
      • 初步处理 GP Fault
      • 处理 Double Fault
    • 实现动态内存分配器
    • 实现多任务(抢占式调度)
    • 实现内核级的协作式调度
      • 初步实现
      • 更好的调度算法
      • 实现全局可用的 spawn
    • 实现 FAT32 文件系统
    • 实现 shell
  • 编译
    • 实现更灵活的 Builder (可以选择编译 debug 版和 release 版的镜像)
    • 生成 bochs 可以直接加载的内核镜像,而不是通过 dd 工具刻入 bochs/os.img

参考资料

About

使用 rust 开发的64位操作系统,可运行在 x86-64 架构上,目前仍在开发中。

License:MIT License


Languages

Language:Rust 73.5%Language:Assembly 26.0%Language:Makefile 0.5%