我正在尝试按照文档在 beaglebone black 上进行验证启动
https://github.com/01org/edison-u-boot/blob/master/doc/uImage.FIT/beaglebone_vboot.txt
当我运行命令将公钥放入 .dtb 文件时
mkimage -f sign.its -K am335x-boneblack.dtb -k keys -r image.fit
我得到了输出
FIT description: Beaglebone black
Created: Fri Mar 24 18:47:51 2017
Image 0 (kernel@1)
Description: unavailable
Created: Fri Mar 24 18:47:51 2017
Type: Kernel Image
Compression: lzo compressed
Data Size: 8490316 Bytes = 8291.32 KiB = 8.10 MiB
Architecture: ARM
OS: Linux
Load Address: 0x80008000
Entry Point: 0x80008000
Hash algo: sha1
Hash value: 9a390ee3c02c5bddc7b191d5cbe107991522a6d7
Image 1 (fdt@1)
Description: beaglebone-black
Created: Fri Mar 24 18:47:51 2017
Type: Flat Device Tree
Compression: uncompressed
Data Size: 38894 Bytes = 37.98 KiB = 0.04 MiB
Architecture: ARM
Hash algo: sha1
Hash value: 249ca75de41f5202fae334253bd153666f60b7dc
Default Configuration: 'conf@1'
Configuration 0 (conf@1)
Description: unavailable
Kernel: kernel@1
FDT: fdt@1
但不幸的是,当我用 fdtdump 读取它时,我的 .dtb 文件中没有像签名或 rsa 这样的字段。
这是我的.its 文件:
/dts-v1/;
/ {
description = "Beaglebone black";
#address-cells = <1>;
images {
kernel@1 {
data = /incbin/("zImage.lzo");
type = "kernel";
arch = "arm";
os = "linux";
compression = "lzo";
load = <0x80008000>;
entry = <0x80008000>;
hash@1 {
algo = "sha1";
};
};
fdt@1 {
description = "beaglebone-black";
data = /incbin/("am335x-boneblack.dtb");
type = "flat_dt";
arch = "arm";
compression = "none";
hash@1 {
algo = "sha1";
};
};
};
configurations {
default = "conf@1";
conf@1 {
kernel = "kernel@1";
fdt = "fdt@1";
signature@1 {
algo = "sha1,rsa2048";
key-name-hint = "dev";
sign-images = "fdt", "kernel";
};
};
};
};
也在密钥文件夹中我有 dev.key 和 dev.crt 文件。
感谢您的回答。
虽然没有错误信息,但如果 U-Boot 的 .config 中的 CONFIG_FIT_SIGNATURE 没有设置,mkimage 不支持该功能。
正如它所说:https://lxr.missinglink electronics.com/#uboot/doc/uImage.FIT/signature.txt
为了验证已使用公钥签名的图像,我们需要 拥有可信的公钥。这不能存储在签名图像中,因为 这很容易改变。对于此实现,我们选择存储 U-Boot 控制 FDT 中的公钥(使用 CONFIG_OF_CONTROL)。
问候,史蒂夫
Mkimage 用于使用您传递到此命令行的密钥对您的 itb 映像进行签名。您必须签署您的完整板启动配置,即内核+板dtb+initrd,并独立地保证所有元素的哈希完整性。
因此用合适的图像重建u-bootSIGNATURE配置:menuconfig。
然后在另一边,必须嵌入您的公钥。您可以简单地使用 u-boot control dtb 来完成此操作。 u-boot 的构建阶段会将您的 pub_signature.dtb 添加到 u-boot 控制 dtb 中。 有两种方法:将外部 dtb 附加到 u-boot 二进制文件或直接修改原始板 dts。
签名包可以通过以下方式检查:
ftdget /signature your_uboot.dtb
注意:除了控制dtb之外,还有多种加载pub key的方案;覆盖 dtb、来自网络 tftp、来自另一个 nvram 内存存储以及 tpm 等安全设备...
还有一个控制 dtb 字段和一个 itb 字段,显然必须静态设置以保证推力根。 用于控制的Required-mode 字段和用于itb 的required 字段。
第一次尝试时,我建议您禁用必需模式,因为它会导致主板启动中断。如需建议,请先使用 qemu 虚拟机详细阐述您的流程,然后嵌入您的流程。
注意两边设置正确的键名。
启动时,当执行 bootm 时,您将看到完整性算法检查,后面是签名算法检查,后面是 + 符号。此外,u-boot fdt 工具源允许您在嵌入之前检查签名。
只有一个限制,就是未撤销公钥。在这种情况下,必须重新制作整个过程(u-boot 重建和重新刷新),然后遗留签名将被拒绝。