99 lines
4.1 KiB
Markdown
99 lines
4.1 KiB
Markdown
# 10 真机启动
|
||
|
||
## 目标
|
||
|
||
在不破坏现有系统启动链的前提下,让 Tianole 在真实 UEFI x86_64 机器上启动。
|
||
|
||
## 前置条件
|
||
|
||
- QEMU + OVMF 启动稳定。
|
||
- 串口、屏幕或其他早期输出路径可用。
|
||
- 内存 map、ExitBootServices、异常处理稳定。
|
||
|
||
## 建议边界
|
||
|
||
- `docs/host-machine.md`:本机硬件和启动记录。
|
||
- `scripts/`:制作 U 盘镜像和验证脚本。
|
||
- `arch/x86/`:UEFI 与平台差异处理。
|
||
|
||
## 实现内容
|
||
|
||
- 制作 UEFI FAT 启动盘。
|
||
- 记录 OVMF 与真机 UEFI 差异。
|
||
- 验证 Secure Boot、启动项、磁盘枚举等风险。
|
||
- 先从 U 盘启动,再考虑本机启动项。
|
||
|
||
### 1. Boot media and rollback
|
||
|
||
- 先制作可移除 U 盘或镜像,不修改本机现有 EFI 启动项。
|
||
- 记录制作步骤、分区布局、FAT 文件路径和 bootloader 文件名。
|
||
- 每次真机尝试都要能回退到原系统启动。
|
||
- 不在未验证前写入内置磁盘 EFI 分区。
|
||
|
||
### 2. Hardware inventory
|
||
|
||
- 在 `docs/host-machine.md` 记录 CPU、内存、UEFI 固件版本、Secure Boot 状态、显卡、存储控制器、键盘路径和可用输出设备。
|
||
- 区分 QEMU/OVMF 行为和真机 firmware 行为。
|
||
- 记录 ACPI 表、memory map、GOP 模式、串口可用性和启动失败阶段。
|
||
- 不把某台机器的硬件常量写入通用代码。
|
||
|
||
### 3. Diagnostics first
|
||
|
||
- 真机路径优先保证 early log、panic、异常日志和阶段 marker。
|
||
- 如果没有串口,需要 framebuffer console 或屏幕阶段输出作为 fallback。
|
||
- 每个启动阶段都输出可识别 marker:bootloader entry、memory map、ExitBootServices、kernel entry、GDT/IDT、heap、timer。
|
||
- 失败报告要能判断停在 firmware、bootloader、ExitBootServices、kernel entry、异常或中断阶段。
|
||
|
||
### 4. Firmware and security differences
|
||
|
||
- Secure Boot 默认视为风险项,先记录状态,不绕过用户安全设置。
|
||
- UEFI memory map、runtime service、GOP、文件路径大小写和磁盘枚举可能和 OVMF 不同。
|
||
- 真机测试要优先只读硬件信息,避免早期驱动写危险寄存器。
|
||
- 后续 ACPI/PCI 支持进入前,真机功能目标应限于启动和诊断。
|
||
|
||
## Linux 参考原则
|
||
|
||
- 参考 Linux bring-up 流程:先保证早期日志和异常诊断,再逐步打开中断、内存、驱动。
|
||
- 参考 Linux platform quirk 思路:硬件差异要记录和隔离,不把单机 workaround 扩散到通用路径。
|
||
- 参考 Linux boot parameters/firmware handoff 思路:firmware 输入要保存、校验和转换为内核自己的模型。
|
||
- 参考 Linux console fallback 思路:serial、early console、framebuffer console 互相补位。
|
||
|
||
## 非玩具化约束
|
||
|
||
- 早期不修改本机现有启动链。
|
||
- 真机相关信息只放在 `docs/host-machine.md`。
|
||
- 真机失败必须能通过日志定位到阶段。
|
||
- 不能把某台机器的硬件假设写进通用代码。
|
||
- 不在未确认目标磁盘前写入内置磁盘或 EFI 分区。
|
||
- Secure Boot 相关操作必须记录风险,不默认要求关闭。
|
||
- 真机 workaround 必须有注释和硬件记录,不能伪装成通用逻辑。
|
||
- QEMU 测试仍然是回归基线,真机修复不能破坏 OVMF 路径。
|
||
- 真机测试脚本应尽量只生成介质,不自动执行危险写盘操作。
|
||
|
||
## 验收方式
|
||
|
||
- U 盘可进入 Tianole bootloader。
|
||
- kernel 能启动并输出阶段日志。
|
||
- 失败时能判断停在 bootloader、ExitBootServices、kernel entry 还是异常路径。
|
||
- `docs/host-machine.md` 记录一次完整尝试,包括硬件信息、固件设置、镜像版本和结果。
|
||
- OVMF 回归仍通过。
|
||
- 真机至少能输出到一种可观察通道:串口、屏幕或持久日志。
|
||
- 启动失败时有最后阶段 marker。
|
||
- 不修改本机默认启动项也能完成测试。
|
||
|
||
## 当前状态
|
||
|
||
未开始。
|
||
|
||
进入本阶段前,QEMU + OVMF 的早期日志、异常、内存和调度路径应稳定。
|
||
|
||
## 后续扩展
|
||
|
||
- 真机串口或 USB debug。
|
||
- framebuffer console。
|
||
- ACPI 表 dump。
|
||
- PCI 枚举对比。
|
||
- Secure Boot 签名流程。
|
||
- 多机器兼容性记录。
|
||
- 自动化镜像制作和校验。
|