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.

[参考译文] CC3200:通过 OTA dropbox 失败进行软件更新

Guru**** 2756835 points

Other Parts Discussed in Thread: CC3200

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/1047370/cc3200-sw-updates-via-ota-dropbox-failes

器件型号:CC3200

您好!

上周、我想10月21日星期四的 OTA 更新开始失败。 他们已经工作了多年。 我已打开 OTA 日志、您可以在下面看到这些日志。


OTA 正在进行
EXTLIB_OTA_GET_OPT_IS 待定提交? 0
正在启动 OTA
sl_extLib_OtaRun:调用 OtaClient_ConnectServer OTA server=api.dropbox.com
OtaClient_ConnectServer:http_connect_server api.dropbox.com
sl_extLib_OtaRun:OtaClient_UpdateCheck、vendorStr=ODSIF_WIFI_36_D
CdnDropbox_SendReqDir:UI=/2/files/list_folder
元数据文件=/ODSIF_WIFI_36_D/F80_sys_mcuimgA.bin、大小=151320
sl_extLib_OtaRun:OtaClient_UpdateCheck、numUpdates=1
sl_extLib_OtaRun:OtaClient_GetNextUpdate:file=/ODSIF_WIFI_36_D/F80_sys_mcuimgA.bin、size=151320
OtaClient_ResourceMetadata:文件标志=80,元数据标志=80
CdnDropbox_SendReqFileUrl:Uri=/2/files/get_Temporary 链接
SL_extLib_OtaRun:ResourceMetadata CDN 文件 URL = uc4e6d0a156efefbb6017fce8317.dl.dropboxusercontent.com/.../file
_ReadFileHeaders:domain=uc4e6d0a156efefbb6017fce8317.dl.dropboxusercontent.com、file=/cd/0/get/BYrX0i1ilqyDjNZfhB6ruq2WqQAgQUan59p11LCFKOTmtQiFN3h19Kj9wkFl9u_wjeO3uAOxu6xEeEjgSpuavsL0vSydydfTE6neIuf9vgeSn6szP_y7CUMTVKSBfQYxfNlpJTE8ROwhA8WCT92hdmcu/file
_ReadFileHeaders:跳过 http 头
HTTP_SKIP_HEADers:HTTP 错误代码 HTTP/1.1 400
_ReadFileHeaders:错误、http_skip_headers、status=-1
CdnClient_ConnectByUrl:错误、_ReadFileHeaders、STATUS=-1
SL_extLib_OtaRun 错误:CdnClient_ConnectByUrl 上失败
OTA 运行=-6
OTA:OTA 服务器出错
[sock error]-关闭套接字(82)操作无法传输所有排队的数据包

您能看到这里发生了什么情况吗? 我使用的是 SDK 1.5.0和 servicepack 1.0.1.15-2.13.0.2

