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.

[参考译文] CC3235MODSF:OTA 后固件回滚

Guru**** 2560180 points
Other Parts Discussed in Thread: CC3235MODSF, UNIFLASH

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/853835/cc3235modsf-rollback-of-firmware-after-ota

器件型号:CC3235MODSF
主题中讨论的其他器件: UNIFLASH

您好!

在对 cc3235modsf 执行 OTA 更新时、自动回滚出现问题。  

我正在编写文件 /sys/mcuflashimg.bin、调用 sl_Stop、PRCMHibernateCyclone 触发器并测试新固件。 如果成功,我将调用 sl_FsCtl (sl_FS_CTL_bundle_commit,...)。

如果文件 在首次启动时未通过提交验证、我希望该文件自动恢复为上一个文件;如果文件根本无法正常工作、我希望该文件在几秒钟后自动回滚。  使用功能固件进行测试时、效果良好。 但是、当写入错误文件时、我会遇到两种意外行为:

1:使用 sl_FsClose (FileHandle、FS_certificate_file_name、buff、key_size)关闭文件时;即使密钥不是正确的、它返回0。

2:cc 随后不会唤醒。 我需要从外部对其进行复位

更多信息:

要打开文件、我将使用以下标志:

uint32_t 标志= sl_FS_OVERRITE;
flags |= sl_FS_create;
flags |= sl_fs_create_failsafe;
flags |= sl_fs_write_bundle_file;
flags |= sl_FS_create_MAX_SIZE (FW_MAX_FILE_SIZE);
flags |= sl_fs_create_secure;
flags |= sl_fs_create_public_write;

 写入新文件后、slFsFileInfo_t.Flags 为0x258。

文件写入后捆绑包状态为1、调用 sl_Stop 后捆绑包状态为2。

我也尝试调用 Platform_CommitWdtConfig (如 OTA_cloud 示例中所示)来设置看门狗、但没有成功。

我使用的是最新的 SDK 3_30_01_02和 Service Pack 4.4.4.1.3_3.1.0.5_3.1.0.19

通过对 cc3220modasf 执行类似的过程,调用 sl_FsClose ()时,我会得到错误 sl_error_FS_wrong_signature_security_alert

您有什么想法吗?  

请随时了解更多信息。

此致、

