1106733_zh-CN

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

1106733_zh-CN

1106733_zh-CN

进入i.MX 8/8X系列部分场回馈生命周期的步骤

背景信息

  • 根据mx8_mx8x_secure_boot.txt中描述的过程,芯片熔丝已编程并关闭(启用网络安全配置) mx8_mx8x_secure_boot.txt\guides\ahab\imx\doc - uboot-imx - i.MX U-Boot
  • 有两种方法可以通过签名消息的方法将生命周期更改为部分字段返回(PFR)。一种方法是使用message_signed.bin生成flash.bin,另一种方法是在uboot中编写新命令,然后手动将message_signed.bin添加到uboot中。后者可以更方便地更改消息内容。

请注意,这些细节/脚本目前仅供NXP内部参考。请不要和顾客分享。

基于上述,部分字段返回的步骤如下:

 

1. 生成一个PKI树,并包含一个下属SGK密钥


pastedImage_3.png

pastedImage_4.png

 

2. 生成 SRK 表和 SRK 哈希


$ cd ../crts/
../linux64/bin/srktool -a -s sha384 -t SRK_1_2_3_4_table.bin -e SRK_1_2_3_4_fuse.bin -f 1 -c SRK1_sha384_secp384r1_v3_ca_crt.pem,SRK2_sha384_secp384r1_v3_ca_crt.pem,SRK3_sha384_secp384r1_v3_ca_crt.pem,SRK4_sha384_secp384r1_v3_ca_crt.pem

    SRK_1_2_3_4_table.bin和SRK_1_2_3_4_fuse.bin文件还可用于后续步骤。

 

3. 获取芯片信息

在iMX8/8X设备上,启动设备并在SCU终端输入并运行命令“seco info”。下列输出将显示在SCU终端上。保存此信息,以备后用。

pastedImage_10.png

 

4. 更新配置文件并生成消息

修改 message_header.json

{"container": {"message": {"permission": "0x10", "cert version": "0", "UID": "0C13380E82895B2C", "flags": "0", "monotonic counter": "0x0"}, "header": {"fuse version": "0", "SW version": "0", "version": "0"}}}

从下图中修改message_content.json,要改为部分返回,生命周期需要改为0x20

pastedImage_13.png

{"Id": "0xa0", "lifecycle": "0x20", "nb words": "1"}

 

然后通过以下命令行生成消息。

 

$python gen-msg-json.py message_header.json message_content.json -o message.bin

 

5. 对消息进行签名


如下所示,将权限修改为 Fuse1:SCU 版本。生命周期,即 0x10。

 

pastedImage_16.png

 

[标题]
目标 = AHAB
版本 = 1.0

[安装SRK]
# srktool生成SRK表格

文件 = "../crts/SRK_1_2_3_4_table.bin"
# PEM格式的公钥证书

来源 = "../crts/SRK1_sha384_secp384r1_v3_usr_crt.pem"
# SRK表中公钥证书的索引(0 .. 3)

源索引 = 0

# SRK集类型(NXP或OEM)
源集 = OEM

# 撤销SRK的位掩码
撤销 = 0x0
 
# ******* 可选命令 *****
[安装证书]

# PEM格式的公钥证书
File = "../crts/SGK1_1_sha384_secp384r1_v3_usr_crt.pem"

# 权限的位掩码权限 = 0x10# ******************************[验证数据]# mkimage生成的待签名二进制文件文件 = "message.bin"# 偏移量 = 容器标题 签名块(由mkimage打印)
偏移量   = 0x0             0x48

 

然后执行命令: ../linux64/bin/cst -i message.csf -o message_signed.bin 并且可以获取message_signed.bin

 

6. 通过第一种方法将生命周期更改为PFR

第一种方法是使用 message_signed.bin 重新生成已签名的 flash.bin。

 

6.1 使用 message_signed.bin 重新生成 flash.bin


$cp message_signed.bin到imx-mkimage/iMX8QX/

转到imx_mkimage仓库并编辑./iMX8QX/scripts/misc.mak中的flash_msg_block规则。

 

-./$(MKIMG) -soc QX -rev B0 -append mx8qx-ahab-container.img -c -scfw scfw_tcm.bin -msg_blk test_block.bin field 0x83000000 -out flash.bin
+./$(MKIMG) -soc QX -rev B0 -append mx8qx-ahab-container.img -c -scfw scfw_tcm.bin -msg_blk message_signed.bin field 0x83000000 -out flash.bin


