引导加载程序
一、设计目标
- 跨平台一致启动:支持从x86-64(UEFI/BIOS)、ARMv8-A(UEFI/ATF)、RISC-V(OpenSBI)到嵌入式系统(直接启动)的统一启动流程。
- 安全启动:支持数字签名验证、信任链传递,防止未授权内核映像执行。
- 轻量高效:最小化引导阶段代码,快速跳转至内核。
- 配置传递:将硬件信息、启动参数、内存布局等安全传递给内核Core-0。
- 恢复与回退:支持多重引导项、内核升级失败回滚。
二、引导加载程序架构
1. 多阶段引导设计
- Stage 0:平台固件(UEFI/BIOS/ATF/OpenSBI) → 加载引导加载程序。
- Stage 1:引导加载程序核心 → 硬件初始化、映像验证、加载HIC内核。
- Stage 2:内核自举(Core-0初始化) → 接管系统。
2. 可移植层划分
- 通用引导逻辑:映像解析、验证、跳转逻辑。
- 架构适配层:CPU初始化、异常向量设置、内存控制器初始化。
- 平台驱动层:串口、闪存、网络(可选)驱动。
3. 引导映像格式
HIC内核映像为多部分封装格式,包含: - 引导头:魔数、版本、架构ID、入口点、签名信息。 - Core-0二进制段。 - Privileged-1服务模块段(静态合成模式)。 - 配置表段:内存布局、中断路由、能力初始表。 - 设备树/ACPI表(可选)。
三、启动流程设计
1. 硬件初始化
- 关闭中断,设置最小异常向量。
- 初始化串口(用于调试输出)。
- 探测内存大小与布局。
- 初始化时钟、电源管理基础设置。
2. 映像加载与验证
- 从预设存储(闪存、硬盘、网络)加载HIC内核映像。
- 验证映像签名(如Ed25519或RSA-PSS)。
- 检查架构兼容性(引导加载程序与映像的架构ID匹配)。
3. 配置信息传递
- 构造启动信息块,包含:
- 内存映射(可用/保留/设备内存)。
- 启动设备信息。
- 中断控制器类型与配置。
- 传递ACPI表或设备树地址。
- 引导参数(如启动模式、调试标志)。
4. 环境切换与跳转
- 设置内核入口点的栈指针。
- 关闭引导加载程序使用的硬件资源(如缓存、MMU临时映射)。
- 跳转至Core-0入口点,并传递启动信息块地址。
四、安全设计
1. 信任根
- 支持硬件信任根(如TPM、Secure Boot)。
- 引导加载程序自身可签名,由固件验证。
2. 映像完整性
- 哈希验证(SHA-384)与数字签名验证。
- 支持抗回滚的版本号检查。
3. 安全存储
- 引导密钥可存储在硬件安全模块或可信执行环境中。
- 支持启动时解锁加密内核映像(如使用TPM sealing)。
五、多引导与恢复机制
1. 多重内核支持
- 引导菜单支持选择不同版本HIC内核或不同配置。
- 支持从网络、USB、SD卡等备用设备启动。
2. 自动恢复
- 检测内核启动失败(看门狗超时、异常重启)。
- 自动回退至上一稳定版本。
- 支持进入恢复控制台,用于手动修复或网络重装。
3. A/B更新支持
- 支持双系统分区,实现无缝内核升级与回滚。
- 更新过程在引导阶段验证并切换活动分区。
六、调试与日志支持
1. 早期调试输出
- 通过串口、UART或内存映射日志缓冲区输出启动状态。
- 支持调试等级控制(静默/详细/调试)。
2. 启动故障诊断
- 记录启动阶段错误码与上下文。
- 支持启动失败后保存日志至非易失存储。
3. 远程启动支持
- 可选网络引导(PXE/iSCSI)用于开发与部署。
- 支持TFTP/HTTP加载内核映像。
七、构建与部署
1. 引导加载程序生成
- 为不同目标平台生成特定映像(如
.efi、.bin、.img)。 - 支持与HIC内核一起打包为统一发布映像。
2. 安装与更新
- 提供安装工具,支持UEFI闪存、MBR/GPT写入。
- 支持从运行中的HIC系统安全更新引导加载程序。
3. 配置文件
- 引导配置文件(如
hic-boot.cfg)定义: - 默认内核路径
- 启动参数
- 超时设置
- 恢复策略