QRPROM介绍

QFPROM (Qualcomm Fuse Programmable Read Only Memory)是QFUSE的替代方案,在一个非易失性ROM(non-volatile memory)中存储代表芯片鉴权相关的配置。目前初步了解的情况为,该模块是Secure Boot的一部分,存储的配置为各Image鉴权需要的数字证书及相关属性。QFUSE是Qualcomm FUSE的缩写,FUSE还有一种将网络文件系统变为用户空间文件系统的解释,但不是这个含义。由于QFPROM只能烧写一次,在没有烧录任何内容之前,手机不会启用Image签名认证流程,一旦烧写后就会对其中写明的Image进行签名认证,以达到安全的目的,也就是熔丝功能。
以MSM8909平台为例,主要的步骤如下:
1)生成数字证书可以利用vendor/qcom/proprietary/common/scripts/SecImage/resources/openssl/目录下的opensslroot.cfg和v3.ext两个文件,再用openssl命令生成需要的数字证书,同时会生成一个哈希值
2)将哈希值和其他启用Secure Boot的属性写入8909_fuseblower_USER.xml
3)将数字证书拷入sectools对应的目录中
4)使用sectools.py脚本的fuseblower子功能用8909_fuseblower_OEM.xml、8909_fuseblower_QC.xml、8909_fuseblower_USER.xml和数字证书共同生成sec.dat文件
5)使用sectools.py脚本的secimage子功能给各Image签名,8909需求签名的有如下几个:
   boot_images/build/ms/bin/8909/emmc/sbl1.mbn
   boot_images/build/ms/bin/8909/emmc/unsigned/prog_emmc_firehose_8909_ddr.mbn
   LINUX/android/out/target/product/msm8909/emmc_appsboot.mbn
   modem_proc/build/ms/bin/8909.gen.prod/mba.mbn
   modem_proc/build/ms/bin/8909.gen.prod/qdsp6sw.mbn
   rpm_proc/build/ms/bin/8909/pm8909/rpm.mbn
   trustzone_images/build/ms/bin/MAZAANAA/tz.mbn
   wcnss_proc/build/ms/bin/SCAQMAZ/reloc/wcnss.mbn
6)由于Image大小发生变化,可能会涉及到分区调整,将签名后的Image下载到单板。
7)将sec.dat刷写到sec分区后,Secure Boot就正常工作了,这时就不能使用高通的QFIL烧录Image了,不过高通提供了解决方案。本质上就是给BootLoader签名并修改其中的一个鉴权判断变量。
对于QFPROM来说,有两个重要的参数,一个是Blow Time(我理解为烧录时长),一个是QFPROM时钟频率。这两个之间的关系由芯片内部的一个计数器值协调,计数器值个时钟周期正好为Blow Time。这个是跟硬件设计有关的,以后再说。
有两个疑问:
1)QFPROM中的配置属性名采用如下格式,目前还不明白其含义,好像跟上面的对不上号。
qfprom____
→ cfg; phwk; xy; cc_id; hdcp
→ MDM9000; MSM7200; QSD8250; QSC6245

→ FS01, FS02, FS03, etc.
2)mba.mbn等Image在secImage.xml等地方有定义相关属性,但在烧录过程中是怎样的对应关系还不清楚。


你可能感兴趣的:(QRPROM介绍)