tianole/docs/roadmap.md
Microindole e3782144b8
refactor(build): split makefiles and normalize internal API names
- align makefile layout with Linux-style directories
2026-05-08 21:00:24 +08:00

178 lines
4.1 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 路线图
## 总原则
这个项目按“可中断、可回坑、每一阶段都能单独验收”的方式推进。
目标不是只在虚拟机里亮屏,而是:
-`UEFI x86_64` 真机上独立启动
- 逐步具备完整内核基础设施
- 逐步具备运行本地 `git` 的能力
这里参考 Linux 的是分层思路和演进顺序,不是照搬早期 Linux 的启动方式或目录树。
## 推荐开发顺序
### 1. 启动链
- 跑通 `UEFI app -> bootloader -> kernel`
- 保证 `kernel_main()` 真正开始执行
- 保证最小可见输出
完成标志:
- `bootloader` 成功把控制权交给独立 `kernel`
- `kernel` 能输出第一行字并停住
### 2. 早期调试输出
- 保留当前 `debug` 输出路径
- 增加 early serial log
- 为后续脱离固件后的调试做准备
完成标志:
- 内核在更早阶段也能稳定输出日志
### 3. 内存与异常基础
- 获取 `UEFI memory map`
- 正确执行 `ExitBootServices`
- 建立 `GDT/IDT`
- 增加基础异常处理
- 建立物理页分配器
- 建立内核堆
- 增加定时器
完成标志:
- 退出 UEFI 后内核仍稳定运行
- 关键异常能进入处理路径
- 内核能稳定分配页和堆内存
### 4. 执行流与调度
- 建立内核线程
- 建立调度器
- 建立上下文切换
- 增加睡眠/唤醒与同步原语
完成标志:
- 可以同时运行多个内核线程
- 调度由时钟驱动
### 5. 用户态入口
- 建立用户地址空间
- 增加系统调用入口
- 增加 ELF 用户程序加载
- 增加进程创建和等待
完成标志:
- 能加载并运行最小用户程序
- 用户程序能调用系统调用输出
### 6. 文件系统与存储
- 建立块设备层
- 建立 `VFS`
- 接入一个实际文件系统
- 实现路径解析、文件读写、目录操作
完成标志:
- 能挂载文件系统
- 能打开、读取、写入文件
### 7. shell 与基础工具
- 增加 `init`
- 增加简单 shell
- 增加基础命令
- 补最小 `libc` 能力
完成标志:
- 启动后能进入 shell
- 能执行几个基础程序
### 8. 面向 git 的补齐
- 优先支持本地 `git`
- 不先碰网络协议栈
- 补足 `git` 依赖的文件、进程、时间、路径等接口
- 先以 `git init / status / add / commit` 为目标
完成标志:
- 能运行本地仓库的基础 `git` 操作
### 9. 真机落地
-`QEMU + OVMF`
-`U 盘 UEFI` 启动
- 最后再考虑加入本机启动项
完成标志:
- 不破坏现有本机启动链
- 能在真机上独立启动并进入系统
## 当前进度
当前已经完成:
- 最小 `UEFI` 启动链
- `bootloader + kernel` 拆分
- 独立 `kernel.elf` 加载
- `kernel_main()` 实际执行
- `memory map` 已通过 `boot_info` 传递,并能在 kernel 中统计描述符与可用页数
- `ExitBootServices` 已在进入 kernel 前执行
- x86 早期日志接口已集中到 `arch/x86/include/tianole/early_log.h`
- 构建布局已改为接近 Linux 的目录 Makefile 组织方式
- 本地检查脚本和 GitHub Actions 已接入
当前还没有完成:
- early serial log
- framebuffer console
- 真正的内存管理和异常子系统
## 当前代码组织原则
当前先不直接复制 Linux 的完整目录树,但开始采用接近 Linux 的分层方向:
- `arch/`:架构相关实现,目前只放 `x86`
- `kernel/`:未来放架构无关的内核主体
- `include/tianole/`:内核与 bootloader 共享的项目自有接口
- `docs/`:正式设计与路线图
- `docs/agents/`agent 协作文档
当前这样拆分的目的不是过早抽象,而是先把边界立住:
- `UEFI` 相关定义留在 `arch/x86/`
- 通用交接结构放在 `include/tianole/`
- 以后新增架构时,优先新增新的 `arch/<name>/`
## 最近里程碑
### 里程碑 1退出 UEFI 前的最后准备
- 获取并保存完整 `memory map`
- 扩展 `boot_info`
- 建立 early serial log
### 里程碑 2退出 UEFI
- 正确执行 `ExitBootServices`
- `kernel` 在退出固件服务后继续稳定运行
### 里程碑 3早期内核基础设施
- 增加 framebuffer console
- 建立物理页分配器
- 建立基础异常处理