BR

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

    我们还不确定。

    Dropbox 似乎做了一些我们不知道的更改(我们看到了不同的问题、仍在检查)。

    您在"get_Temporary _link"请求上收到 HTTP 400 (错误请求)。

    我看不到类似的问题。

    您可以尝试就此联系 Dropbox 支持。

    我们还尝试了解 Dropbox 变化的性质。

    另请注意、他们将其证书更新为"DigiCert 全局根 CA"。 此错误与之无关、但更改应很快发生-因此请做好准备。

    在证书发生更改之前、我们建议更改代码、以便在连接失败时(使用当前的"DigiCert 高保证根 CA"、它将使用新的证书重试)。

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

    您好!

    我从下拉框收到了以下信息。 您可以看到、请求下拉框似乎正常、但 simplelink 无论如何返回400。

    连接到分动箱轮距的链接: www.dropboxforum.com/.../552468

    BR

    P.S 感谢您让我了解证书更改

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

    已确定问题。

    这是由于现在接收到的 Dropbox URL 中出现"#"(在"/2/files/get_Temporary _link" API 的响应中)

    为了修整"#"、您可以使用以下代码(替换 cc3200-sdk\simplelink_extlib\ota\CdnClient.c 中的 CdnClient_ConnectByUrl ()):

    _i32 CdnClient_ConnectByUrl(void *pvCdnClient, OtaFileMetadata_t *pResourceMetadata, _i32 secured_connection)
    {
        CdnClient_t *pCdnClient = (CdnClient_t *)pvCdnClient;
        _u8 domain_name[64];
        _u8 req_uri[MAX_CDN_URL_LEN];
        _u8 *cdn_url = pResourceMetadata->cdn_url;
        _i32 status;
    
        /* fix for DropBox issue - i.e. getting trimming the '#' at the end of the URL */
        char* pBuf = (char*)cdn_url;
        if(pBuf = strstr(pBuf, "#"));
            *pBuf = 0;
    
    
        /* extract CDN server name and file name */
        status = http_extract_domain_by_url((_u8 *)cdn_url, domain_name, req_uri);
        if (status < 0)
        {
            Report("CdnClient_ConnectByUrl: ERROR, http_extract_domain_by_url, status=%ld\r\n", status);
            return OTA_STATUS_ERROR;
        }
    
        /* Skip connect server if same CDN server */
        if (strcmp((const char *)pCdnClient->cdn_server_name, (const char *)domain_name) != 0)
        {
            /* close previous CDN server socket */
            CdnClient_CloseServer(pCdnClient);
            strcpy((char *)pCdnClient->cdn_server_name, (const char *)domain_name);
            /* connect to the CDN server */
            pCdnClient->port_num = SOCKET_PORT_DEFAULT;
            do {
                pCdnClient->fileSockId = http_connect_server(pCdnClient->cdn_server_name, 0, pCdnClient->port_num, secured_connection, SOCKET_BLOCKING);
            } while(pCdnClient->fileSockId == SL_ESECT00MANYSSLOPENED); // Retry until previous connection is closed
    
    	if (pCdnClient->fileSockId < 0)
            {
                Report("CdnClient_ConnectByUrl: ERROR on http_connect_server, status=%d\r\n", pCdnClient->fileSockId);
                CdnClient_CloseServer(pvCdnClient);
                if (pCdnClient->fileSockId == OTA_STATUS_ERROR_CONTINUOUS_ACCESS)
                {
                    return OTA_STATUS_ERROR_CONTINUOUS_ACCESS;
                }
                return CDN_STATUS_ERROR_CONNECT_CDN;
            }
        }
    
        /* read file headers, skip all not relenant headers */
        status = _ReadFileHeaders(pCdnClient->fileSockId, pCdnClient->cdn_server_name, req_uri); 
        if (status < 0)
        {
            Report("CdnClient_ConnectByUrl: ERROR, _ReadFileHeaders, status=%ld\r\n", status);
            CdnClient_CloseServer(pvCdnClient);
            return CDN_STATUS_ERROR_READ_HDRS;
        }
    
        pCdnClient->totalBytesReceived = 0;
        pCdnClient->state = CDN_STATE_CDN_SERVER_CONNECTED;
    
        if (pResourceMetadata->flags & METADATA_FLAGS_NOT_SFLASH_STORAGE)
        {
            /* Host storage */
            pCdnClient->pFlcCb = pCdnClient->pFlcHostCb; /* switch (only for current file) to host storage  */
        }
        else
        {
            /* Sflash storage */
            pCdnClient->pFlcCb = pCdnClient->pFlcSflashCb; /* switch back to default SFLASH storage  */
        }
    
        /* save metadata */
        pCdnClient->pResourceMetadata = pResourceMetadata;
    
        return OTA_STATUS_OK;
    }
    
    

    这将需要 重建 OTA 库和 应用程序。

    如果您的现场有器件、则需要联系 Dropbox、并请求他们删除"/2/files/get_Temporary _link"响应中提供的 URL 中的"#"。

    注意由于 Dropbox 环境(API、身份验证方法和证书)经常发生变化、我们建议切换到另 一个 CDN 服务器进行 OTA。  当移植到另一台服务器时、请参考库代码作为示例。

    另请注意、Dropbox 即将更换其证书、您应提前做好准备。 如需了解更多详细信息、请访问 :https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/977073/faq-simplelink-cc32xx-sdk-important-notice-for-customers-using-dropbox-for-ota-updates

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

    好的、感谢您的纠正。 我将在接下来的几天进行测试。 但我在 cc3200的 OTA 代码中搜索了证书、但找不到证书。 代码中是否嵌入了该代码、或者如何找到它?

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

    抱歉。 使用 CC3200时没有服务器身份验证、因此证书不是问题(仅在 CC3220/3x 上)。

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

    由于没有使用 cc3200进行服务器身份验证、这意味着此通知不适用于 cc3200

    https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/977073/faq-simplelink-cc32xx-sdk-important-notice-for-customers-using-dropbox-for-ota-updates


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

    您好、Kobi、

    我已经测试了校正、对于 Dropbox 的现有新实施方案来说、这是可以的。 但是、随着 Dropbox 尝试解决我的问题(以及其他人!) 对于已经在现场的器件、我将等待将其标记为已解决、直到我看到它们可以如何帮助并根据希望的新校正测试解决方案。 我希望这可以。

    BTW:

    为什么不是公司与 Dropbox 合作、才能获得正在运行的物联网设备解决方案。 这个市场可能很大(已经在发展过程中)、然后我们可以确信、我们有一个正在运行的解决方案、它不会因未在器件和软件版本之间进行测试的更改而受到影响。 我与 Dropbox 的合作非常愉快、作为一家大型物联网公司、您必须更轻松地与他们达成良好的协议。

    我知道、对于新器件、您还可以使用 OTA 与 Github 配合使用。 这当然没问题、但由于其侧面的变化、这里可能会出现类似或新的问题、因此这可能不是 OTA 永远工作的问题。

    第三种解决方案当然是在自己的服务器上拥有自己的 OTA 解决方案。 但是、如果我可以避免、我(以及您的许多其他客户)不愿意为此提供解决方案。 对于未来的解决方案、我的一个参数是、一个良好且可靠的 OTA 解决方案已经到位。

    这只是我谦逊的意见,我希望你能提出这种意见。



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

    明白。 我们无法确保 Dropbox 不会这样做。 它们并不关注物联网市场(许多问题仅与 SimpleLink 等资源有限的器件相关)。

    我们正在努力找到最佳合作伙伴、在较新的器件(CC3220/35)中、我们还可以选择使用本地 OTA (即您可以使用与其连接的移动设备更新器件的方法)。 在下一个版本中、我们将添加一个选项来同时选择2个 OTA 供应商(例如、Dropbox + Github)、以便在一台服务器出现故障时备份。

    对于 CC3200、我们只能建议使用其他服务器来避免类似的问题。

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

    您好、Kobi、

    Dropbox 现在已删除链接中的"#"、因此 dropbox OTA 现在可以在本主题前面的补丁中使用和不使用补丁程序再次工作。 感谢您为解决方案提供帮助。