This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] DRA821U:u-boot 中具有 DRA821 密钥撤销特性

Guru**** 2538950 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1549597/dra821u-dra821-key-revoke-feature-in-u-boot

器件型号:DRA821U
主题:DRA821 中讨论的其他器件

工具/软件:

亲爱的 champ、  

我的客户通过与 Sitara AE Hong Guan 合作、在 u-boot 中开发了密钥撤销功能。  

由于 SYSFW 中的 TISCI 从 DRA821 变为 AM64x 和 AM62x、因此在 DRA821 上的实现方式相同、因此我们需要借助一些帮助来实现相同的实现方式。  

实施需要 OPTEE。  

随附的文件是为 Sitara 器件创建的修改内容。  

e2e.ti.com/.../5100.main.ce2e.ti.com/.../ti_5F00_sci.ce2e.ti.com/.../ti_5F00_sci.h

请帮助在 DRA821 上启用密钥撤销。   

Br、Rich  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    丰富、  

    密钥撤销究竟是什么意思?

    在 dra821 上、仅允许密钥写入器刻录密钥以进行电子熔断。

    运行时 API 仅支持递增密钥版本。  

    不支持触摸 u-boot 中的按键。

    此致、

    Keerthy  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Rich  

    根据之前的实现、我假设您要使用 optee 接口而不是使用 uboot 来更新 KEYREV 值。 如果是这种情况,您也可以在 DRA821 上使用相同的代码。

    最终 OPTEE 使用 TIFS 服务来更新效率中的值。 这些 API 仍然对 DRA821 有效。我们需要确保在将任何内容刻录到效率之前已启用 VPP。

    此致
    Diwakar

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Diwakar、  

    这是一个好主意、我们验证了 VPP 电压并始终启用它。  

    对于将撤销证书迁移到 DRA821、存在两个空白。

    1.  OPTEE 需要在 DMSC 中获得授权、但新的 SDK 不再支持重新编译 SYSFW(DMSC?)  

     修改后的代码需要重新构建 SYSFW。  

    2. AM62x 的 Scartchpad 有一个地址定义、假设 DRA821 有相应的地址、但找不到该地址。   

    AM62

    #define SRAM_Scratch_BASE   0x43C3B000

    ND 有助于在 DRA821 上启用密钥撤销。   

    ti-optee-OS/CORE/arch/arm/plat-k3/drivers/ti_sci.c

    e2e.ti.com/.../sec_2D00_cfg.c

     

                .size = sizeof(结构 boardcfg_extended_op)、

            }、

            /*主机 ID 0 是 DMSC。 这意味着没有主机对 OTP 阵列具有写入访问权限*/

    -        write_host_id = 0、

    +        write_host_id = 11、

            /*这是一个包含 32 个条目的数组*/

            .OTP_entry ={{0}、

        }、

    Br、Rich

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Rich、

    他们在将双签名证书发送到 TIFS 之前将其复制到暂存存储器。 您还可以使用 DRA821 上的 OCMC 存储器。

    MCU_MSRAM_1MB0_RAM   0x0041C000000 - x0041CFFFFF (1MB)

    此致
    Diwakar

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Diwakar、  

    客户可以尝试使用 OCRAM 进行复制。  保留原始定义 SRAM_Scratch_BASE 并将地址替换为 0x41C00000?

    您的回复显示 0x0041C000000、这是否是额外 0 的拼写错误?  

    #define SRAM_Scratch_BASE   0x41C00000   

    第一个问题呢? 您是否能够创建新的 SYSFW(DM?) 是否撤销? 客户现在无法构建它、因为它不再受支持进行构建。  

    Br、Rich

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Rich、

    [报价 userid=“9853" url="“ url="~“~/support/processors-group/processors/f/processors-forum/1549597/dra821u-dra821-key-revoke-feature-in-u-boot/5974724

    您的回复显示 0x0041C000000、这是否是额外 0 的拼写错误?  

    [/报价]

    是的、有一个拼写错误、那就是 0x0041C00000。

    第一个问题如何? 您是否能够创建新的 SYSFW(DM?) 是否撤销? 客户现在无法构建它、因为它不再受支持进行构建。  [/报价]

    为此、我们无需重新构建 TIFS 二进制文件、默认情况下、TIFS 在 HS-SE 器件上支持此功能。您只需发送 TISCI_MSG_WRITE_KEYREV 双签名证书即可。

    此致
    Diwakar

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    U-Boot SPL 2024.04-ged60d191-脏污 (2025 年 8 月 14 日 — 16:01:32 +0800)
    SYSFW ABI:4.0(固件版本 0x000b “11.0.9--v11.00.09+(花哨 RAT)“)

    您好 TI  

    它仍然不起作用。 我 包括 dual_cert_keyrev.h ,与 tiboo3.bin 相同,用于更改杯型 (HS-SE-> FS )



    DDR 类型:Micron LPDDR4 4G

    尝试从 SPI 引导
    身份验证已通过
    身份验证已通过
    身份验证已通过
    正在从 SPIFlash... ***警告 — 错误的 CRC、使用默认环境

    身份验证已通过
    身份验证已通过
    在 ARM64 内核上启动 ATF……

    注意:BL31:v2.10.0(发行版):ed60d191-dirty
    注意:BL31:建造:16:02:47, 2025 年 8 月 14 日
    I/O TC:
    I/O:主 TC 初始化
    I/SYSFW TC ABI:4.0(固件版本 0x000b “11.0.9--v11.00.09+(花哨 RAT)“)
    I/O:TC:安全电路板配置软件:版本 1
    I/O TC:安全启动密钥:计数 2、修订版 1
    I/sci_set_keyrev TC () 单元测试开始
    I/O:Req.value = 0x00000002 TC
    I/O:REQ_CERT_addr_lo = 0x41C00000 TC
    I/O:q.cert_addr_hi = 0x00000000 TC
    I/O:Req.hdr.type = 0x9035 TC
    I/O:Req.hdr.host = TC
    I/O:req.hdr.seq = 0x4 TC
    I/O:Req.hdr.flags = TC
    e/ret TC:0 ti_sci_set_keyrev:516 >>> ti_sci_do_xfer () 失败、ret = 0xff0001
    I/HUK:TC 已初始化
    I/UL:已激活 TC 设备
    I/TRNG:已为 SA2UL TC 器件启用防火墙
    I/TRNG:SA2UL TC 已初始化
    I/UL:已初始化 TC 驱动程序
    e / TC:0 'stack_abt[7]结尾处的死金丝雀 (0x9e8a83fc)
    E/kernel/thread.c:146 处出现 0 个 TC
    E/TEE:0 TC 加载地址@ 0x9e800000
    E/Call Stack:0 0 TC:
    E/0x9e808008:0 0 TC
    E/0x9e81f168 TC:0 0 0x9e81f168
    E/0x9e822594:0 0 TC
    E/82281c TC:0 0x9e82281c
    E/0x9e807df8 TC:0 0 0x9e807df8

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    -- A/k3-image-gen/ti-optee-os/core/arch/arm/plat-k3/drivers/ti_sci.c
    ++ b/k3-image-gen/ti-optee-os/core/arch/arm/plat-k3/drivers/ti_sci.c
    @@–34、7 +34、7 @@ struct ti_sci_xfer{
    结构 k3_sec_proxy_msg rx_message;
    };

    -#define SRAM_Scratch_BASE 0x43C3B000
    +#define SRAM_Scratch_BASE 0x0041C00000

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Chen:

    您是否可以连接到内核并查看地址  0x41C00000 处是否存在双签名证书。

    此致
    Diwakar

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我不能。“  

    E/SupportAssist TC:0 0 恐慌 位于 core/kernel/thread.c:146

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Alvin:  

    您使用的引导流程是什么?

    No I cannot。  
    [/报价]

    您的意思是您无法从位置  0x41C00000 转储数据。 您可以连接到 MCU R5F 内核并查看是否存在调试证书。

    由于您在应用程序中包含双签名证书、您可以尝试的其他操作是、不要将数据复制到 OCMC RAM、而只需传递阵列的物理地址(通过将虚拟地址转换为物理地址)

    此致
    Diwakar

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Diwakar、  

    Alvin 使用 QSPI NOR 闪存引导。  

    明天我将到场为客户、届时大约中午时分、我们将提供 WebEx。  

    Br、Rich  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Rich、  

    如建议的那样,不要进行中间复制,直接传递证书的物理地址,看看它是否起作用。

    此外、请启用 TIFS 跟踪以获取更多详细信息。

    此致
    Diwakar

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Diwakar、  

    在我们更新时、旧的 OPTEE 代码不适用于您建议的修改。  

    您是否从团队中获得了关于 Git 中新 OPTEE 的反馈? 我们如何通过 TISCI 向 SYSFW 发送 dual_cert?  

    请提供一个有效的示例代码、我们可以直接使用该代码、因为您提到此代码已由团队验证。   

    Br、Rich

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Diwakar、  

    您是否从开发人员处获得新 OPTEE 的示例代码?

    Br、Rich

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Rich、

    我得到了内部团队的反馈、他们只添加了对关键版本更新消息的支持。 理想情况下、这应该在传递有效的双签名证书后有效。

    [报价 userid=“9853" url="“ url="~“~/support/processors-group/processors/f/processors-forum/1549597/dra821u-dra821-key-revoke-feature-in-u-boot/5989266

    在我们更新时、旧的 OPTEE 代码不适用于您建议的修改。  

    [/报价]

    请允许我在我结束时验证此信息、将通过 EOW 更新您。

    此致
    Diwakar

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Diwakar、  

    是的、请通过 OPTEE 通过双重签名认证来更新 eFUSE 寄存器。  

    我们担心从不同内核进行访问受到限制。  

    Br、Rich

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Rich、  

    您能否共享我可以使用的双签名证书 in.h 格式进行测试?

    此致
    Diwakar

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    e2e.ti.com/.../keycert.h

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Rich、

    感谢您分享证书、我将在结束时对其进行测试

    此致
    Diwakar

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Rich、

    我正在尝试安排电路板、但需要一些时间、客户可以做类似的更改并进行测试。

    在被占用户空间应用中、进行以下类似的更改:

    diff --git a/otp_keywriting/host/main.c b/otp_keywriting/host/main.c
    index 8ec2ab5..7f68d81 100644
    --- a/otp_keywriting/host/main.c
    +++ b/otp_keywriting/host/main.c
    @@ -34,7 +34,7 @@
     
     /* OP-TEE TEE client API (built by optee_client) */
     #include <tee_client_api.h>
    -
    +#include "keycert.h"
     /* TA API: UUID and command IDs */
     #include <otp_keywriting_ta.h>
     
    @@ -135,6 +135,35 @@ TEEC_Result lock_otp_row(struct test_ctx *ctx, uint8_t index_row, uint8_t lock_m
     
            return res;
     }
    +TEEC_Result update_kevrev(struct test_ctx *ctx)
    +{
    +       TEEC_Operation op;
    +       uint32_t origin;
    +       TEEC_Result res;
    +       const uint8_t gKeyCert[KEYCERT_SIZE_IN_BYTES] __attribute__((aligned(128))) = KEYCERT;
    +
    +       fprintf(stderr, "Updating KEVREV\n");
    +
    +       op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, TEEC_VALUE_INPUT,
    +                                        TEEC_NONE, TEEC_NONE);
    +
    +       op.params[0].tmpref.buffer = gKeyCert;
    +       op.params[1].value.a = 2;
    +
    +       fprintf(stderr,"invoke update kevrev\n");
    +       res = TEEC_InvokeCommand(&ctx->sess, TA_OTP_KEYWRITING_CMD_UPDATE_KEVREV,&op, &origin);
    +
    +       switch (res) {
    +       case TEEC_SUCCESS:
    +       case TEEC_ERROR_ITEM_NOT_FOUND:
    +               break;
    +       default:
    +               fprintf(stderr, "Command READ_RAW failed: 0x%x / %u\n", res,
    +                       origin);
    +       }
    +
    +       return res;
    +}
     
     void print_usage()
     {
    @@ -143,10 +172,11 @@ void print_usage()
                            "\t--write <hexval>     Write OTP row with value\n"
                            "\t--mask <hexval>      Mask while writing value\n"
                            "\t--read               Read OTP mmr\n"
    -                       "\t--lock               Lock OTP row\n");
    +                       "\t--lock               Lock OTP row\n"
    +                       "\t--kevrev             update kevrev\n");
     }
     
    -enum args { ARGS_READ = 20, ARGS_WRITE, ARGS_VAL, ARGS_MASK, ARGS_LOCK, ARGS_INDEX };
    +enum args { ARGS_READ = 20, ARGS_WRITE, ARGS_VAL, ARGS_MASK, ARGS_LOCK, ARGS_INDEX,ARGS_KEYREV };
     
     int main(int argc, char **argv)
     {
    @@ -165,6 +195,7 @@ int main(int argc, char **argv)
                    { "mask", required_argument, NULL, ARGS_MASK},
                    { "lock", no_argument, &method, ARGS_LOCK },
                    { "index", required_argument, NULL, ARGS_INDEX },
    +               { "keyrev",no_argument, &method,ARGS_KEYREV },
                    { NULL, 0, NULL, 0 }
            };
     
    @@ -179,7 +210,7 @@ int main(int argc, char **argv)
                            break;
                    case ARGS_MASK:
                            sscanf(optarg, "%x", &mask);
    -                       break;
    +                       break;  
                    case '?':
                            fprintf(stderr, "Unknown option %s\n",
                                    long_options[option_index].name);
    @@ -193,8 +224,8 @@ int main(int argc, char **argv)
     
            printf("val: 0x%08x\n", val);
            printf("mask: 0x%08x\n", mask);
    -
    -       if (index == -1)
    +       printf("opt: %d\n", opt);
    +       if (index == -1 && method != ARGS_KEYREV)       
            {
                    ret = -EINVAL;
                    goto err_exit;
    @@ -225,6 +256,12 @@ int main(int argc, char **argv)
                    if (ret != TEEC_SUCCESS)
                            errx(1, "Failed to lock row: %d\n", ret);
                    break;
    +       case ARGS_KEYREV:
    +               fprintf(stderr, "- Nw Update KEVREV\n");        
    +               ret = update_kevrev(&ctx);
    +               if (ret != TEEC_SUCCESS)
    +                       errx(1, "Failed to update KEVREV: %d\n", ret);
    +               break;
     
            }
            }
    

    在被测 PTA 侧时:

    • 应用 tisci API 支持的上游补丁:/cfs-file/__key/communityserver-discussions-components-files/791/0001_2D00_plat_2D00_k3_2D00_drivers_2D00_ti_2D00_sci_2D00_Add_2D00_support_2D00_for_2D00_setting_2D00_KEYRE.patch
    • 在受信任的应用程序中进行类似的更改。

      diff --git a/core/pta/k3/otp.c b/core/pta/k3/otp.c
      index bfe87a37e..84d445d2c 100644
      --- a/core/pta/k3/otp.c
      +++ b/core/pta/k3/otp.c
      @@ -10,7 +10,8 @@
       #include <inttypes.h>
       #include <k3/otp_keywriting_ta.h>
       #include <kernel/pseudo_ta.h>
      -
      +#include <mm/core_memprot.h>                                                                                                            
      +#include <mm/core_mmu.h>   
       static TEE_Result write_otp_row(uint32_t param_types, TEE_Param params[4])
       {
       	TEE_Result ret = TEE_SUCCESS;
      @@ -96,6 +97,42 @@ static TEE_Result lock_otp_row(uint32_t param_types, TEE_Param params[4])
       	return TEE_SUCCESS;
       }
       
      +static TEE_Result update_otp_key_revoke(uint32_t param_types,
      +					TEE_Param params[4])
      +{
      +	TEE_Result ret = TEE_SUCCESS;
      +	uint32_t phys_address = 0;
      +	const uint32_t exp_param_types =
      +		TEE_PARAM_TYPES(TEE_PARAM_TYPE_MEMREF_INPUT,
      +				TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_NONE,
      +				TEE_PARAM_TYPE_NONE);
      +	
      +	DMSG("Revoke the cert: 0x%08"PRIx32, params[0].memref.buffer);
      +	DMSG("Revoke the key: 0x%08"PRIx32, params[1].value.a);
      +	phys_address = virt_to_phys((uint8_t *)params[0].memref.buffer);		
      +	if(phys_address == 0)
      +	{
      +		return TEE_ERROR_BAD_PARAMETERS;
      +	}
      +	else
      +	{
      +		EMSG("Physical address: 0x%08"PRIx32, phys_address);
      +	}
      +	/*
      +	 * Safely get the invocation parameters
      +	 */
      +	if (param_types != exp_param_types)
      +		return TEE_ERROR_BAD_PARAMETERS;
      +
      +	ret = ti_sci_set_keyrev(params[1].value.a, phys_address,0);
      +	if (ret)
      +		return ret;
      +	DMSG("Revoke the key: 0x%08"PRIx32, params[0].value.a);
      +
      +	return TEE_SUCCESS;
      +}
      +
      +
       static TEE_Result invoke_command(void *session __unused,
       				 uint32_t command, uint32_t param_types,
       				 TEE_Param params[4])
      @@ -107,6 +144,8 @@ static TEE_Result invoke_command(void *session __unused,
       		return write_otp_row(param_types, params);
       	case TA_OTP_KEYWRITING_CMD_LOCK_ROW:
       		return lock_otp_row(param_types, params);
      +	case TA_OTP_KEYWRITING_CMD_UPDATE_KEVREV:
      +		return update_otp_key_revoke(param_types, params);
       	default:
       		EMSG("Command ID 0x%"PRIx32" is not supported", command);
       		return TEE_ERROR_NOT_SUPPORTED;
    •  在 config.mk 中进行以下更改、以避免任何与堆栈相关的问题。
      cfg_stack_thread_extra?= 150000

    看看它是否起作用。

    此致
    Diwakar

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 TI

    我已经尝试在 Linux(TA) 下撤销,  但它仍然不起作用。  

    我认为、由 uboot 的审核者或 Linux 的审核者撤销是相同的。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Diwakar、  

    首先、我们想确认您提供的补丁基于新的 OPTEE、该 OPTEE 已经在 SDK 11 中提供。

    其次、该补丁是否在 SDK 11 上使用 TI 密钥进行了验证?  

    请让一个已编程 TI 密钥的插座板、然后撤销它以切换到第二个密钥并提供历史日志、以便我们可以按照流程在客户电路板上实施。  

    如果我们无法按照您的步骤和日志完成远程调试部分、我们可以安排该部分。

    Br、Rich

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Alvin:

    是否仍出现崩溃、请提供更多详细信息。

    帮助我处理日志还可以帮助我处理 TIFS 日志、以查看请求是否到达 TIFS。

    此致
    Diwakar

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Diwakar、  

    通过 OPTEE 发送 TISCI 命令后、没有响应。  

    Linux 不会崩溃、但没有响应。  

    客户电路板未保留 MCU_UART、因此无法获取 TIFS 日志。

    对于您想要检查的 TISCI 状态、请提供要转储的示例代码和地址。  

    启用 VPP。  

    设置启动配置 0x11。  

    Br、Rich

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Rich、

    客户是否支持唤醒 UART、如果是、请通过以下更改启用 TIFS 跟踪并共享跟踪。

    diff --git a/arch/arm/dts/k3-j721s2-common-proc-board-u-boot.dtsi b/arch/arm/dts/k3-j721s2-common-proc-board-u-boot.dtsi
    index 9affb20a..399e660f 100644
    --- a/arch/arm/dts/k3-j721s2-common-proc-board-u-boot.dtsi
    +++ b/arch/arm/dts/k3-j721s2-common-proc-board-u-boot.dtsi
    @@ -154,3 +154,7 @@
     &chipid {
            bootph-all;
     };
    +
    +&wkup_uart0_pins_default{
    +       bootph-all;
    +};
    

    diff --git a/board/ti/j721s2/board-cfg.yaml b/board/ti/j721s2/board-cfg.yaml
    index 94e61ab1..4af4c0db 100644
    --- a/board/ti/j721s2/board-cfg.yaml
    +++ b/board/ti/j721s2/board-cfg.yaml
    @@ -32,5 +32,5 @@ board-cfg:
             subhdr:
                 magic: 0x020C
                 size: 8
    -        trace_dst_enables: 0x00
    -        trace_src_enables: 0x00
    +        trace_dst_enables: 0x0D
    +        trace_src_enables: 0x1F
    

    [报价 userid=“9853" url="“ url="~“~/support/processors-group/processors/f/processors-forum/1549597/dra821u-dra821-key-revoke-feature-in-u-boot/6024731

    对于您想要检查的 TISCI 状态、请提供要转储的示例代码和地址。  

    [/报价]

    他们可以认为此 代码 是客户需要转储 大小为 0x1000 的 0x4406B000 中的数据。  

    我在最后进行了测试、进行了与我在 e2e 中提供的相同的更改、可以看到消息正在发送给 TIFS。

    此致
    Diwakar

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Diwakar、  

    客户正在使用 SDK10、原始 OPTEE 和补丁来自 SDK8。  

    SDK10 和 SDK11 上的 OPTEE 实现(新)看起来相同、客户软件将基于 SDK10 来实现大规模生产。  

    请使用 SDK 10 包验证 TI EVM 上的密钥撤销功能 、然后客户可以按照相同的步骤启用该功能。  

    Br、Rich  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Rich、

    下面是我在 TI EVM 的末端测试的参考补丁。 我检查了 TIFS 跟踪和联系 TIFS 的呼叫、并且双重证书的验证正在通过。

    如果我们启用 VPP、它应该可以正常工作。 我正在内部工作,在 sockected 板上测试,这将需要一些时间。同时,客户可以做类似的更改.

    optee_example 参考补丁:

    e2e.ti.com/.../optee_5F00_example_5F00_keyrevoke.patch

    OPTE_OS 受信任应用程序补丁:我将双证书复制到 0x41CFEFFF 地址、因为 TI EVM 上的任何组件都不使用该地址。

    e2e.ti.com/.../trusted_5F00_application_5F00_patch_5F00_optee_5F00_os.patch

    电路板配置更改:

    diff --git a/board/ti/j721s2/sec-cfg.yaml b/board/ti/j721s2/sec-cfg.yaml
    index d0f3a161..9fc786e4 100644
    --- a/board/ti/j721s2/sec-cfg.yaml
    +++ b/board/ti/j721s2/sec-cfg.yaml
    @@ -248,104 +248,104 @@ sec-cfg:
             subhdr:
                 magic: 0x4081
                 size: 69
    -        write_host_id: 0
    +        write_host_id: 11
    

    TI EVM 上的 TIFS 布线。

    此处的错误代码 4 表示通过证书验证并失败、以及在写入 OTP 时未启用 VPP。

    此致
    Diwakar

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Rich、

    我能够安排一个 TDA4AL 插槽式板、并在上面测试了相同的补丁、并且可以看到 keyrev 正在更新。 请查找以下日志。

    在撤销密钥之前:

    e2e.ti.com/.../hs_5F00_se_5F00_key_5F00_rev1.txt

    Linux 日志:

    invoke update kevrev
    D/TC:? 0 update_otp_key_revoke:117 Revoke the key: 0x00000002
    D/TC:? 0 update_otp_key_revoke:119 vir_address: 0x9acfefff
    F/TC:? 0 k3_sec_proxy_send:131 Verifying the thread
    F/TC:? 0 k3_sec_proxy_verify_thread:71 Check for thread corruption
    F/TC:? 0 k3_sec_proxy_verify_thread:88 Check for thread direction
    F/TC:? 0 k3_sec_proxy_verify_thread:100 Check for thread queue
    F/TC:? 0 k3_sec_proxy_verify_thread:113 Success
    F/TC:? 0 k3_sec_proxy_recv:193 Verifying thread
    F/TC:? 0 k3_sec_proxy_verify_thread:71 Check for thread corruption
    F/TC:? 0 k3_sec_proxy_verify_thread:88 Check for thread direction
    F/TC:? 0 k3_sec_proxy_verify_thread:100 Check for thread queue
    F/TC:? 0 k3_sec_proxy_verify_thread:113 Success
    D/TC:? 0 update_otp_key_revoke:132 Revoke the key: 0x9c601088
    
    D/TC:? 0 tee_ta_close_session:460 csess 0x9e8a4690 id 3
    We're done, close and release TEE resources
    D/TC:? 0 tee_ta_close_session:479 Destroy session
    

    密钥撤销后:

    e2e.ti.com/.../hs_5F00_se_5F00_key_5F00_rev2.txt

    我很有信心、客户电路板上的东西也能正常工作。

    此致
    Diwakar

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 TI

    能否提供所有详细操作? 它看起来是有效的。 但我不知道该怎么做。

    1.你的选择贴片。

    2.如何创建 dual_key.h

    3、如何在 Linux 下撤销? ...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好 Alvin。

    我在之前的响应中存在补丁  :DRA821U:u-boot 中的 DRA821 密钥撤销特性 

    此致  

    Diwakar  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Diwakar、  

    能否提供 CA 示例、这是最后一步?  

    Br、Rich

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好 Alvin。

    optee_example_keyrevokeed.patch 是一个 CA 补丁、  我们将向 optee 受信任应用程序发送双签名证书、我的双签名证书以头文件的形式包含  keycert.h  我正在将此证书的地址传递给 TA。

    trusted_application_patch_optee_os.patch 是受信任的应用程序补丁。 在此补丁中、我们将双重证书复制到 OCMC 存储器、然后将其发送到 TIFS。

    此致
    Diwakar

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    下载您使用的 CA 应用程序是什么??

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好 Alvin  

    不确定我是否正确理解了您的问题、我生成了客户端应用程序并复制到我的 rootfs。

    启动器件后、我 像这样运行了应用程序  

    /optee_example_otp_keyrev   

    此致
    Diwakar

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Diwakar、  

    您能否提供用于 optee_example_otp_keyrev 的代码库?  

    只有补丁、客户希望基于代码库以供参考。  

    Br、Rich

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Rich、

    这是我用于构建示例的存储库。

    https://github.com/linaro-swg/optee_examples

    我的问题是客户是如何提前构建的? 他们之前也在使用客户端应用程序。

     它们必须参考  update_kevrev 函数调用并在其应用程序中进行相应的更改。

    Regarsds
    Diwakar

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Diwakar、  

    客户已验证所有流程、并且 keycert.h 上仍然有故障器件

    您能否提供有关如何一步一步地生成它的过程的说明?

    请勿使用脚本、因为客户私钥需要从 HSM 计算机访问、因此他们需要分解过程并单独绑定其密钥。  

    Br、Rich  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Rich、

    我已经 针对相同内容创建了常见问题解答、提到了所有步骤、包括创建 keycert 的步骤。

    此致
    Diwakar

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Diwakar、  

    感谢常见问题解答、它确实有助于客户立即成功撤消密钥。  

    OPTEE 实际上可以成功地向 TIFS 发送推荐和认证、但认证不正确。   

    门控点实际上是创建认证的客户密钥存储在 HSM 计算机中的方式、常见问题解答中的所有脚本仍然基于本地构建计算机中的密钥存储。

    客户必须撕下脚本、然后通过从 HSM 服务器中检索其密钥来重新创建解密和加密的方式、从而生成认证。  

    我们使用的脚本越多、它们需要实现的拆卸和重写赞扬就越多。

    验证最初验证的功能需要很长时间。 只是因为使用钥匙的方式对客户来说并不实用。   

    感谢您的助手。 我们必须创建一个脚本或其他方法来与 HSM 计算机挂钩、因此这不会  再次成为客户的定制任务。   

    Br、Rich  

      

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Rich、

    门控点实际上是创建认证的客户密钥存储在 HSM 计算机中的方式、常见问题中的所有脚本仍然基于本地构建计算机中的密钥存储。

    TI 始终展示参考并使用可用的 TI 虚拟密钥 来演示特性。

    如果您说我们不应该使用任何脚本、我们就不能在 TI SDK 中支持任何 HS-SE 器件。 FWIW、TI 的所有签名都基于标准的 openssl 命令。

    客户必须拆开脚本并通过从 HSM 服务器检索其密钥来重新创建解密和加密方式、从而生成认证。  [/报价]

    如果是线缆、情况总是如此。 我不知道你建议在这里做些什么。  映像的签名始终取决于客户拥有的 HSM 服务器基础设施、以及其 HSM 服务器提供的用于执行各种操作的接口。

    我们只能提供与公共 SDK 相关的示例。  

    此致

    Suman