目前我正在启用 SecureBoot,有人可以指导我并指出我错过了哪些步骤吗?
这是我的步骤如下:
步骤一、下载cst-3.3.1.tgz
步骤 2. tar xvf cst-3.3.1.tgz && cd cst-3.3.1/keys
步骤 3. cst-3.3.1/keys
$ echo "4242424E" > ser
$ echo "test" > key_pass.txt
$ echo "test" >> key_pass.txt
$ ./hab4_pki_tree.sh
++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++
此脚本是飞思卡尔
高保证引导代码签名工具的一部分。它生成一个基本的 PKI 树。PKI
树由一个或多个超级根密钥 (SRK) 组成,每个
SRK 有两个从属密钥:
+ 一个命令序列文件 (CSF) 密钥
+ 图像密钥。
可以将其他密钥添加到 PKI 树中,但
为此提供了一个单独的脚本。此脚本假定 openssl
安装在您的系统上并且包含在您的搜索
路径中。最后,生成的私钥
使用文件 key_pass.txt 提供的密码进行密码保护。
文件格式为密码重复两次:
my_password
my_password
PKI 树中的所有私钥都是 PKCS #8 格式,将由
相同的密码保护。
++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++
是否要使用现有的 CA 密钥(是/否)?:n
是否要使用椭圆曲线密码术(是/否)?:n
输入密钥长度PKI 树的位:2048
输入 PKI 树持续时间(年):20
应该生成多少个超级根密钥?4
您是否希望 SRK 证书设置 CA 标志?(是/否)?:是的
步骤 4. cd ../crts &&
../linux64/bin/srktool \
> -h 4 \
> -t SRK_1_2_3_4_table.bin \
> -e SRK_1_2_3_4_fuse.bin \
> -d sha256 \
> -c ./SRK1_sha256_2048_65537_v3_ca_crt.pem,\
> ./SRK2_sha256_20 48_65537_v3_ca_crt.pem, \
> ./SRK3_sha256_2048_65537_v3_ca_crt.pem,\
> ./SRK4_sha256_2048_65537_v3_ca_crt.pem
证书数量 = 4
SRK 表二进制文件名 = SRK_1_2_3_4_table.bin
SRK Fuse 二进制文件名 = SRK_1_2_3_4_fuse.bin
SRK Fuse 二进制转储:
SRK HASH[0] = 0xDA7CCBEB
SRK HASH[1] = 0xD7D9F573
SRK HASH[2] = 0x20DEBFD6
SRK HASH [ 3] = 0x0E4AAC11
SRK 哈希[4] = 0xB0965A65
SRK 哈希[5] = 0x1A89C7DA
SRK 哈希[6] = 0x6D960E3F
SRK 哈希[7] = 0xE080A6D8
步骤 5. CONFIG_SECURE_BOOT=y 在 uboot 中重建它。
第 6 步。
$ cp imx-uboot/tools/mkimage ./imx-mkimage/iMX8M/mkimage_uboot
$ cp imx-uboot/arch/arm/dts/myb-imx8mm-base.dtb ./imx-mkimage/iMX8M/fsl-imx8mm-ddr4 -evk.dtb
$ cp imx-uboot/spl/u-boot-spl.bin ./imx-mkimage/iMX8M/
$ cp imx-uboot/u-boot-nodtb.bin ./imx-mkimage/iMX8M/
# firmware-imx-8.7
$ cp firmware-imx-8.7/firmware/ddr/synopsys/ddr4_dmem_1d.bin ./imx-mkimage/iMX8M/
$ cp firmware-imx-8.7/firmware/ddr/synopsys/ddr4_dmem_2d.bin ./ imx-mkimage/iMX8M/
$ cp 固件-imx-8.7/firmware/ddr/synopsys/ddr4_imem_1d.bin ./imx-mkimage/iMX8M/
$ cp firmware-imx-8.7/firmware/ddr/synopsys/ddr4_imem_2d.bin ./ imx-mkimage/iMX8M/
#imx8mm-atf
$ cp imx-atf/build/imx8mm/release/bl31.bin ./imx-mkimage/iMX8M/
$ cd imx-mkimage
$ make SOC=iMX8MM clean
$ make SOC=iMX8MM flash_ddr4_evk
=========偏移量转储=========
加载器图像:
header_image_off 0x0
dcd_off 0x0
image_off 0x40
csf_off
0x2c600
spl hab块:
0x7e0fc0 0x0 0x2c600
第二个加载程序图像:
sld_header_off 0x57c00
sld_csf_off
0x58c20
sld hab 块:
0x401fcdc0 0x57c00 0x1020
$ make SOC=iMX8MM print_fit_hab_ddr
./../scripts/pad_image.sh bl31.bin
./../scripts/pad_image.sh u-boot-nodtb.bin fsl-imx8mm-ddr4-evk.dtb
TEE_LOAD_ADDR=0xbe000000 ATF_LOAD_ADDR= 0x00920000 版本=v1 ./print_fit_hab.sh 0x60000 fsl-imx8mm-ddr4-evk.dtb
0x40200000 0x5AC00 0x9BDB0
0x4029BDB0 0xF69B0 0x83B0
0x920000 0xFED60 0xA160
第 7 步。从 imx-uboot 源代码复制模板
$ cp ./myir-imx-uboot/doc/imx/habv4/csf_examples/mx8m/csf_fit.txt cst-3.3.1
$ cp ./myir-imx-uboot/doc/imx/habv4/csf_examples/mx8m/csf_spl.txt
步骤 8. 修改 csf_spl.txt 中的块
块 = 0x7e0fc0 0x0 0x2c600 “flash.bin”
步骤 9. 修改 csf_fit.txt 中的块
块 = 0x401fcdc0 0x57c00 0x1020“flash.bin”\
0x40200000 0x5AC00 0x9BDB0“flash.bin”\
0x4029BDB0 0xF69B0 0x83B0“flash.bin”\
0x920000 0xFED60 0xA160“flash.bin”
Step 10. 签署flash.bin然后更新uboot
$
../linux64/bin/cst -i csf_spl.txt -o csf_spl.bin
安装 SRK
安装 CSFK
验证 CSF
安装密钥
验证数据
CSF 已成功处理并在 csf_spl.bin 中提供可用的签名数据
$
../linux64/bin/cst - i csf_fit.txt -o csf_fit.bin
安装 SRK
安装 CSFK
验证 CSF
安装密钥
验证数据
CSF 已成功处理并在 csf_fit.bin 中提供可用的签名数据
$
cp flash.bin signed_flash.bin
$
dd if=csf_spl.bin of=signed_flash.bin seek=$((0x2c600)) bs=1 conv=notrunc
3912+0 records in
3912+0 records out
3912 bytes (3.9 kB, 3.8 KiB) copied, 0.00899194 s, 435 kB/s
$
dd if=csf_fit.bin of=signed_flash.bin seek=$((0x58c20)) bs=1 conv=notrunc
3928+0 records in
3928+0 records out
3928 bytes (3.9 kB, 3.8 KiB) 复制, 0.00964808 秒, 407 kB/秒
$
dd if=/tmp/signed_flash.bin of=/dev/mmcblk1 bs=1k seek=33 && sync && reboot
第 11 步。检查 hab_status
u-boot=>
hab_status
安全启动已禁用
HAB 配置:0xf0,HAB 状态:0x66
---------- HAB 事件 1 --------------
事件数据:
0xdb 0x00 0x14 0x43 0x33 0x21 0xc0 0x00
0xbe 0x00 0x0c 0x00 0x03 0x17 0x00 0x00
0x00 0x00 0x00 0x68
STS = HAB_FAILURE (0x33)
RSN = HAB_INV_CER
tiFICATE (0x21)
CTX = HAB_CTX_COMMAND (0xC0)
ENG = HAB_ENG_ANY (0x00)
---------- HAB 事件 2 --------------
事件数据:
0xdb 0x00 0x14 0x43 0x33 0x0c 0xa0 0x00
0x00 0x00 0x00 0x00 0x40 0x1f 0xdd 0xc0
0x00 0x00 0x00 0x20
STS = HAB_FAILURE (0x33)
RSN = HAB_INV_ASSERTION (0x0C)
CTX = HAB_CTX_ASSERT (0xA0)
ENG = HAB_ENG_ANY (0x00)
---------- HAB 事件 3 --------------
事件数据:
0xdb 0x00 0x14 0x43 0x33 0x0c 0xa0 0x00
0x00 0x00 0x00 0x00 0x00 0x7e 0x0f 0xc0
0x00 0x00 0x00 0x20
STS = HAB_FAILURE (0x33)
RSN = HAB_INV_ASSERTION (0x0C)
CTX = HAB_CTX_ASSERT (0xA0)
ENG = HAB_ENG_ANY (0x00)
---------- HAB 事件 4 ------------------
事件数据:
0xdb 0x00 0x14 0x43 0x33 0x0c 0xa0 0x00
0x00 0x00 0x00 0x00 0x00 0x7e 0x0f 0xe0
0x00 0x00 0x00 0x01
STS = HAB_FAILURE (0x33)
RSN = HAB_INV_ASSERTION (0x0C)
CTX = HAB_CTX_ASSERT (0xA0)
ENG = HAB_ENG_ANY (0x00)
---------- HAB 事件 5 --------------
事件数据:
0xdb 0x00 0x14 0x43 0x33 0x0c 0xa0 0x00
0x00 0x00 0x00 0x00 0x00 0x7e 0x10 0x00
0x00 0x00 0x00 0x04
STS = HAB_FAILURE (0x33)
RSN = HAB_INV_ASSERTION (0x0C)
CTX = HAB_CTX_ASSERT (0xA0)
ENG = HAB_ENG_ANY (0x00)
---------- HAB 事件 6 --------------
事件数据:
0xdb 0x00 0x14 0x43 0x33 0x0c 0xa0 0x00
0x00 0x00 0x00 0x00 0x40 0x1f 0xcd 0xc0
0x00 0x00 0x00 0x04
STS = HAB_FAILURE (0x33)
RSN = HAB_INV_ASSERTION (0x0C)
CTX = HAB_CTX_ASSERT (0xA0)
ENG = HAB_ENG_ANY (0x00)
---------- HAB 事件 7 --------------
事件数据:
0xdb 0x00 0x14 0x43 0x33 0x21 0xc0 0x00
0xbe 0x00 0x0c 0x00 0x03 0x17 0x00 0x00
0x00 0x00 0x00 0x58
STS = HAB_FAILURE (0x33)
RSN = HAB_INV_CERTIFICATE (0x21)
CTX = HAB_CTX_COMMAND (0xC0)
ENG = HAB_ENG_ANY (0x00)
Step 12. 熔断程序
u-boot=> 保险丝程序 6 0 0xDA7CCBEB
u-boot=> 保险丝程序 6 1 0xD7D9F573
u-boot=> 保险丝程序 6 2 0x20DEBFD6
u-boot=> 保险丝程序 6 3 0x0E4AAC11
u-boot=> 保险丝程序 7 0 0xB0965A65
u-boot=> 保险丝程序 7 1 0x1A89C7DA
u-boot=> 保险丝程序 7 2 0x6D960E3F
u-boot=> 保险丝程序 7 3 0xE080A6D8
u-boot=>保险丝程序0 0 0x200
u-boot=>保险丝程序1 3 0x8000000
u-boot=>保险丝程序1 3 0x200000
u-boot=>保险丝程序1 3 0xC00000
u-boot=>重置
重置后,iMX8MM 无法启动,谁能帮我澄清一下?
我想知道正确的方法是什么或者我错过/错误的步骤是什么?