C é dric

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

    您好、Cedric。

    1."钥匙不是正确的钥匙"是什么意思? 什么关键? 您应该提供证书(文件名)和签名(使用相应私钥签名的新文件内容)?

    2.您何时调用"Platform_CommitWdtConfig"? 应在 OTA 过程开始时(在 MCU 复位之前)调用它。

    您提供了什么超时?

    BR、

    Kobi   

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

    您好、Kobi、

    感谢您的及时反馈。

    1:我的措辞确实不好。 我使用的是存储在闪存中的证书、文件签名是使用相应的私钥生成的。  当签名正确时、一切正常、但当签名不正确时、我在 cc3235上不会出现任何错误(在 cc3220上、我确实会得到该错误)

    2:我当前的程序是:

    • 写入新文件
    • Platform_CommitWdtConfig
    • sl_Stop
    • PRCMHibernateCyclebrigger

    3:目前我将其设置为10次二次

    附加测试:

    我尝试使用 SL_FS_WRITE_MOUST_COMMIT 标志而不是 SL_FS_WRITE_BUNDLE_FILE 标志进行测试、并获得相同的行为。

    我已经使用引导加载程序看门狗(Platform_CommitWdtConfig)进行了演示。 我尝试在我的应用程序开始时设置它、并使用 PRCMHibernateCycleTrigger 重新启动、以查看它是否会在下一个唤醒阶段复位、我尝试使用和不使用应用程序看门狗。 我还尝试在调用 Platform_CommitWdtConfig 后将其外部重置、以确保它确实看到引导。 我在任何情况下都没有得到复位。

    是否有办法检查引导加载程序看门狗是否确实已激活?

    此致、

    C é dric

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

    您好、Cedric、

    序列似乎正常。

    看门狗是否适合您使用 CC3220? 我过去曾在 CC3220中亲自验证过它(现在还没有在 CC3235中验证过)。

    请提供 OTA 过程的 NWP 日志(请参阅 :http://processors.wiki.ti.com/index.php/CC3120_%26_CC3220_Capture_NWP_Logs )。

    BR、

    Kobi

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

    您好、Kobi、

    我必须检查 cc3220看门狗。 遗憾的是、我们板上的 NWP 日志很复杂、需要进行大量调整才能使其在 LaunchPad 上运行。

    实际上、我的主要问题更多是在写入错误的安全文件时出现非错误。 如果我可以确保不使用坏文件、那么看门狗只能作为备份解决方案。  这适用于 cc3220。

    我已经做了一些额外的测试、对结果的了解不多。

    服务包:

    当我编写正确的文件并附上其签名时、服务包已正确安装。 但是、当我编写一个错误文件(我使用了一个带有签名的75KB html 文件)时、也不会出现错误。 重新启动后、服务包已被重新加载到旧服务包中:

    芯片0x31000019
    MAC 31.3.0.19
    PHY 0x3.1.0.0
    NWP 0x4.0.1.21
    ROM 0
    主机0x3.0.1.36

    我尝试使用其他标志( sl_FS_CREASE_SECURE)、但遇到了相同的问题。

    以下代码显示了如何打开/关闭 sp:

    FileHandle = sl_FsOpen (SP_FILE_NAME、SL_FS_WRITE | SL_FS_CREATE_MAX_SIZE (SP_MAX_FILE_SIZE)、NULL);
    DBG_PRINT ("lRetVal open:%d"、FileHandle);
    if (FileHandle < 0)
    {
    ERROR_PRINT ("错误:FW %d"、文件处理);
    返回-1;
    }
    
    WatchdogAck(); //获取看门狗、使其不会复位
    lRetVal = HTTPGetServicePack (g_buff、updateFirmwareWriteCallback、FileHandle);
    如果(lRetVal < 0)
    {
    ERROR_PRINT ("错误:FW %d"、lRetVal);
    sl_FsClose (FileHandle、NULL、0);
    返回-1;
    }
    
    //TODO:处理签名(sl_error_fs_wrong_certificate_file_name)
    lRetVal = sl_FsClose (FileHandle、NULL、g_buff、signature_size);
    DBG_PRINT ("lRetVal Close:%d"、lRetVal);
    如果(lRetVal < 0)
    {
    ERROR_PRINT ("错误:FW %d"、lRetVal);
    返回-1;
    } 

    虚拟文件:

    我尝试在安全模式下写入虚拟文件、并使用不良签名写入一次、使用良好签名写入一次。

    我使用 Uniflash 创建文件、如下所示:  

    C:\\ti\\uniflash_5.1.0\\simplelink\\imagecreator\\bin\\SLImageCreator.exe project add_file --name Display_v2 --file dummy.bin --fs_path dummy.bin --prive key.der --cert code_signing.der --overwrite --max_size 7500 --publicflags read、publicwrite、secure

    我也有同样的东西、即使密钥损坏、文件也始终可以无误地写入。  

    由于它在文件正确时起作用、我不明白我的代码怎么会有问题。 我是否应该使用另一组标志在关闭时进行签名检查? 或者 SDK 或 NWP 中是否存在错误?

    您能否重现此问题?

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

    我在 launchpad 上重现了同一问题、并对示例项目进行了细微修改。

    在项目中、文件 msp_measure.bin 由文件 msp_measure_copy.bin 使用另一个密钥/证书对生成的签名进行覆盖。 它应该失败、但却成功。

    以下是 CCS 工程和 Uniflash 工程:

    /cfs-file/__key/communityserver-discussions-components-files/968/Display_5F00_v2_5F00_test_5F00_191107155049.zip

    /cfs-file/__key/communityserver-discussions-components-files/968/httpget_5F00_CC3235SF_5F00_LAUNCHXL_5F00_tirtos_5F00_ccs.zip

    您能复制它吗?

    此致、

    C é dric

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

    您好!  

    您是否能够重现此问题?

    此致、

    C é dric

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

    我在 cc3220上遇到同样的问题、使用最新的 sp 未检测到错误签名。 但是、当恢复到先前的 sp 时、它适用于 cc3220

    SDK_3_20_01_01 SDK_3_30_01_02
    SP_3.12.0.1_2.0.0.0_2.2.0.6 按 预期错误 SL_ERROR_FS_ERROR_signature_security_alert 按 预期错误 SL_ERROR_FS_ERROR_signature_security_alert
    SP_3.13.0.3_2.0.0.0_2.2.0.6 无错误,重新引导时失败 无错误,重新引导时失败

    然后、对于 cc3220、我将使用 SDK_3_30_01_02和 sp_3.12.0.1_2.0.0.0_2.2.0.6、直到该问题得到解决。 是否有任何预期的不兼容性?

    但对于 cc3235、它不起作用。 我尝试了几种 sp:

    SP_4.2.0.3_3.1.0.5_3.1.0.17

    SP_4.3.0.5_3.1.0.5_3.1.0.18

    SP_4.4.4.30.3_3.1.0.5_3.1.0.19

    SP_4.4.4.1.3_3.1.0.5_3.1.0.19

    有什么想法我还能做得更好吗?

    我们需要一个解决方案!

    此致、

    C é dric

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

    我在看门狗和 cc3220modasf 上完成了更多测试。

    通过以下步骤、它可以正常工作:

    • Platform_CommitWdtConfig
    • 写入新文件
    • sl_Stop
    • PRCMHibernateCyclebrigger

    它会在5秒后复位、如 Platform_CommitWdtConfig 中设置的那样、并回滚 FW。

    我无法在 cc3235上执行此操作。

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

    您好、Cedric、

    您的新 OTA 内容是否包含服务包?

    如果是、是 CC3235的 IT SP 吗?

    我能够重现问题、但需要更多时间来调试问题。 我将在下周发送更新。

    BR、

    Kobi

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

    您好、Kobi、

    很高兴您能重现此问题!  

    SP 和 FW 的当前 OTA 过程是分离的。

    如果文件不正确且签名不正确、则两个文件都将静默失败、因为固件会卡住、而 SP 会恢复到旧的固件(如上所述)

    继续发布、我很乐意接受任何修复或解决方法!

    C é dric

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

    您好、Cedric、

    因此、为了验证我们也看到了同样的东西:固件更新工作正常(基于看门狗的自动还原)、但更新错误的 SP 会导致问题(因为看门狗未触发)。 您看到的是这样吗?

    如何生成错误的 SP?

    BR、

    Kobi

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

    您好、Kobi、

    不完全是。

    为了测试坏文件、我采用了 一个几 KB 的随机文件。  (它是一个 html 文件)。 结果是:

    • FW 更新:不会产生错误、看门狗不会启动、因此它在外部复位之前保持不起作用状态
    • SP 更新:不产生错误,SP 恢复为旧错误

    这是我的根本原因:

    • 写入任何带有错误签名的安全文件不会引起任何错误。
    • 看门狗不启动

    您是否能够复制具有错误签名的安全文件(使用上面我提供的项目)?  

    C é dric

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

    您好、Cedric、


    这些问题在内部报告、我们将在下一个版本中处理。  

    我们完全理解其重要性、但我不建议立即修复。

    我现在将关闭该线程、并在修复后提供更新。

    BR、

    Kobi

     

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

    您好、Kobi、

    感谢您的更新、正如我们讨论过的、您能描述您发现和报告的问题吗?

    看门狗问题又如何呢?

    此致、

    C é dric

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

    您好、Cedric、

    报告的问题包括:

    1.在 OTA 更新过程中、CC3235不会识别不良签名。

    2.如果 SP 错误、则缺失故障检测将通过切换到错误而结束、而错误不会触发 OTA 看门狗(因此不会触发自动恢复)。  

    我将此主题标记为已解决、但修复程序仅在下一个 SDK 版本中提供(遗憾的是、本月底不提供)。  

    BR、

    Kobi

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

    您好、Kobi、

    感谢您的更新!

    我将接受问题解决后的线程;)

    谢谢!

    C é dric