乐鑫技术交流
直播中

南风一号

8年用户 1000经验值
擅长:EMC/EMI设计
私信 关注
[问答]

使用mbedtls连接到aws iot,无法编译代码的原因?

我正在使用 mbedtls 连接到 aws iot,但由于 mbedtls 缺少一些定义,我无法编译代码。

我使用的是 ESP8266_RTOS_SDK 1.5 中的原始 libmbedtls.a,我试图编辑 config.h,但这并不重要,我真的需要 mbedtls 的源代码来使用必要的配置重新编译它。

/root/esp-open-sdk/ESP8266_RTOS_SDK/lib/libmbedtls.a(ssl_tls.o):(.text.mbedtls_ssl_fetch_input 0x4):对“max_content_len”的未定义引用


这是正确的 config.h:

#ifndef MBEDTLS_CONFIG_H
#define MBEDTLS_CONFIG_H

/* 系统支持 */
#define MBEDTLS_HAVE_ASM
#define MBEDTLS_DEPRECATED_WARNING
#define MBEDTLS_ENTROPY_HARDWARE_ALT
#define MBEDTLS_NO_PLATFORM_ENTROPY

/* mbed TLS 功能支持 */
#define MBEDTLS_ECP_DP_SECP256R1_ENABLED
#define MBEDTLS_ECP_DP_SECP384R1_ENABLED
#define MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED
#define MBEDTLS_SSL_PROTO_TLS1_2

/* 调试支持(可选)*/
//
//

/* mbed TLS 模块 */
#define MBEDTLS_AES_C
#define MBEDTLS_ASN1_PARSE_C
#define MBEDTLS_ASN1_WRITE_C
#define MBEDTLS_BIGNUM_C
#define MBEDTLS_CIPHER_C
#define MBEDTLS_CTR_DRBG_C
#define MBEDTLS_ECDH_C
#define MBEDTLS_ECDSA_C
#define MBEDTLS_ECP_C
#define MBEDTLS_ENTROPY_C
#define MBEDTLS_GCM_C
#define MBEDTLS_MD_C
#define MBEDTLS_NET_C
#define MBEDTLS_OID_C
#define MBEDTLS_PK_C
#define MBEDTLS_PK_PARSE_C
#define MBEDTLS_SHA256_C
#define MBEDTLS_SHA512_C
#define MBEDTLS_SSL_CLI_C
#define MBEDTLS_SSL_SRV_C
#define MBEDTLS_SSL_TLS_C
#define MBEDTLS_X509_CRT_PARSE_C
#define MBEDTLS_X509_USE_C

/* 用于验证基于 RSA 的根 CA 证书(如果根 CA 证书是使用 ECC 签名的,则可选)*/
#define MBEDTLS_RSA_C
#define MBEDTLS_SHA1_C
#define MBEDTLS_PKCS1_V15
#define MBEDTLS_PKCS1_V21

/* 对于测试证书 */
#define MBEDTLS_BASE64_C
#define MBEDTLS_CERTS_C
#define MBEDTLS_PEM_PARSE_C

/* 以牺牲 ROM 为代价节省 RAM */
#define MBEDTLS_AES_ROM_TABLES

/* 通过根据我们的确切需求进行调整来节省 RAM */
#define MBEDTLS_ECP_MAX_BITS   384
#define MBEDTLS_MPI_MAX_SIZE   256 // 2048 bits

/* 以牺牲速度为代价节省 RAM,参见 ecp.h */
#define MBEDTLS_ECP_WINDOW_SIZE        2
#define MBEDTLS_ECP_FIXED_POINT_OPtiM  0

/* 以牺牲某些 ROM 为代价的显着速度优势 */
#define MBEDTLS_ECP_NIST_OPTIM

/*
* You should adjust this to the exact number of sources you're using: default
* is the "mbedtls_platform_entropy_poll" source, but you may want to add other ones.
* Minimum is 2 for the entropy test suite.
*/
#define MBEDTLS_ENTROPY_MAX_SOURCES 2

/* 通过指定我们自己的密码套件列表来节省 ROM 和几个字节的 RAM */
#define MBEDTLS_SSL_CIPHERSUITES                        
    MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384

/*
* Save RAM at the expense of interoperability: do this only if you control
* both ends of the connection!  (See coments in "mbedtls/ssl.h".)
* The minimum size here depends on the certificate chain used as well as the
* typical size of records.
*/
#define MBEDTLS_SSL_MAX_CONTENT_LEN             4096

#include "mbedtls/check_config.h"

#endif /* MBEDTLS_CONFIG_H */



有什么想法吗?

回帖(1)

贾熹

2024-7-12 14:23:34
从您提供的信息来看,您在使用 ESP8266_RTOS_SDK 1.5 中的原始 libmbedtls.a 时遇到了编译问题。这个问题可能是由于以下几个原因导致的:

1. **缺少定义**:您提到了 `max_content_len` 的未定义引用。这可能是因为您的配置文件 `config.h` 中没有定义这个宏,或者定义的位置不正确。

2. **配置文件不兼容**:您尝试编辑 `config.h`,但可能没有正确地配置所需的选项。确保您已经根据您的需求启用了所有必要的功能和模块。

3. **库版本不匹配**:您使用的 libmbedtls.a 可能与您的项目或 ESP8266_RTOS_SDK 版本不兼容。尝试更新 libmbedtls 到一个与您的项目兼容的版本。

4. **编译器/链接器问题**:可能是编译器或链接器设置不正确,导致无法正确链接到 libmbedtls.a。

为了解决这个问题,您可以尝试以下步骤:

1. **检查配置文件**:确保您的 `config.h` 文件包含了所有必要的定义,特别是与 AWS IoT 相关的功能。您可以从 mbed TLS 的官方文档或 GitHub 仓库中找到示例配置文件。

2. **获取源代码**:如果您需要重新编译 mbedtls,可以从其 GitHub 仓库(https://github.com/ARMmbed/mbedtls)获取最新的源代码。

3. **重新编译 mbedtls**:使用适当的编译器和设置重新编译 mbedtls。确保在编译过程中启用了所需的功能和模块。

4. **更新 ESP8266_RTOS_SDK**:如果您使用的是较旧的 SDK 版本,尝试更新到较新的版本,以确保与 libmbedtls 的兼容性。

5. **检查编译器/链接器设置**:确保您的编译器和链接器设置正确,以便正确链接到 libmbedtls.a。

6. **寻求帮助**:如果您仍然遇到问题,可以在 mbed TLS 的官方论坛或 GitHub 仓库中寻求帮助,或者在 ESP8266 社区中寻求支持。

希望这些建议能帮助您解决问题。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分