然后运行:

$ make SOC=iMX8QX flash_msg_block

它将生成新的flash.bin,因为板处于OEM关闭状态,所以需要重新生成flash-signed.bin。

 

6.2 重新生成 flash-signed.bin

创建 csf_boot_image_csf.csf 文件,如下所示:

[标题]
目标 = AHAB
版本 = 1.0

[安装SRK]
# srktool生成SRK表格

文件 = "../crts/SRK_1_2_3_4_table.bin"
# PEM格式的公钥证书

来源 = "../crts/SRK1_sha384_secp384r1_v3_usr_crt.pem"
# SRK表中公钥证书的索引(0 .. 3)
源索引 = 0
# SRK集合类型(NXP或OEM)
源集合 = OEM
# 已撤销SRK的位掩码
撤销 = 0x0
# ******* 可选命令 *****
#[安装证书]
# PEM格式的公钥证书
# 文件 = "../crts/SGK1_1_sha384_secp384r1_v3_usr_crt.pem"# 权限的位掩码
# 权限 = 0x10
# ******************************

[认证数据]
# mkimage生成的待签名二进制文件
文件 = "flash.bin"
# 偏移量 = 容器标题 签名块(由mkimage打印)
偏移量   = 0x400             0x590

然后运行命令: ../linux64/bin/cst -i csf_boot_image_csf.csf -o flash_signed.bin 即可获得flash_signed.bin

 

最后,将生成flash-signed.bin文件,并使用dd命令将其写入SD卡。生命周期预计将变为0x100。

 

pastedImage_25.png

7. 通过第二种方法将生命周期更改为PFR

第二种方法是在uboot中写一个新命令,然后通过该命令在uboot中手动添加message-signed.bin。

 

7.1 在uboot-imx中添加命令。

$ git am 0002-add_ahab_return_lifecycle_disable_cache.patch
$ source 
$ unset LDFLAGS
$ make -j8

重新生成u-boot.bin。

$ cp u-boot.bin  
$ cd imx-mkimage/
$ make SOC=iMX8QX flash
$ cp iMX8QX/flash.bin 

包含flash-signed.bin的CSF描述文件

$ cd 
$ ../linux64/bin/cst -i csf_boot_image.txt -o flash-signed.bin
$ sudo dd if=flash-signed.bin of=/dev/sdX bs=1k seek=32 ; sync

然后使用这个新的u-boot.bin生成flash-signed.bin。将第五步生成的message-signed.bin复制到SD卡。


7.2 启动板并输入命令

给板上电,并停止uboot。

$ fatload mmc 1:1 0x80280000 message_signed.bin
$ ahab_status
$ ahab_return_lifecycle 0x80280000
$ ahab_status

请注意,该地址与您在第一步中输入的地址一致。

然后您可以在SCU串口输入$seco info,看看生命周期预期会变成0x100。

 

Re: Steps to enter Partial Field Return LifeCycle on i.MX 8/8X Family

你好@Tia_Lan

您能提供 Lauterbach 脚本将 SECO 日志转储到 Ankit 吗?

顺祝商祺!

弗兰克

Re: Steps to enter Partial Field Return LifeCycle on i.MX 8/8X Family

你好@frank_zhang


这是不可能的,因为客户从 Linux 内核 sysfs 驱动程序将 LC 返回 OEM 现场操作,然后重启设备电源。


以下是客户在执行 OEM Field Return 返回 LC 后检查 ahab_status 时观察到的日志


# dd if=signed_msg_512.bin of=/sys/kernel/seco/field_return bs=816



[ 548.708086] imx_scu_call_rpc(...) 失败,错误 -13!
[ 548.708097] imx_sc_seco_return_lifecycle(...) 失败,错误 -13

0+0 中的 1+0 条记录复制了

0 字节 (0B),0.066212 秒,0B/s


# cat /sys/kernel/seco/ahab_status

生命周期:0x0080,OEM 已关闭


UID_H: 0x1A10B00E
UID_L: 0x8292379B
单调性计数器:0x0000


SECO event[0] = 0x00A0AB29
CMD = AHAB_FIELD_RETURN_REQ (0xA0)
IND = 未知指示符 (0xAB)


