Quectel展讯模组中的Secure Boot

Secure Boot

Secure Boot 是建立在受信平台上的一种安全启动序列,为用户应用提供一个安全可信的执行环境。为防止任何未经合法签名或恶意修改的软件在模块上运行,Secure Boot 在模块下载和启动过程的每个阶段均增加了签名验证环节,通过保存在模块中包含的 eFuse 上的 ROTPK,校验系统整个启动和下载过程中涉及的所有镜像,确认系统镜像完全可靠。

eFuse 是一种特殊类型的非易失性存储器,只允许编程一次,一旦被编程,数据永久有效。常用于存储可靠且可重复读取的数据。将 ROTPK 成功写入 eFuse 中,即开启 Secure Boot 功能

下载过程

  1. Romcode(0x00000000):与PC通信,下载FDL1到IRAM。FDL1只包含DDR驱动及配置,只需要几KB的运行空间,可以被ROMCODE与下载工具通讯将之下载到IRAM中运行。

  2. FDL1:FDL1被下载到IRAM后,PC指针跳到IRAM的起始地址开始运行FDL1。FDL1首先初始化外部DDRRAM,配置外部DDR的寄存器和时序,然后再与下载工具通讯将FDL2下载到外部DDR中运行

  3. FDL2:FDL2被下载到DDR中之后,有充足的运行空间,FDL2带NAND/EMMCflash驱动程序,可以初始化FLASH,并把PAC包的其他各个模块都写入到FLASH中。

开机过程

  1. Romcode:0x00000000:判断是开机,复制spl到IRAM,并运行spl(包含DDR驱动及配置)

  2. SPL:初始化外部DDRRAM,配置外部DDR的寄存器和时序,然后再拷贝uboot到外部DDR中运行

  3. UBOOT:带NAND/EMMCflash驱动程序,带部分设备初始化,复制其他image到DDRRAM,判断开机模式并进入相应模式

Secure Boot原理

使用三个证书,前一部分包含下一部分的公钥摘要。即每一部分检验下一部分的合法性:

## Secure Boot

下载:

  1. Romcode 会验证FDL1的公钥是否正确,如果公钥正确使用此公钥验证FDL1的证书,证书验证通过则继续运行FDL1
  2. FDL1会验证FDL2的公钥是否正确,如果公钥正确使用此公钥验证FDL2的证书,证书验证通过则继续运行FDL2
  3. FDL2再依次验证其余部分的公钥,并使用公钥验证证书

运行:

  1. Romcode 会验证SPL的公钥是否正确,如果公钥正确使用此公钥验证SPL的证书,证书验证通过则继续运行SPL
  2. SPL会验证uboot的公钥是否正确,如果公钥正确使用此公钥验证uboot的证书,证书验证通过则继续运行uboot
  3. uboot将摘要通过运行参数的方式传给Kernel,验证Kernel的公钥是否正确,如果公钥正确使用此公钥验证Kernel的证书,证书验证通过则继续运行Kernel
  4. Kernel再依次验证其余部分。

Quectel展讯模组中的Secure Boot
https://carl-5535.github.io/2024/02/01/工作总结/Quectel展讯模组中的Secure Boot/
作者
Carl Chen
发布于
2024年2月1日
许可协议