- 参考:
- U-boot/doc/uImage.FIT/signature.txt 说明文档
- 以下是我的总结:
1. 目录结构
2. 生成证书密钥对:
openssl genpkey -algorithm RSA -out dev.key -pkeyopt rsa_keygen_bits:2048 -pkeyopt rsa_keygen_pubexp:65537
openssl req -batch -new -x509 -key dev.key -out dev.crt
存放路径 ~/dev/keys/
3. 在linux目录创建its文件
4. 签名指令,生成包含image dtb 签名内容的fit文件。
$mkimage -f ../linux/sign-images.its -k ~/dev/keys -r sign-image
下图可以看出签名信息包含在了fit文件中。
5. 创建uboot dts,用于手动或者uboot验签
创建arch/arm/dts/stm32mp15-verified-boot.dts文件,指定系统启动时u-boot验签用到的算法、验签设备名称等:
/dts-v1/;
/ {
model = "stm32mp15 image public key";
compatible = "xxx,yyy";
signature {
key-dev {
required = "conf-1"; //此处的名字必须要跟../linux/sign-images.its中的保持一致
algo = "sha1,rsa2048";
key-name-hint = "dev";
};
};
编译设备树文件:
dtc stm32mp15-verified-boot.dts -O dtb -o stm32mp15-verified-boot.dtb
6. 手动验签fit
执行fit_check_sign命令在本地验证fit签名:
$fit_check_sign -f sign-image.fit -k ../linux/stm32mp15-verified-boot.dtb
7. Uboot验签fit
接着修改u-boot配置,启动对验签功能的支持:
make stm32mp151_defconfig
make menuconfig
CONFIG_OF_CONTROL=y //default on
CONFIG_DM=y //default on
CONFIG_FIT=y //default on
// CONFIG_FIT_SIGNATURE=y
Enable signature verification of FIT uImages
CONFIG_OF_SEPARATE=y
//CONFIG_DEFAULT_DEVICE_TREE=<dts-filename>
CONFIG_DEFAULT_DEVICE_TREE="xxx-yyy"//verified-boot