175 lines
3.9 KiB
Markdown
175 lines
3.9 KiB
Markdown
# 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`
|
||
- 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
|
||
- 建立物理页分配器
|
||
- 建立基础异常处理
|