0.前言
本文主要说明的是在开启secure boot功能时可能遇到的难题,以及如何使用USB的方法来刷签名镜像。
1.开启secure boot功能可能会遇到的问题
我们刷完签名镜像之后,就可以重启机器,如果一切工作顺利,那么机器会正常运行,和没有启用secure boot时的情况一致。但是如果有什么步骤出错了,你会发现机器啥都没有输出,终端没有一点反应,这是因为软件跑步起来,验证没有通过。所以在启用secire boot功能时,必须仔细阅读高通提供的文档,充分了解其中的细节。
以下是一些我遇到的问题,可以作为参考,以防再次出现类似错误。
(1)如果你的机器开机没有任何反应,很有可能是验证没有通过,你需要确保你的OTP编程和后面的签名镜像使用的是同一套密钥。因为高通提供的SDK有两个版本:qca4020 SDK which are qca4020.or_.1.1_postcs1和qca4020-or-2-0_qca_oem_sdk-cdb,它们的密钥是不一样的,两个不能混合使用。
(2)高通默认使用JTAG进行刷签名镜像,如果你不能连接到JTAG,那么请务必检查你是否正确装了FTDI驱动和OpenOCD的插件。
(3)如果能够连接JTAG,但是就是不能将镜像刷进去,那么你需要确认你之前是否使用的是USB的刷机方式,如果是,你需要删除target\quartz\demo\QCLI_demo\build\gcc\output下的三个文件
firmware_table.bin
generated_fwd_table.xml
generated_partition_table.xml
2.如何使用USB烧写签名镜像
在我们使用USB的方式进行刷机时会得到这样的错误
D:\flamingo\QCA4020\test_secure_boot\secure_boot\target\quartz\demo\QCLI_demo\build\gcc>python D:\flamingo\QCA4020\test_secure_boot\secure_boot\target\build\tools\flash\qflash.py --comm 4 --app 4020
qflash.py Info: Generate partition table...
qflash.py Info: Generate FWD table...
[2018-10-16 15:39:30,233] INFO: Checking for files to add to the image for Firmware Descriptor Table 0 File:gen_fwd_table.py:654 Function:fen_xml_program
[2018-10-16 15:39:30,240] INFO: DoneGenerating XML file to pragram. File:gen_fwd_table.py:692 Function:gen_xml_program
qflash.py Info: Download device programmer...
qflash,py Info: Check for QLoader port in Device Manager.
qflash,py Info: Need to reset device?
qflash,py Error: QSaharaServer failed to load Device Programmer
从上面的log来看,在加载设备编程器的时候出现了错误。这是为什么呢?
原来,我们除了对我们要刷的镜像进行签名,我们还需要设备编程器进行签名。即一切要放到板里运行的软件都是需要签名的,否则不可能运行,所以才会有如上的错误。
所以解决这个问题的关键就是要对设备编程器进行签名。方法是在target\quartz\demo\QCLI_demo\build\gcc目录下的脚本文件 build.bat中添加如下的一句话:
python %SectoolsQdnDir%\sectools.py iot -p 4020 -g m4 -i
D:\flamingo\QCA4020\test_secure_boot\secure_boot\target\build\tools\flash\prog_spinor_firehose_qca4020_lite_m4_threadx.mbn
-k %SectoolsCertsDir%\qpsa_rootca.key
-c %SectoolsCertsDir%\qpsa_rootca.cer
--cfg_oem_id=0xffff --cfg_model_id=0x0000 -o . -s
这句话的目的就是对设备编程器进行签名,然后使用签名后的镜像就可以运行,从而完成它的功能。