JingYiJun / ZerOS

A Zig Operating System. Zig 语言的简易操作系统。

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

ZerOS

Zig 写的简易操作系统,用于复旦大学 2023 年秋季学期《操作系统》课程的配套实验。

名字随便起的,寓意 Zero OS 即自己的第一个操作系统。不如放一只可爱猫猫

为什么用 Zig?因为比 C 更现代化,有包管理和一部分语法糖;比 Rust 更能操作内存且心智负担稍小。而且 Zig 有强大的编译期计算和静态反射能力,一部分标准库也可以在裸金属上使用,并且可以和 C 代码无缝集成。

但是 Zig 语言有很多小毛病,稳定性不如 Rust。o(╥﹏╥)o

特点

  • 目前只能跑在树莓派 3B 上,在 qemu 上能通过测试。
  • 尽量使用 Zig 语言

构建指南

前置要求

安装 Zig

Zig 目前正在快速迭代,每个小版本的 API 都会有很大变动。目前推荐使用 0.11.1 稳定版。

安装过程详见:https://ziglang.org/learn/getting-started/,源码仓库:https://github.com/ziglang/zig

如果从源码构建,需要安装 clang-16 libclang-16-dev llvm-16 libllvm16 lld-16 liblld-16-dev zstd libzstd-dev ,必须是 16 版本。CMake 构建必须要指定 CLANG_INCLUDE_DIRSLLD_INCLUDE_DIRS

这是我的构建命令:

mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_BUILD_TYPE=Release -DCLANG_INCLUDE_DIRS=/usr/lib/llvm-16 -DLLD_INCLUDE_DIRS=/usr/lib/llvm-16
make -j && make install

建议安装 zls

zls 是 Zig 的语言服务器,建议安装。

zls。可以使用 0.11.0 版本的二进制包,也可以使用本地 Zig (master 版本)构建。

zls 项目根目录下,我的构建命令是:

zig build -Doptimize=ReleaseFast -Ddata_version=master --verbose -p /usr/local

VS Code 配置 Zig 开发环境

我的开发环境是 VS Code + wsl2,使用 Zig 官方的 VS Code 插件可以获得语法高亮、补全、跳转、格式化等功能。

VS Code 支持用 C/C++ 的远程调试功能调试 Zig 代码。详见 知乎:VS Code与GDB Server远程调试知乎:在 Windows 版 VS Code 中调试 Zig 代码

为什么不用 CLion?目前 JetBrains 系 IDE 的远程功能比较烂,运行成本高。

构建本项目

Zig 项目会尽可能使用 build.zig 构建脚本构建程序,尽量不使用 make。同时会使用到 llvm-objdump-16llvm-objcopy-16。不使用 aarch64-linux-gnu-* 的软件。

使用 zig build --help 获得所有帮助。

构建 ELF

zig build

这会将项目构建为 elf 格式,默认安装到 zig-out/bin 目录下。只会构建到 kernel8.elf

直接启动 qemu

zig build qemu

这一步会构建 kernel8.elf, kernel8.asm, kernel8.hdr, kernel8.img 并且启动 qemu。

qemu + gdb

zig build qemu-debug

在启动 qemu 的同时启动 gdb-server,监听 tcp::1234。

项目清理

清理输出文件

zig build uninstall

这会清除 zig build 的输出文件。

清理构建缓存

zig build clean

这会直接删除 zig-outzig-cache 文件夹。

目标

已知问题

  • 构建得到的 kernel8.elf debug 信息引用了不存在的行,错误信息会输出到 kernel8.asm.log
  • 目前的 Zig 不支持链接时全局变量初始化,而页表 kernel_pt.c 依赖于这一点,所以不方便移植到 Zig。但是实际上只有 start.S 依赖于这个文件,所以我直接拿过来,利用 Zig 无缝衔接 C 的特性把 kernel_pt.c 缝进了项目里面。

参考项目

开源许可证

本项目以 MIT 许可证开源。

About

A Zig Operating System. Zig 语言的简易操作系统。

License:MIT License


Languages

Language:C 39.7%Language:Zig 35.0%Language:Assembly 25.3%