tianole/docs/roadmap.md

202 lines
4.8 KiB
Markdown
Raw 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 路线图
## 第 0 阶段
- 建立最小 `UEFI` 启动程序。
-`QEMU + OVMF` 下运行。
- 在屏幕和 `debug.log` 中输出可见的启动标记。
- 保证启动后常驻,便于后续调试。
## 第 1 阶段
- 把当前单体启动程序拆成 `boot/``kernel/`
- 定义 `boot_info` 交接结构。
-`bootloader` 加载独立 `kernel` 映像。
- 跳转到 `kernel` 入口并建立稳定栈。
## 第 2 阶段
- 获取 `UEFI memory map`
- 正确执行 `ExitBootServices`
- 建立最小 framebuffer 控制台。
- 开始做物理内存管理。
## 第 3 阶段
- 建立 `IDT` 和基础异常处理。
- 增加定时器来源。
- 开始早期 `ACPI` 解析。
- 逐步过渡到接近 Linux 风格的 `arch/`、`mm/`、`kernel/` 边界。
## 总体流程
这个项目要按“可中断、可回坑、每一阶段都能单独验收”的方式推进。最终目标不是只在虚拟机里亮屏,而是要在这台 `UEFI x86_64` 笔记本上独立启动,并逐步具备运行本地 `git` 的能力。
建议的长期阶段如下:
### 阶段 A启动链
- 跑通 `UEFI app -> bootloader -> kernel`
- 保证 `kernel_main()` 真正开始执行
- 保证屏幕或串口可见输出
完成标志:
- `bootloader` 成功把控制权交给独立 `kernel`
- `kernel` 能输出第一行字并停住
### 阶段 B早期内核基础
- 定义 `boot_info`
- 获取 `memory map`
- 正确执行 `ExitBootServices`
- 建立 early console
- 建立最小 panic / assert / log
完成标志:
- 退出 UEFI 后内核仍能稳定运行
- 崩溃时能给出可定位信息
### 阶段 C内存与异常
- 建立物理页分配器
- 建立内核堆分配器
- 建立 `GDT/IDT`
- 处理基础异常
- 增加定时器
完成标志:
- 能稳定分配页和堆内存
- 关键异常能进入处理路径
### 阶段 D任务模型
- 建立内核线程
- 建立调度器
- 建立上下文切换
- 增加睡眠/唤醒与同步原语
完成标志:
- 可以同时运行多个内核线程
- 调度由时钟驱动
### 阶段 E用户态基础
- 建立用户地址空间
- 增加系统调用入口
- 增加 ELF 加载
- 增加进程创建和等待
完成标志:
- 能加载并运行最小用户程序
- 用户程序能调用系统调用输出
### 阶段 F存储与文件系统
- 建立块设备层
- 建立 `VFS`
- 接入一个实际文件系统
- 实现路径解析、文件读写、目录操作
完成标志:
- 能挂载文件系统
- 能打开、读取、写入文件
### 阶段 G最小用户空间
- 增加 `init`
- 增加简单 shell
- 增加基础命令
- 补最小 `libc` 能力
完成标志:
- 启动后能进入 shell
- 能执行几个基础程序
### 阶段 H面向 git 的补齐
- 优先支持本地 `git`,不先碰网络
- 补足 `git` 依赖的文件、进程、时间、路径等接口
- 先以 `git init / status / add / commit` 为目标
完成标志:
- 能运行本地仓库的基础 `git` 操作
### 阶段 I真机落地
-`QEMU + OVMF`
-`U 盘 UEFI` 启动
- 最后再考虑加入本机启动项
完成标志:
- 不破坏现有 `Windows 11 + Linux Mint + GRUB`
- 能在真机上独立启动并进入系统
## 当前所处阶段
当前只完成了第 0 阶段的最小成果:
- `UEFI` 启动程序可构建
- `QEMU + OVMF` 能执行它
- 屏幕和 `debug.log` 有可见输出
- 程序可常驻,便于调试
当前已经开始进入第 1 阶段:
- 代码结构已经为 `bootloader -> kernel` 交接预留边界
- `boot_info` 已经作为项目自有交接结构存在
- `arch/x86/` 已经承载当前架构专用启动代码
当前还没有完成:
- 独立 `kernel` 接管
- `bootloader -> kernel` 交接
- `memory map`
- `ExitBootServices`
- 真正的内核子系统
## 当前代码组织原则
当前先不直接复制 Linux 的完整目录树,但开始采用接近 Linux 的分层方向:
- `arch/`:架构相关实现,目前只放 `x86`
- `kernel/`:未来放架构无关的内核主体
- `include/tianole/`:内核与 bootloader 共享的项目自有接口
- `docs/`:正式设计与路线图
- `docs/agents/`agent 协作文档
当前这样拆分的目的不是过早抽象,而是先把边界立住:
- `UEFI` 相关定义留在 `arch/x86/`
- 通用交接结构放在 `include/tianole/`
- 以后新增架构时,优先新增新的 `arch/<name>/`,而不是改写通用代码
## 接下来最近三个里程碑
### 里程碑 1独立 kernel 接管
-`bootloader` 加载独立 `kernel`
- 建立 `boot_info`
- 跳到 `kernel_main()`
-`kernel` 自己输出第一行字
### 里程碑 2退出 UEFI
- 获取并保存 `memory map`
- 正确执行 `ExitBootServices`
- `kernel` 在退出固件服务后继续稳定运行
### 里程碑 3早期调试和内存基础
- 增加 early serial / framebuffer console
- 建立物理页分配器
- 建立基础异常处理