跳转至

引导加载程序

一、设计目标

  1. 跨平台一致启动:支持从x86-64(UEFI/BIOS)、ARMv8-A(UEFI/ATF)、RISC-V(OpenSBI)到嵌入式系统(直接启动)的统一启动流程。
  2. 安全启动:支持数字签名验证、信任链传递,防止未授权内核映像执行。
  3. 轻量高效:最小化引导阶段代码,快速跳转至内核。
  4. 配置传递:将硬件信息、启动参数、内存布局等安全传递给内核Core-0。
  5. 恢复与回退:支持多重引导项、内核升级失败回滚。

二、引导加载程序架构

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)定义:
  • 默认内核路径
  • 启动参数
  • 超时设置
  • 恢复策略