tianole/README.md

119 lines
3.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Tianole
Tianole 是一个学习型自制操作系统项目,当前面向 `UEFI x86_64` 机器。
这个项目的主要目的有三点:
- 通过亲手实现一个简化但不玩具化的 OS理解操作系统核心机制。
- 通过参考 Linux 的目录、分层和工程纪律,建立阅读 Linux 源码的上下文。
- 长期目标是在真机上安全启动,并逐步具备运行本地 `git` 的能力。
Tianole 不宣称自己是成熟 Linux 替代品。当前阶段更准确的定位是:用一个可运行、可验证、可持续演进的代码库,系统性学习 Linux 式内核工程。
## 当前状态
- 已跑通 `QEMU + OVMF` 下的最小 `UEFI` 启动链。
- 已拆分为 `bootloader + kernel`,并能加载独立 `kernel.elf`
- 已在进入 kernel 前调用 `ExitBootServices`
- 已建立 early log 基础QEMU debug port 和 COM1 串口。
- 已建立 CPU exception 基础GDT/TSS/IDT、trap frame、invalid opcode -> panic。
- 已建立物理内存基础:从 boot memory map 初始化最小物理页 allocator。
- 还没有完成完整中断、页表、内核堆、调度、进程、VFS、用户态和 shell。
## 当前目录
```text
tianole/
AGENTS.md
Makefile
arch/
block/
crypto/
docs/
drivers/
fs/
include/
init/
ipc/
kernel/
lib/
mm/
net/
scripts/
security/
sound/
tools/
usr/
virt/
```
当前按接近 Linux 的方式分层,但不机械复制 Linux 的所有历史目录:
- `arch/`:架构相关代码
- `block/`:通用块层
- `crypto/`:通用加密和哈希算法
- `drivers/`:设备驱动
- `fs/`VFS 和文件系统
- `init/`:初始化流程
- `ipc/`:进程间通信
- `kernel/`:通用内核主体逐步放这里
- `lib/`:通用基础库
- `mm/`:架构无关内存管理
- `net/`:网络协议栈
- `security/`:安全模型
- `sound/`:音频子系统
- `tools/`:宿主机侧开发工具
- `usr/`:初始用户空间
- `virt/`:虚拟化支持
- `include/tianole/`:项目自有共享接口
- `docs/`:正式设计和路线图
## 开发顺序
当前建议的实现顺序是:
1. 启动链
2. 早期调试输出
3. 内存与异常基础
4. 执行流与调度
5. 用户态入口
6. 文件系统与存储
7. shell / 工具
8. 面向 `git` 的补齐
9. 真机落地
更细的阶段说明见:
- [docs/roadmap.md](//wsl.localhost/Ubuntu/home/indole/tianole/docs/roadmap.md)
## 构建与运行
在 WSL2 / Ubuntu 中:
```bash
make
make run
```
无界面调试:
```bash
make run-headless
cat build/debug.log
```
本地完整检查:
```bash
scripts/check.sh
```
GitHub Actions 会在 push 和 pull request 时运行同一个检查入口。具体检查拆在 `scripts/checks/`,共享函数放在 `scripts/lib/`
## 文档
- 路线图:[docs/roadmap.md](//wsl.localhost/Ubuntu/home/indole/tianole/docs/roadmap.md)
- 本机环境与真机启动约束:[docs/host-machine.md](//wsl.localhost/Ubuntu/home/indole/tianole/docs/host-machine.md)
- Linux 顶层目录映射:[docs/agents/linux-layout.md](//wsl.localhost/Ubuntu/home/indole/tianole/docs/agents/linux-layout.md)
- agent 入口:[AGENTS.md](//wsl.localhost/Ubuntu/home/indole/tianole/AGENTS.md)