1、在SDK代码创建文件夹,放置相关Secureboot工具:
mkdir device/rockchip/rk3399/secureboot //创建目录,
2、使用SecureBootConsole 工具签名前,请先指定好type.xml中的芯片类型,例如3288,3399:
例如vim type.xml打开type.xml文件进行设置为3399,
3399
/***************************************************/
3、生成公私钥 (如输入参数增加-p,则会输出功能步骤中打印的log信息)
/***************************************************/
执行命令: SecureBootConsole -k|-kk SaveKeyDir //generate key -k(1024) -kk(2048),1024和2048是key的类型
例如以下操作: //在当前目录生成key文件
SecureBootConsole -k ./ 或者: SecureBootConsole -kk ./ //我这里rk3399使用SecureBootConsole -kk ./命令
/***************************************************/
4、签名分立固件【secure boot固件要求:固件要求boot.img和 recovery.img都需要包含 kernel.img,
即SDK自动编译脚本build.sh需要添加语句:./mkimage.sh ota,加在make otapackage -j4之后】
/***************************************************/
给分立固件签名:trust.img uboot.img recovery.img boot.img //注意:不用单独给kernel以及resource去签名
执行命令:SecureBootConsole -si privatekey _path image_path
5、签名loader
5.1 //Sign Loader soft 1024
czd@ubt144c:/work/czd/rk3399_7.1_ind/Secureboot_rk3399/SecureBootConsole_v1.90$ SecureBootConsole -p -sl publicKey.bin ./Image-rk3399_all/MiniLoaderAll.bin
INFO:Start to sign Loader(MiniLoaderAll.bin).
INFO:Sign loader succeed.
/***************************************************/
6、签完loader和分立固件后对固件进行打包(update.img)
/***************************************************/
./mkupdate.sh //执行linux打包工具Linux_Pack_Firmware/rockdev中的mkupdate.sh脚本,把上面已经签名的loader和分立固件打包成update.img文件
/***************************************************/
7、Make efuse ota update.zip //即编译ota 签名的固件包
/***************************************************/
7.1确保build/tools/目录有drmsigntool签名工具,如果没有,需要添加;
7.2把上面生成的key(公私密钥)拷贝到build/target/product/security/目录。
7.3执行正常的ota打包即可。
以上的4, 5,6步骤可以直接添加到一个shell脚本文件中实现。
----------------------rk3399 command------------------------
SecureBootConsole -kk SaveKeyDir //生成密钥
sudo ./SecureBootConsole -slx privateKey.bin publicKey.bin Image/MiniLoaderAll.bin //签名 loader
sudo ./SecureBootConsole -si privateKey.bin Image/recovery.img //签名recovery.img
sudo ./SecureBootConsole -si privateKey.bin Image/boot.img //签名boot.img
sudo ./SecureBootConsole -si privateKey.bin Image/trust.img //签名trust.img
sudo ./SecureBootConsole -si privateKey.bin Image/uboot.img //签名uboot.img
./mkupdate.sh //打包签名的loader和分立固件成update.img,在Linux_Pack_Firmware/rockdev中执行mkupdate.sh脚本
sudo ./SecureBootConsole -sh privateKey.bin update.img //固件打包好后,签固件的md5值
----------------------rk3399 command------------------------
注意问题点:
1、SecureBootConsole生成key时,参数使用-k(1024),然后就可以使用以下语句签名loader:
//Sign Loader soft 1024
SecureBootConsole -sl publickey_path loader_path
如果是-kk(2048)则需要使用下面的语句签名loader,否则会签名失败:
//SignEx Loader (efuse 2048)
SecureBootConsole -slx privatekey_path publickey _pathl oader_path
2、key的放置目录
参考文档:
RK3399_Efuse_Operation_Instructions_V1.00_20190214.pdf
SecureBootConsole 说明文档.docx