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.

[参考译文] RTOS/DK-TM4C129X:连接到云(https 客户端)-使用代理和 TLS

Guru**** 2331900 points
Other Parts Discussed in Thread: TM4C129XNCZAD, EK-TM4C129EXL, TM4C129ENCPDT, CC3120, CC3100, CC3200
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/593733/rtos-dk-tm4c129x-connect-to-cloud-https-client---using-proxy-and-tls

器件型号:DK-TM4C129X

工具/软件:TI-RTOS

您好!

我使用基本代码作为 TI RTOS 中提供的示例(尽管它用于另一个电路板)、用于在我的目标上建立 https 客户端。

当它连接到以太网的电路板上运行代码时、我收到主机未解决的错误

要进行测试、我尝试将 cURL 连接到云服务器、但没有 解决相同的错误主机。 然后、我设置了 cURL 的代理设置、并且能够通过代理隧道将 cURL 连接到云。

现在、我要对目标执行相同的操作、例如设置代理。  

我找不到很多相关的文档或示例。 请您能为我提供帮助、并向正确的方向指导。  

非常感谢

AV

MCU:tm4c129xnczad

电路板:DK-tm4c129x

IDE:CCS

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

    您好!

    更新:

    我能够在此板上设置代理设置。

    我能够从目标成功执行 http GET 命令。

    我的下一个问题是关于 HTTPS 客户端。 我知道 wolfsl 必须单独下载、构建、然后链接到我的项目(如果我错了、请更正)。 但 Wiki 页面的"支持的目标和产品"部分中没有提到我的板。

    是否可以在 dk-tm4c129x 上创建 HTTPS 客户端?

     

    请就此为我提供指导

     

    非常感谢

    AV

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我的预期是 DK-TM4C129X 将支持与 EK-TM4C1294EXL 相同的软件以太网示例。 您指的是哪个 wiki 页面?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Bob:

    这是 wiki 页面:
    processors.wiki.ti.com/.../Using_wolfSSL_with_TI-RTOS

    我正在尝试按照其中给出的步骤将 wolfsl lib 链接到我的项目。 我想确保这是一个可行的解决方案、然后再继续。
    我相信这是两种方法:TI-RTOS 支持的 TLS 层(即 SimpleLink 和 WolfSSL)
    我们是否可以使用 simplelink TLS 代替 wolfsl 来实现该电路板?

    谢谢
    AV
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    TM4C129XNCZAD 是 DK-TM4C129X 的超集、是 EK-TM4C129EXL 上的 TM4C129ENCPDT、因此您不应遇到问题。

    对于您问题中的 TI-RTOS SimpleLink 部分、我将把该部分转移给负责该软件的小组。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    具有 SimpleLink 的 TLS 在 CC3100/CC3120网络处理器上关闭。 如果您使用以太网、我们目前仅提供 WolfSSL 示例/支持。 有关 WolfSSL 的具体问题、我们建议您直接与他们联系。

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

    你(们)好

    我正尝试构建 wolfsl、如 wiki 页面 http://processors.wiki.ti.com/index.php/Using_wolfSSL_with_TI-RTOS#Build_Instructions 中所述 

    我的 wolfsl 版本是3.11.0

    但是、当我构建它时、我遇到了与 AES 文件相关的以下错误

    我知道我必须更改 settings.h 中的配置

     我能不能告诉我必须为 ti RTOS 更改的正确配置是什么

    这就是我的 products.mak 文件的外观

    #
    ====== products.mak =====
    #
    #
    ##阅读 processors.wiki.ti.com/.../Using_wolfSSL_with_TI-RTOS
    #、了解下载所需软件的说明。
    
    # XDC_INSTALL_DIR 是 XDCtools 目录的路径。
    XDC_INSTALL_DIR = C:/ti/xdctools_3_32_00_06_core
    
    # BIOS_install_DIR 是 TI-RTOS 内核(SYS/BIOS)目录的路径。 如果
    您#已安装 TI-RTOS,则它位于 products/BIOS_*路径中。
    BIOS_install_DIR = C:/ti/tirtos_tivac_2_16_01_14/products/bios_6_45_02_31
    
    # NDK_INSTALL_DIR 是 TI-RTOS NDK 目录的路径。 如果
    您安装了#个 TI-RTOS,它位于 products/NDK_*路径中。
    NDK_INSTALL_DIR = C:/ti/tirtos_tivac_2_16_01_14/products/ndk_2_25_00_09
    
    # TIVAWARE_INSTALL_DIR 是 Tivaware driverlib 目录的路径。 如果
    您已安装#个 TI-RTOS,它位于 products/TivaWare_*路径中。
    TIVAWARE_INSTALL_DIR = C:/ti/tirtos_tivac_2_16_01_14/products/TivaWare_C_Series-2.1.1.71b
    
    导出 XDCTOOLS_Java_HOME = C:/ti/ccsv6/eclipse/jre
    #定义 TI、IAR 和 GCC ARM 编译器的代码生成工具路径。
    #如果您已经安装了 Code Composer Studio,则 TI 和 GCC 编译器位于
    ccsv*/tools/compiler /*路径中的#。
    #
    #将分配留空以禁用任何工具链。
    TI.targets.arm.elf-M4F = C:/ti/ccsv6/tools/compiler/ti-cgt-arm_16.6.0.STS
    IAR.targets.arm.M4F =
    GNU.targets.arm.M4F =
    

    非常感谢

    AV

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

    [引用 user="a.v"]我的 wolfsl 版本为3.11.0[/引用]

    我们对 Tiva 的 WolfSSL 支持仅限于 WolfSSL v3.9.6w。 您可以从 其 GitHub 下载 WolfSSL 的该版本(GPL 许可)

    希望这对您有所帮助。

    Vikram

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

    您好、Vikram、

    我在尝试 wolfsl 的3.9.6.w 版本后面临同样的错误。

    能否建议正确配置 products.mak 文件和解决方案来克服此错误。

    更新:

    我可以按照以下链接正确构建 wolfsl: https://github.com/wolfSSL/wolfssl-examples/tree/master/tirtos_ccs_examples

    我的板是 DK-TM4C129X

    我无法直接从 Resource Explorer 中使用任何示例。

    我已按照上述链接进行操作、并且能够为我的板构建 https GET 项目、而不会出现任何错误。

    但是

    当我运行这个时、我会得到一个错误  

    https://task: TLS 创建失败

     

    我知道在该板上使用 wolfsl 时、需要将证书保存为字符串。

    uint8_t ca[]="line1" 
    "线2 "
    "行3"
    "等等"; TLS_PARAMS tlsParams; TLS_Handle TLS; TLS_PARAMS_INIT (&tlsParams); tlsParams.ca = ca;//storage; tlsParams.calen = strlen ((const char*) ca);//strlen (sl_SSL_CA_CERT_file_name); UARTprintf ("ca=%s\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n"、tlsParams.ca,tlsParams.calen); TLS = TLS_create (TLS_METHOD_CLIENT_TLSv1_2、&tlsParams、NULL); 如果(!TLS) { UARTprintf ("https://task: TLS create failed"); } cli.TLS = TLS; cli_handle->tls=tls;

    这是正确的格式吗?

    请建议

     

    谢谢

    AV

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    TLS_CREATE ()可能会由于以下两个原因而失败:

    1.输入 CA 证书错误。
    确保您使用的是正确的 CA 证书,并将应用程序中的"line1""line2"替换为实际的 CA 证书。

    2.系统时钟时间错误。
    https://get 示例使用 SNTP 设置系统时钟(使用 seconds_set())。 wolfSSL 堆栈需要时间来验证
    证书。 系统时钟是否在您的应用中设置?

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

    您好 Vikram;

    我输入的证书是这样的:我的证书是 geo trust golbal ca

    uint8_t ca[]="MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTALVT\

    MRYwFAYDVQKEw1HZW9UcnVzdCBJbmmMuMRswGQYDVQDExJHZW9UcnVzdCBHBG9i\

    YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQG\

    EwJVUzeWMBQGA1UEChMNR2VvVVHJ1c3QgSW5jLjEbMBkGA1UAxMSR2VvVHJ1c3Qg\

    R2xvYmFsIENBBIIIBIJANBgkqhkiG9w0BAQEAAOCAQ8AMIIBCgCAQEA2swYYzD9\

    9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpSEHCIJAWC9mOSm9BXilnTjubdq\

    fnGk5sRgprDvgOSJKA+eJdbtg/OtppHmMlCGDUUna2YRpIuT8rxh0PBFPVXLVDv\

    iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHU\

    1XupGc1V3sjs0l44U+Vct4wt/lAjnvxm5sOpDkZALeVAjmRCw7+OC7RHQWa9k0+\

    bw8HHA8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceoW\

    MPRfwCsocWvk+QIDAQABO1MwUTAPBgNVHRMBAf8EBTADQH/MB0GA1UdDgQWBBTA\

    ephojYn7qwVkDBF9qn1luMMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l\

    uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCrilKIn\

    Z57QzxpeR+nBsqTP3UEBABU6bS+5Kb1VSSYSHNwrRZHYqLizz/Tt1kL/6cdjHPTfS\

    tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVS碱6l5PdPcF\

    PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSRW4nOQdtqvmlKXBx4Ot2/UN\

    hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXXxx12E6nV\

    5fEWCRE11azbJHFwLJhWC9kXtNhNhNjUStedejV0NxPNO3CBWaocvmMw="=";

    并在末尾使用反斜杠

    现在已经添加了 START SNTP 函数、但它会在信号处理信号量上一直等待。

    如果我注释这个信标挂起、我得到当前时间作为 当前时间:Thu Jan 1 00:00:00 1970

    和  

    稍后的代码在 TLS 创建时崩溃。

     

    这是我的代码格式

    #include

    #define NTP_HOSTNAME"129.6.15.28"
    #define NTP_PORT "123"
    #define NTP_servers 3.
    #define NTP_SERVERS_SIZE (NTP_SERVERS * sizeof (struct sockaddr_in))

    uint8_t ca[]="MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTALVT\
    MRYwFAYDVQKEw1HZW9UcnVzdCBJbmmMuMRswGQYDVQDExJHZW9UcnVzdCBHBG9i\
    YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQG\
    EwJVUzeWMBQGA1UEChMNR2VvVVHJ1c3QgSW5jLjEbMBkGA1UAxMSR2VvVHJ1c3Qg\
    R2xvYmFsIENBBIIIBIJANBgkqhkiG9w0BAQEAAOCAQ8AMIIBCgCAQEA2swYYzD9\
    9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpSEHCIJAWC9mOSm9BXilnTjubdq\
    fnGk5sRgprDvgOSJKA+eJdbtg/OtppHmMlCGDUUna2YRpIuT8rxh0PBFPVXLVDv\
    iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHU\
    1XupGc1V3sjs0l44U+Vct4wt/lAjnvxm5sOpDkZALeVAjmRCw7+OC7RHQWa9k0+\
    bw8HHA8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceoW\
    MPRfwCsocWvk+QIDAQABO1MwUTAPBgNVHRMBAf8EBTADQH/MB0GA1UdDgQWBBTA\
    ephojYn7qwVkDBF9qn1luMMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l\
    uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCrilKIn\
    Z57QzxpeR+nBsqTP3UEBABU6bS+5Kb1VSSYSHNwrRZHYqLizz/Tt1kL/6cdjHPTfS\
    tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVS碱6l5PdPcF\
    PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSRW4nOQdtqvmlKXBx4Ot2/UN\
    hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXXxx12E6nV\
    5fEWCRE11azbJHFwLJhWC9kXtNhNhNjUStedejV0NxPNO3CBWaocvmMw="=";

    我的最终目标是连接到 google firebase 云。  

    感谢您的任何帮助

    非常感谢

    AV

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

    您可以共享您的代码吗? 我想在我的设置上尝试一下。

    我想了解您的应用为何悬挂在信标上。 此外、我会确保 NTP 地址有效(请使用 pool.ntp.org)。  

    [引用 user="a.v"]

    和  

    稍后的代码在 TLS 创建时崩溃。

    [/报价]

    控制台上是否有任何崩溃消息? 能否检查 ROV (在 CCS 调试模式下、选择 Tools > ROV)? 您是否有足够的堆(在应用程序 cfg 文件中检查 BIOS.heapSize)?

    Vikram

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你(们)好、Vikram
    是的,我可以共享我的代码,我可以建议我可以将其发送给您个人吗?
    非常感谢
    AV
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    首选选项是向我发送一个示例项目、该项目可以重现您的问题。 然后、您可以在此处附加项目。

    另一个选项是通过 e2e 消息直接向我发送消息。

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

    您好、Vikram、

    这是崩溃的屏幕截图。 以及串行输出屏幕

    我将尽快以私人消息的形式发送该代码。

    非常感谢

    AV

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

    看起来您正在达到堆栈溢出。 确保您的任务具有足够的堆栈大小。

    Vikram

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

    Viikram、您好!

    #define TCPHANDLERSTACK 2048

    #define HTTAPSKSTACKSIZE 8192

    我提供了足够的空间、但仍然会发生这种情况。

    我将发送我的代码

    谢谢

    AV

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    woflSSL 所需的堆栈比8K 大得多。 请参阅 https://gets.com 示例。

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

    你(们)好、Vikram

    我已经为 EK-tm4c129exl 获取了 https get 示例、并将其转换为我的板 dk-tm4c129x……除了添加证书之外、代码不会改变。 但我得到的误差如下所示:

    这是代码

    e2e.ti.com/.../httpsget_5F00_EK_5F00_TM4C129EXL_5F00_TI_5F00_TivaTM4C129ENCPDT.rar

    我在代理的后面、所以当我为电路板制作 http 客户端代码时、我添加了代理

    因此、这是连接到网站并进行获取和发布的完美操作

    struct sockaddr_in paddr;
    paddr.sin 系列= AF_iNet;
    paddr.sin 端口= htons (proxy_port);
    paddr.sin_addr.s_addr=inet_addr1 (proxy_IP);
    HTTPCLI_setProxy (struct sockaddr *) paddr);

    struct addrinfo 提示;
    struct addrinfo *Addrs;
    memset (&hinds、0、sizeof (struct addrinfo));
    hines.ai_family = AF_iNet;
    RET = getaddrinfo (HOSTNAME、"0"、&HINTS、&ADDRs);
    如果(RET!= 0)

    //返回(HTTPCli_%HOSTNAME%);

    *((struct sockadr *)&addr)=*(Addrs->ai_addr);
    Addr.sin 端口= htons (host_port);

    是否还需要为 stnp 函数添加代理设置

    请提供指导

    谢谢

    AV

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

    [引用 user="a.v"]

    struct addrinfo 提示;
    struct addrinfo *Addrs;
    memset (&hinds、0、sizeof (struct addrinfo));
    hines.ai_family = AF_iNet;
    RET = getaddrinfo (HOSTNAME、"0"、&HINTS、&ADDRs);
    如果(RET!= 0)

    //返回(HTTPCli_%HOSTNAME%);

    *((struct sockadr *)&addr)=*(Addrs->ai_addr);
    Addr.sin 端口= htons (host_port);

    是否还需要为 stnp 函数添加代理设置

    [/报价]

    我们的 SNTP 模块中没有代理支持、据我所知、基于代理/防火墙的网络中的 NTP 服务器是本地的。 您可能需要与 IT 团队联系以查找本地 NTP 服务器的地址。 使用本地 NTP 服务器应解决此问题。

    Vikram

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

    你(们)好、Vikram

    似乎 IT 团队对 NTP 服务器地址的支持不多。

    但是、作为一项工作、目前有一种方法可以像在 cc3200器件中那样手动设置器件时间:

    例如、在 cc3200中、我们有以下选项:

    slDateTime_t dt;
    DT.SL_TM_DAY = 6;
    DT.SL_TM_mon = 1;
    DT.SL_TM_Yyear = 2017;
    DT.SL_TM_Hour = 12;
    DT.SL_TM_MIN = 34;
    DT.SL_TM_sec = 45;
    SL_DevSet (SL_DEVICE_General_CONFIGURATION、
    SL_DEVICE_General_configuration_date_time、
    sizeof (slDateTim_t)、(unsigned char *)(&dt));

    是否可以为此电路板手动设置器件时间?

    谢谢  

    AV

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您可以使用 seconds_set()函数手动设置时间。 此函数的输入是从 epoch 开始的时间、以秒为单位。 我通常使用以下网站获取 epoch 时间- www.epochconverter.com

    当您尝试通过 SNTP 使用相同的函数时、此函数的标头已包含在代码中。 因此、构建不应成为问题。

    Vikram