发现 1 SECO 活动


发现 SECO 事件 - 真实性检查失败!


-安基特

Re: Steps to enter Partial Field Return LifeCycle on i.MX 8/8X Family

嗨,安基特、

客户看到错误后,能否在 uboot 中运行 ahab_dump?我们可以查看 SECO 日志。


顺祝商祺!

弗兰克

Re: Steps to enter Partial Field Return LifeCycle on i.MX 8/8X Family

你好@frank_zhang

客户以"的方式签署了" 。

他们使用 CST 工具编写并签署了"Return Lifecycle Update" 信息。

在目标上,通过 Linux 控制台将"签名信息" 发送到其 sysfs 驱动程序。而 sysfs 驱动程序会调用 SCU API: sc_seco_return_lifecycle(具有 SECO_FUNC_RETURN_LIFECYCLE)函数。


他们没有使用签名映像方式(因此签名消息是启动映像的一部分)。


-安基特

Re: Steps to enter Partial Field Return LifeCycle on i.MX 8/8X Family

嗨,安基特、

他们使用的是签名消息方式还是签名映像方式(因此签名消息是启动映像的一部分)?

顺祝商祺!

弗兰克

Re: Steps to enter Partial Field Return LifeCycle on i.MX 8/8X Family

你好@frank_zhang

是的,我做得很好。希望你那边也一切顺利。

客户已执行以下步骤:

  1. 第 1 步:在处于 OEM 开放(恩智浦关闭)状态的 " i.mx8QXP B0 " 设备上,首先测试了使用 " 签名的退货生命周期更新消息 " 将 LC 返回 OEM 现场退货 执行状态,并收到了 SECO 事件 0x 00a0fa29(AHAB_BAD_KEY_HAS_IND)。这确认签名消息已准备就绪,可以在 " OEM Closed " 设备上使用。
  2. 第 2 步:烧毁 OEM SRK 哈希熔丝。
  3. 步骤3:使用签名镜像刷新并启动;确认启动过程中未发生 SECO 事件。此确认设备处于安全启动状态
  4. 第 4 步:使用其 sysfs 驱动程序将 LC 高级到" OEMClosed" 。
  5. 第 5 步:重启板并尝试将 LC 返回 OEM 现场退货;收到了 SECO 事件 0x00A0AB29。此事件表示 "熔丝已被写入/读取锁定"。
  6. 第 6 步:重新启动板,它处于 OEM 现场返回状态

您认为上述步骤有问题吗?


请注意,我们刚刚收到买家的最新消息,称他们在另一块板上完成了上述所有步骤 & 看到 " " 熔丝 被写入/读取锁定 " " 错误。而且 " 尽管如此,在板上进行电源循环后,LC 成功更改为 " OEM Field Return "

-安基特

Re: Steps to enter Partial Field Return LifeCycle on i.MX 8/8X Family

嗨,安基特、

好久不见。希望你一切都好。

我不认为这是意料之中的事。但你说 LC 已经改变了。你能帮我检查一下吗?

找到所有与 LC 相关的熔丝(我记得它不只一个),看看客户之前是否对同一个单词进行了编程。

我将在下周末的电话中向 STEC 询问。请在周末提醒我。

顺祝商祺!

弗兰克

Re: Steps to enter Partial Field Return LifeCycle on i.MX 8/8X Family

你好@frank_zhang

我们收到了客户关于从 " OEM 已 关闭 " 向 " i.mx8QXP " 设备的退货生命周期过渡到 " OEM Field Return " 的询问 。
客户在 Linux 内核中实施了一个 sysfs 驱动程序,以调用SECO API。使用该驱动程序,他们能够将生命周期从 "NXP Closed (OEM Open)"成功过渡到"OEM Closed"。

但是,当他们尝试将生命周期状态返回到"OEM Field Return" 时,他们遇到了一个问题,希望得到一些澄清。

调用 SECO API(SC_SECO_FUNC_RETURN_LIFECYCLE)后,它们会收到以下 SECO 事件:SECO event[0] =0x00A0AB29。此事件表示 "熔丝已被写入/读取锁定"
尽管如此,在板上执行电源循环后,生命周期似乎成功更改为 " OEM Field Return "
这种行为是预料之中的吗?

Tags (1)
No ratings
Version history
Last update:
‎11-19-2025 04:36 PM
Updated by: