14-Secure Boot
1、Secure Boot 原理
Secure Boot 启动过程中,芯片在启动时,会先对系统做安全性检验,检验通过后才引导系统。检查不通过则认为系统已经被修改,拒绝引导系统并进入烧录模式。
2、密钥使用说明
密钥使用分为两种情况
自己没有密钥,SDK下自行生成
已有现成密钥,提供到SDK指定目录
2.1、生成密钥
生成密钥的脚本位于: longan/build/createkeys
生成的密钥位于longan/out/$(platform)/common/keys
如:longan/out/h618/common/keys
这些密钥都是相互关联的,必须配套使用。生成的密钥请成套妥善保存。
其中 rotpk.bin 为烧录到芯片中,用于验证根证书的公钥。 rotpk.bin 需要在烧录了安全固件的设备上才能烧录到芯片中,使用方法后述,详见 rotpk 烧写。其他为打包固件时用于为固件包签名的私钥。一个固件由多个部分组成,每个部分使用单独的密钥对进行签名认证。
2.2、使用已有密钥
如果已经有密码,将密钥放到longan/out/$(platform)/common/keys 下
密钥的文件数量及名称都是根据平台固件打包的过程做过适配的。 A 平台生成的密钥不可用于 B 平台安全固件的打包。否则打 包过程可能会因为找不到指定的密钥而失败。
3、防回滚版本号
芯片在引导固件的时候,会对比固件的版本号与芯片内存保留的版本号。
防回滚版本号在 longan/devices/configs/chips/${chip}/configs/default/version_base.mk中进行配置,文件中主要有两个属性可配置:
ROOT_ROLLBACK_USED
是否填充供 BROM 使用的返回滚版本号,平台相关,已经配置,使用默认值即可
MAIN_VERSION
固件的防回滚版本号,可用范围为 0-31。配置其他值芯片会直接认为固件版本号检验失败。
4、生成安全固件
配置burn_key 属性
设置 burn_key 属性值为 1 后,设备才会接收 DragonSN 通过 usb 传输的信息,进行相应的烧录工作。该属性在文件 longan/device/config/chips/h618/configs/p2/sys_config.fex中, [target] 项下,如图。如果未显式配置,按 burn_key=0 处理。
生成的安全固件位于:longan/out/ h618_android12_p2_uart0_secure_v0.img
后面的v0就是你设置的版本号,芯片出厂默认是0
5、ROTPK 烧写
Rotpk 通过 PC 端工具 dragonSN 进行烧录。 DragonSN 工具通过 usb 与设备通信,控制设备烧录指定的 rotpk 信息。具体烧录步骤如下:
1.打包的安全固件进行烧录(注意:烧录了安全固件后就不能烧录普通固件,如果烧录了普通固件会在启动最后打印提示:need secure firmware)
可以通过串口日志 secure enable bit: 判断是否是安全固件
0:普通固件,1:安全固件
2.在 PC 端配置 DrangonSN 工具后运行。
3、工具的配置
鼠标右键打开菜单栏
4.PC通过USB接好板子或者板子重新复位(板子得关机重启中DrangonSN 工具才能识别到)
5.烧写成功
FAQ:只能烧写一次,烧写失败如下:
6、校验烧写是否成功
串口调试接上,启动中,按住s 等待进入uboot
输入printenv
打印uboot的环境变量
rotpk_status=1
0: 表示没有烧录
1:表示烧录了rotpk
Last updated