Coder Social home page Coder Social logo

tencentcloud / tencentcloud-iot-sdk-embedded-c Goto Github PK

View Code? Open in Web Editor NEW
148.0 56.0 71.0 8.84 MB

SDK for connecting to Tencent Cloud IoT from a device using embedded C.

Home Page: https://cloud.tencent.com/product/iothub

License: Other

Makefile 0.56% C 98.11% Shell 0.15% CMake 0.58% Python 0.59%
mqtt coap tls sdk topic linux

tencentcloud-iot-sdk-embedded-c's Issues

ESP8266 Qcloud 移植MQTT完成,但是有其他疑问.

https://github.com/nickfox-taterli/esp8266_qcloud

MQTT例子完全OK,稳定,跑了2天了.但是shadow'例子各种出问题.

日志如下:

INF|1970-01-01 00:00:21|main.c|mqtt_loop(383): Wait for Shadow Get Result
INF|1970-01-01 00:00:22|main.c|mqtt_loop(383): Wait for Shadow Get Result
INF|1970-01-01 00:00:24|main.c|mqtt_loop(383): Wait for Shadow Get Result
INF|1970-01-01 00:00:24|main.c|on_temperature_actuate_callback(178): actuate callback jsonString={"temperatureDesire":10}|dataLen=24
INF|1970-01-01 00:00:24|main.c|on_temperature_actuate_callback(181): modify desire temperature to:
INF|1970-01-01 00:00:25|main.c|mqtt_loop(383): Wait for Shadow Get Result
INF|1970-01-01 00:00:26|main.c|mqtt_loop(383): Wait for Shadow Get Result
INF|1970-01-01 00:00:27|main.c|mqtt_loop(383): Wait for Shadow Get Result
INF|1970-01-01 00:00:28|main.c|mqtt_loop(383): Wait for Shadow Get Result
INF|1970-01-01 00:00:30|main.c|mqtt_loop(383): Wait for Shadow Get Result
INF|1970-01-01 00:00:31|main.c|mqtt_loop(383): Wait for Shadow Get Result
INF|1970-01-01 00:00:32|main.c|mqtt_loop(383): Wait for Shadow Get Result
INF|1970-01-01 00:00:33|main.c|mqtt_loop(383): Wait for Shadow Get Result
INF|1970-01-01 00:00:34|main.c|mqtt_loop(383): Wait for Shadow Get Result
INF|1970-01-01 00:00:36|main.c|mqtt_loop(383): Wait for Shadow Get Result
INF|1970-01-01 00:00:36|main.c|on_request_handler(115): Method=GET|Ack=ACK_TIMEOUT
INF|1970-01-01 00:00:36|main.c|on_request_handler(116): received jsonString={"payload":{"metadata":{"temperatureDesire":{"timestamp":1554183524446}},"state":{"temperatureDesire":10},"timestamp":1554183524446,"version":39},"timestamp":1554183524446,"typ
INF|1970-01-01 00:00:37|main.c|mqtt_loop(383): Wait for Shadow Get Result
INF|1970-01-01 00:00:38|main.c|mqtt_loop(383): Wait for Shadow Get Result
INF|1970-01-01 00:00:39|main.c|mqtt_loop(383): Wait for Shadow Get Result

MQTT 连接失败

按readme 配置后运行报错

非对称加密

DBG|2018-04-08 13:39:14|HAL_TLS_mbedtls.c|HAL_TLS_Connect(203):  Connecting to /iotcloud-mqtt.gz.tencentdevices.com/8883...  
DBG|2018-04-08 13:39:20|HAL_TLS_mbedtls.c|HAL_TLS_Connect(208):  Setting up the SSL/TLS structure... 
DBG|2018-04-08 13:39:20|HAL_TLS_mbedtls.c|HAL_TLS_Connect(250): Performing the SSL/TLS handshake...  
ERR|2018-04-08 13:39:20|mqtt_client.c|IOT_MQTT_Construct(90): mqtt connect with id: EmHEy failed: -111  
ERR|2018-04-08 13:39:20|mqtt_sample.c|main(256): Cloud Device Construct Failed

请问错误码在哪查询?

对称加密

DBG|2018-04-08 14:21:20|mqtt_client.c|qcloud_iot_mqtt_init(178): device_name: switch01
DBG|2018-04-08 14:21:20|mqtt_client.c|qcloud_iot_mqtt_init(251): cert file: k1CIyegaDZBDGbU9mbiQyw==
段错误 (核心已转储)

简单提几个bug

bug1

src/utils/farra/utils_httpc.c中368行

    *p_read_len = 0;
    rc = client->network_stack.read(&client->network_stack, (unsigned char *)buf, max_len, (uint32_t)left_ms(&timer), (size_t *)p_read_len);

在64位系统中size_t和int长度可能不一样,这样强转会导致p_read_len指向地址附近的内存会被异常覆盖。

bug2

src/mqtt/src/mqtt_client_connect.c中187行

    if ((flags & MQTT_CONNECT_FLAG_USERNAME) && options->username != NULL) {
        mqtt_write_utf8_string(&ptr, options->username);
        HAL_Free(options->username);
    }

    if ((flags & MQTT_CONNECT_FLAG_PASSWORD) && options->password != NULL) {
    	mqtt_write_utf8_string(&ptr, options->password);
    	HAL_Free(options->password);
    }

HAL_Free后建议将指针置为NULL,否则mqtt重连的时候程序会挂掉

at_client.c 多线程模式存在宕机问题

https://github.com/tencentyun/qcloud-iot-sdk-embedded-c/blob/5381d0efd99efe96337c29ecbdf64c3e40a1cb59/sdk_src/network/at_socket/at_client.c#L840-L851

https://github.com/tencentyun/qcloud-iot-sdk-embedded-c/blob/5381d0efd99efe96337c29ecbdf64c3e40a1cb59/platform/os/freertos/HAL_OS_freertos.c#L165-L193

at_client.c 840行创建线程的handle是局部变量,在HAL_OS_freertos.c 中 创建完线程回调_HAL_thread_func_wrapper_ 传入的参数是线程的handle,创建线程函数已经退出,handle里内容已经被释放,_HAL_thread_func_wrapper_的params->thread_func 函数指针会变为0或者野指针,导致系统宕机。

just一些单词可能拼写错误

萌新在vs code上发现一个插件Code Spell Checker,很好用,于是忍不住检索了一下你们的两万行代码,挑出一些可能拼写错误的单词:

SUBCRIBE
UNSUBCRIBE
unsubcribed
writter
paload
desried
propertys
Shdaow
DEIRECT
recgonized
unrecogonized
NORMANL

FEATURE_AT_OS_USED 关闭 编译出错

MCU+通用TCP_AT模组移植(nonOS) 按照 所给文档配置CMakeLists.txt 编译报错
image

查看代码发现resp_sem 被 FEATURE_AT_OS_USED 注释掉了
image

PATH_MAX在Linux下编译出现重定义

环境:
$ gcc --version
gcc (GCC) 10.2.0
Copyright (c) 2020 Free Software Foundation, Inc.

$ cat /proc/version
CYGWIN_NT-10.0-17763 version 3.2.0-340.x86_64 (corinna@calimero) (gcc version 9.3.0 20200312 (Fedora Cygwin 9.3.0-1) (GCC) ) 2021-03-29 08:42 UTC

建议修改如下
#ifdef PATH_MAX
#undef PATH_MAX
#endif

使用SSL认证失败,直接使用的是mqtt_sample,同样的证书用MQTT.fx测试没有问题

INF|2020-06-11 16:18:02|qcloud_iot_device.c|iot_device_info_set(50): SDK_Ver: 3.2.0, Product_ID: PRODUCT_ID, Device_Name: YOUR_DEV_NAME
DBG|2020-06-11 16:18:02|mqtt_client.c|qcloud_iot_mqtt_init(426): cert file: /home/xx/work/qcloud-iot-sdk-embedded-c/output/release/bin/certs/client.pem
DBG|2020-06-11 16:18:02|mqtt_client.c|qcloud_iot_mqtt_init(427): key file: /home/xx/work/qcloud-iot-sdk-embedded-c/output/release/bin/certs/client.key
DBG|2020-06-11 16:18:02|HAL_TLS_mbedtls.c|HAL_TLS_Connect(212): Setting up the SSL/TLS structure...
DBG|2020-06-11 16:18:02|HAL_TLS_mbedtls.c|HAL_TLS_Connect(256): Performing the SSL/TLS handshake...
DBG|2020-06-11 16:18:02|HAL_TLS_mbedtls.c|HAL_TLS_Connect(257): Connecting to /10.1.8.142/8883...
INF|2020-06-11 16:18:02|HAL_TLS_mbedtls.c|_dtls_debug(199): [mbedTLS]:[/home/xx/work/qcloud-iot-sdk-embedded-c/external_libs/mbedtls/library/ssl_tls.c]:[4454]: x509_verify_cert() returned 4 (-0xfffffffc)

ERR|2020-06-11 16:18:02|HAL_TLS_mbedtls.c|HAL_TLS_Connect(264): mbedtls_ssl_handshake failed returned 0x0004
DBG|2020-06-11 16:18:02|HAL_TLS_mbedtls.c|HAL_TLS_Disconnect(291): handle is NULL
ERR|2020-06-11 16:18:02|mqtt_client.c|IOT_MQTT_Construct(108): mqtt connect with id: failed: -1001
INF|2020-06-11 16:18:02|mqtt_client.c|qcloud_iot_mqtt_fini(532): release mqtt client resources
ERR|2020-06-11 16:18:02|mqtt_sample.c|main(309): MQTT Construct failed!

设备启动后第二次执行IOT_MQTT_Construct会导致qcloud_get_log_level返回错误

设备启动后,执行一次IOT_MQTT_Construct和IOT_MQTT_Destroy后,再次执行IOT_MQTT_Construct会导致qcloud_get_log_level返回错误,定位时发现IOT_MQTT_Destroy动作未将sg_log_sub_ok复位,希望SDK开发人员帮忙确认是否有必要在Destroy Client后加一个复位动作,如果有必要,希望排查一下这种情况的其他全局变量(如:sg_client_token、sg_devinfo_initialized等)。

samples/mqtt/multi_thread_mqtt_sample.c, multi_client_shadow_sample.c, ota_mqtt_sample.c存在内存DF和UAF问题。

samples/mqtt/multi_thread_mqtt_sample.c,ota_mqtt_sample.c存在内存UAF (memory Use-After-Free) 安全问题(即使用了一个已经释放的内存)。
multi_client_shadow_sample.c, ota_mqtt_sample.c存在DF(memory Double Free)安全问题(即对内存进行双重释放)。

  1. samples/mqtt/multi_thread_mqtt_sample.c
    https://github.com/tencentyun/qcloud-iot-sdk-embedded-c/blob/master/samples/mqtt/multi_thread_mqtt_sample.c
    UAF问题:在第201行已经释放了action_value内存,然而在202行又调用了action_value内存,此时释放后的action_value内存值是不确定的,会出现非预期行为。
static void _mqtt_message_handler(void *pClient, MQTTMessage *message, void *userData)
{
    if (message == NULL) {
        return;
    }

    if (MAX_SIZE_OF_TOPIC_CONTENT >= message->payload_len) {
        ...
        if (action_value != NULL) {
            temp = strstr(action_value, "-");
            if (NULL != temp) {
                tempRow = atoi(temp + 1);
                HAL_Free(action_value);
            } else {
                HAL_Free(action_value);      //!!! action_value memory is released
                Log_e("invalid action value: %s", action_value);    //!!! Use of memory action_value  after it is freed
                sg_rx_unexpected_count++;
                return;
            }
        } else {
            ...
        }

        ...
    } else {
        sg_rx_msg_buf_too_big_count++;
    }
}

  1. samples/multi_client/multi_client_shadow_sample.c
    https://github.com/tencentyun/qcloud-iot-sdk-embedded-c/blob/master/samples/multi_client/multi_client_shadow_sample.c
    DF问题:在180行已经通过IOT_Shadow_Destroy释放了shadow_client内存,但在226行再次通过IOT_Shadow_Destroy释放shadow_client内存,造成Memory Double Free安全问题。
static void _shadow_client_thread_runner(void *ptr)
{
    int   rc            = QCLOUD_ERR_FAILURE;
    void *shadow_client = NULL;
...
    shadow_client = IOT_Shadow_Construct(&init_params);
    if (shadow_client == NULL) {
        Log_e("shadow client constructed failed.");
        goto thread_exit;
    }

    // register delta property
    shadow_property.key  = thread_data->property_key;
    shadow_property.data = &current_update_count;
    shadow_property.type = JINT32;
    rc                   = IOT_Shadow_Register_Property(shadow_client, &shadow_property, OnDeltaCallback);
    if (rc != QCLOUD_RET_SUCCESS) {
        rc = IOT_Shadow_Destroy(shadow_client);    //!!! shadow_client memory was freed via IOT_Shadow_Destroy
        Log_e("register device shadow property failed, err: %d", rc);
        goto thread_exit;
    }
...
thread_exit:

    if (shadow_client != NULL) {
        IOT_Shadow_Destroy(shadow_client);    //!!! shadow_client memory was freed via IOT_Shadow_Destroy again since it was freed before.
        shadow_client = NULL;
    }

    sg_thread_status[thread_id] = 1;
}
  1. samples/ota/ota_mqtt_sample.c
    https://github.com/tencentyun/qcloud-iot-sdk-embedded-c/blob/master/samples/ota/ota_mqtt_sample.c
    UAF问题:在第285行已经释放了version内存,但在第289行又再次调用version,此时释放后的version内存值是不确定的,会出现非预期行为,造成UAF问题。
    DF问题:在第285行已经释放了version内存,但在第290行又再次释放version,造成double free安全问题。
static int _get_local_fw_info(char *file_name, char *local_version)
{
    ...

    char *version = LITE_json_value_of(KEY_VER, json_doc);
    char *size    = LITE_json_value_of(KEY_SIZE, json_doc);

    if ((NULL == version) || (NULL == size)) {
        if (version)
            HAL_Free(version);
        if (size)
            HAL_Free(size);
        fclose(fp);
        return 0;
    }

    int local_size = atoi(size);
    HAL_Free(size);

    if (local_size <= 0) {
        Log_w("local info offset invalid: %d", local_size);
        HAL_Free(version);    //!!! version memory is released
        local_size = 0;
    }

    strncpy(local_version, version, FW_VERSION_MAX_LEN);    //!!! Use of memory version after it is freed
    HAL_Free(version);    //!!! Double Free issues.
    fclose(fp);
    return local_size;
}

是否可以返回特定的错误码呢?

https://github.com/tencentyun/qcloud-iot-sdk-embedded-c/blob/75b9f02a0f4d7cd3490f878472ae4695639a0c45/src/mqtt/src/mqtt_client_common.c#L1037

当sub返回正数(paket-id),消息回调挂接handles满了之后,希望返回特定错误码用于标识该特定的错误原因。eg:某场景下,设备主程序Yield循环期间,无法感知该错误类型,sub返回正数paket-id后,Yield不会触发sub handle回调函数,而仅仅返回-1001失败,设备开发人员无法知道是否该将该sub的主题放入自己的订阅list表中。

MQTT连接失败

Halo,大神们

我在我的模组上面自己加入网络,然后使用light_data_template_sample.c作为demo进行测试。发现报如下错误:
mqtt connect with id: failed: -1001
image
image

移植到mips平台出现问题,请帮忙看看日志,给点提示

编译没有错误,能正常运行,同样配置直接在ubuntu下编译后能正常连接到服务器

root@KtGw:/tmp/release/bin# ./mqtt_sample
INF|2018-09-14 05:26:35|device.c|iot_device_info_init(37): device info init success!
INF|2018-09-14 05:26:35|device.c|iot_device_info_set(42): start to set device info!
INF|2018-09-14 05:26:35|device.c|iot_device_info_set(66): device info set successfully!
FUNC_ENTRY: qcloud_iot_mqtt_init L#180
DBG|2018-09-14 05:26:35|mqtt_client.c|qcloud_iot_mqtt_init(185): product_id: YEHOII6XCA
DBG|2018-09-14 05:26:35|mqtt_client.c|qcloud_iot_mqtt_init(186): device_name: VDEV0914
DBG|2018-09-14 05:26:35|mqtt_client.c|qcloud_iot_mqtt_init(259): cert file: /tmp/release/bin/certs/VDEV0914_cert.crt
DBG|2018-09-14 05:26:35|mqtt_client.c|qcloud_iot_mqtt_init(260): key file: /tmp/release/bin/certs/VDEV0914_private.key
FUNC_EXIT: qcloud_iot_mqtt_init L#303 Return Code : 0
FUNC_ENTRY: qcloud_iot_mqtt_connect L#389
FUNC_ENTRY: get_client_conn_state L#1308
FUNC_EXIT: get_client_conn_state L#1313 Return Code : 0
FUNC_ENTRY: _mqtt_connect L#325
DBG|2018-09-14 05:26:35|HAL_TLS_mbedtls.c|HAL_TLS_Connect(204): Connecting to /YEHOII6XCA.iotcloud.tencentdevices.com/8883...
DBG|2018-09-14 05:26:35|HAL_TLS_mbedtls.c|HAL_TLS_Connect(209): Setting up the SSL/TLS structure...
DBG|2018-09-14 05:26:35|HAL_TLS_mbedtls.c|HAL_TLS_Connect(251): Performing the SSL/TLS handshake...
FUNC_ENTRY: _serialize_connect_packet L#134
FUNC_ENTRY: mqtt_write_packet_rem_len L#96
FUNC_EXIT: mqtt_write_packet_rem_len L#111 Return Code : 1
FUNC_EXIT: _serialize_connect_packet L#235 Return Code : 0
FUNC_ENTRY: send_mqtt_packet L#511
FUNC_EXIT: send_mqtt_packet L#535 Return Code : 0
FUNC_ENTRY: wait_for_read L#1277
FUNC_ENTRY: cycle_for_read L#1222
FUNC_ENTRY: _read_mqtt_packet L#599
FUNC_EXIT: _read_mqtt_packet L#613 Return Code : -109
FUNC_EXIT: cycle_for_read L#1232 Return Code : 0
FUNC_EXIT: wait_for_read L#1298 Return Code : -111
FUNC_EXIT: _mqtt_connect L#364 Return Code : -111
FUNC_EXIT: qcloud_iot_mqtt_connect L#406 Return Code : -111
ERR|2018-09-14 05:26:40|mqtt_client.c|IOT_MQTT_Construct(102): mqtt connect with id: qU9fl failed: -111
ERR|2018-09-14 05:26:40|mqtt_sample.c|main(245): Cloud Device Construct Failed

其中make.settings如下配置
BUILD_TYPE = debug #release/debug

#PLATFORM_CC = gcc
#PLATFORM_AR = ar
PLATFORM_OS = linux
PLATFORM_SSL = mbedtls

Uncomment below and specify PATH to your toolchain when cross-compile SDK

PLATFORM_CC = /home/shock/openwrt/packages/toolchain/mipsel-linux-gcc

PLATFORM_AR = /home/shock/openwrt/packages/toolchain/mipsel-linux-ar

PLATFORM_CC = armcc

PLATFORM_AR = armar

PLATFORM_CC = /opt/OpenWrt-Toolchain-ar71xx-for-mips_34kc-gcc-4.8-linaro_uClibc-0.9.33.2/toolchain-mips_34kc_gcc-4.8-linaro_uClibc-0.9.33.2/bin/mips-openwrt-linux-gcc
PLATFORM_AR = /opt/OpenWrt-Toolchain-ar71xx-for-mips_34kc-gcc-4.8-linaro_uClibc-0.9.33.2/toolchain-mips_34kc_gcc-4.8-linaro_uClibc-0.9.33.2/bin/mips-openwrt-linux-ar

#/home/flym/ktgw/OpenWrt-SDK/staging_dir/toolchain-mips_34kc_gcc-4.8-linaro_uClibc-0.9.33.2/bin
#/opt/OpenWrt-Toolchain-ar71xx-for-mips_34kc-gcc-4.8-linaro_uClibc-0.9.33.2/toolchain-mips_34kc_gcc-4.8-linaro_uClibc-0.9.33.2/bin

FEATURE_MQTT_COMM_ENABLED = y # 是否打开MQTT通道的总开关
FEATURE_MQTT_DEVICE_SHADOW = n # 是否打开设备影子的总开关
FEATURE_COAP_COMM_ENABLED = n # 是否打开CoAP通道的总开关
FEATURE_NBIOT_COMM_ENABLED = n # 是否打开NBIoT通道的消息组装

FEATURE_OTA_COMM_ENABLED = n # 是否打开OTA固件升级总开关
FEATURE_OTA_SIGNAL_CHANNEL = MQTT # OTA信令通道类型:MQTT/COAP

FEATURE_AUTH_MODE = CERT # MQTT/CoAP接入认证方式,使用证书认证:CERT;使用密钥认证:KEY
FEATURE_AUTH_WITH_NOTLS = n # 接入认证是否不使用TLS,证书方式必须选择使用TLS,密钥认证可选择不使用TLS

FEATURE_SYSTEM_COMM_ENABLED = y # 是否打开获取iot后台时间功能

连接成功后会立马出现这种错误,network read failed, rc: -708. MQTT Disconnect.

[zcprotocol_best-t:2023-07-25T14:54:57.559] Info [QCloudThread(4121592944)][mqttcommapi.c log_handler 478]: ERR|2023-07-25 14:54:57|HAL_TLS_mbedtls.c|HAL_TLS_Read(378): cloud_iot_network_tls_read failed: 0x0000

[zcprotocol_best-t:2023-07-25T14:54:57.559] Info [QCloudThread(4121592944)][mqttcommapi.c log_handler 478]: ERR|2023-07-25 14:54:57|mqtt_client_yield.c|qcloud_iot_mqtt_yield(246): network read failed, rc: -708. MQTT Disconnect.

[zcprotocol_best-t:2023-07-25T14:54:57.560] Info [QCloudThread(4121592944)][mqttcommapi.c log_handler 478]: ERR|2023-07-25 14:54:57|mqtt_client_yield.c|_handle_disconnect(68): disconnect MQTT for some reasons..

[zcprotocol_best-t:2023-07-25T14:54:57.560] Info [QCloudThread(4121592944)][mqttcommapi.c event_handler 495]: MQTT disconnect.
[zcprotocol_best-t:2023-07-25T14:54:57.560] Warning [QCloudThread(4121592944)][mqttcommapi.c ReadChannelThread 878]: It will attempting reconnect: -105
[zcprotocol_best-t:2023-07-25T14:54:58.564] Warning [QCloudThread(4121592944)][mqttcommapi.c ReadChannelThread 774]: into disconnect status, 0,1
[zcprotocol_best-t:2023-07-25T14:54:58.566] Info [QCloudThread(4121592944)][mqttcommapi.c log_handler 478]: ERR|2023-07-25 14:54:58|device.c|iot_device_info_init(30): device info has been initialized.

FUNC: qcloud_iot_mqtt_init L#259 server iotcloud-mqtt.gz.tencentdevices.com:8883
[zcprotocol_best-t:2023-07-25T14:54:58.712] Info [QCloudThread(4121592944)][mqttcommapi.c log_handler 478]: ERR|2023-07-25 14:54:58|mqtt_client.c|IOT_MQTT_Construct(111): mqtt connect with id: dDm1s failed: -117

linux ubuntu18.04编译不过

[ 55%] Building C object sdk_src/CMakeFiles/iot_sdk.dir/network/socket/network_socket.c.o
[ 56%] Building C object sdk_src/CMakeFiles/iot_sdk.dir/network/network_interface.c.o
[ 57%] Linking C static library ../../output/release/lib/libiot_sdk.a
[ 57%] Built target iot_sdk
Scanning dependencies of target iot_platform
[ 59%] Building C object platform/CMakeFiles/iot_platform.dir/os/linux/HAL_Device_linux.c.o
[ 60%] Building C object platform/CMakeFiles/iot_platform.dir/os/linux/HAL_File_linux.c.o
[ 61%] Building C object platform/CMakeFiles/iot_platform.dir/os/linux/HAL_Log_linux.c.o
[ 62%] Building C object platform/CMakeFiles/iot_platform.dir/os/linux/HAL_OS_linux.c.o
[ 63%] Building C object platform/CMakeFiles/iot_platform.dir/os/linux/HAL_TCP_linux.c.o
[ 64%] Building C object platform/CMakeFiles/iot_platform.dir/os/linux/HAL_Timer_linux.c.o
In file included from /home/xie/mywork/cj/tencentcloud-iot-explorer-sdk-embedded-c-3.2.2/platform/os/linux/HAL_Timer_linux.c:26:0:
/home/xie/mywork/cj/tencentcloud-iot-explorer-sdk-embedded-c-3.2.2/platform/os/linux/HAL_Timer_linux.c: In function 'HAL_Timer_expired':
/home/xie/mywork/cj/tencentcloud-iot-explorer-sdk-embedded-c-3.2.2/platform/os/linux/HAL_Timer_linux.c:35:5: error: request for member 'tv_sec' in something not a structure or union
     timersub(&timer->end_time, &now, &res);
     ^
/home/xie/mywork/cj/tencentcloud-iot-explorer-sdk-embedded-c-3.2.2/platform/os/linux/HAL_Timer_linux.c:35:5: error: request for member 'tv_usec' in something not a structure or union
     timersub(&timer->end_time, &now, &res);
     ^
/home/xie/mywork/cj/tencentcloud-iot-explorer-sdk-embedded-c-3.2.2/platform/os/linux/HAL_Timer_linux.c: In function 'HAL_Timer_countdown_ms':
/home/xie/mywork/cj/tencentcloud-iot-explorer-sdk-embedded-c-3.2.2/platform/os/linux/HAL_Timer_linux.c:44:5: error: request for member 'tv_sec' in something not a structure or union
     timeradd(&now, &interval, &timer->end_time);
     ^
/home/xie/mywork/cj/tencentcloud-iot-explorer-sdk-embedded-c-3.2.2/platform/os/linux/HAL_Timer_linux.c:44:5: error: request for member 'tv_usec' in something not a structure or union
     timeradd(&now, &interval, &timer->end_time);
     ^
/home/xie/mywork/cj/tencentcloud-iot-explorer-sdk-embedded-c-3.2.2/platform/os/linux/HAL_Timer_linux.c:44:5: error: request for member 'tv_usec' in something not a structure or union
     timeradd(&now, &interval, &timer->end_time);
     ^
/home/xie/mywork/cj/tencentcloud-iot-explorer-sdk-embedded-c-3.2.2/platform/os/linux/HAL_Timer_linux.c:44:5: error: request for member 'tv_sec' in something not a structure or union
     timeradd(&now, &interval, &timer->end_time);

cmake选项通过命令行指定

现在的方式是直接在 CMastLists.txtset(BUILD_TYPE "release"),如果我想写一个脚本编译,无法通过命令行重新设置变量,除非直接修改 CMastLists.txt 中变量的值,是否考虑使用缓存变量?

linux编译失败失败。

qcloud-iot-sdk-embedded-c$ ./cmake_build.sh
Build all (SDK libs and samples)
-- The C compiler identification is GNU 11.2.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/john/qcloud-iot-sdk-embedded-c/build
[ 1%] Building C object sdk_src/CMakeFiles/iot_sdk.dir/utils/json_parser.c.o
..........
[ 80%] Building C object external_libs/mbedtls/CMakeFiles/mbedtls.dir/library/ss l_tls.c.o
/home/john/qcloud-iot-sdk-embedded-c/external_libs/mbedtls/librar y/ssl_tls.c:1012:67: error: argument 2 of type ‘unsigned char[36]’ with mismatch ed bound [-Werror=array-parameter=]
1012 | ssl_calc_verify_tls( mbedtls_ssl_context *ssl, unsigned char hash[36] )
| ~~~~~~~~~~~~~~^~~~~~~~

/home/john/qcloud-iot-sdk-embedded-c/external_libs/mbedtls/librar y/ssl_tls.c:466:57: note: previously declared as ‘unsigned char *’
466 | static void ssl_calc_verify_tls( mbedtls_ssl_context *, unsigned char * );
| ^~~~~~~~~~~~~~~
/home/john/qcloud-iot-sdk-embedded-c/external_libs/mbedtls/librar y/ssl_tls.c:1040:74: error: argument 2 of type ‘unsigned char[32]’ with mismatch ed bound [-Werror=array-parameter=]
1040 | c_verify_tls_sha256( mbedtls_ssl_context *ssl, unsigned char hash[32] )
| ~~~~~~~~~~~~~~^~~~~~~~

/home/john/qcloud-iot-sdk-embedded-c/external_libs/mbedtls/librar y/ssl_tls.c:473:63: note: previously declared as ‘unsigned char *’
473 | atic void ssl_calc_verify_tls_sha256( mbedtls_ssl_context *,unsigned cha r * );
| ^~~~~~~~~~~~ ~~~

/home/john/qcloud-iot-sdk-embedded-c/external_libs/mbedtls/librar y/ssl_tls.c:1061:74: error: argument 2 of type ‘unsigned char[48]’ with mismatch ed bound [-Werror=array-parameter=]
1061 | c_verify_tls_sha384( mbedtls_ssl_context *ssl, unsigned char hash[48] )
| ~~~~~~~~~~~~~~^~~~~~~~

/home/john/qcloud-iot-sdk-embedded-c/external_libs/mbedtls/librar y/ssl_tls.c:479:64: note: previously declared as ‘unsigned char *’
479 | tic void ssl_calc_verify_tls_sha384( mbedtls_ssl_context *, unsigned cha r * );
| ^~~~~~~~~~~~ ~~~

/home/john/qcloud-iot-sdk-embedded-c/external_libs/mbedtls/librar y/ssl_tls.c: In function ‘ssl_calc_finished_tls_sha384’:
/home/john/qcloud-iot-sdk-embedded-c/external_libs/mbedtls/librar y/ssl_tls.c:4924:5: error: ‘mbedtls_sha512_finish’ accessing 64 bytes in a regio n of size 48 [-Werror=stringop-overflow=]
4924 | mbedtls_sha512_finish( &sha512, padbuf );
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/john/qcloud-iot-sdk-embedded-c/external_libs/mbedtls/librar y/ssl_tls.c:4924:5: note: referencing argument 2 of type ‘unsigned char *’
In file included from /home/john/qcloud-iot-sdk-embedded-c/extern al_libs/mbedtls/include/mbedtls/ssl_internal.h:41,
from /home/john/qcloud-iot-sdk-embedded-c/extern al_libs/mbedtls/library/ssl_tls.c:48:
/home/john/qcloud-iot-sdk-embedded-c/external_libs/mbedtls/includ e/mbedtls/sha512.h:102:6: note: in a call to function ‘mbedtls_sha512_finish’
102 | void mbedtls_sha512_finish( mbedtls_sha512_context *ctx, unsigned char o utput[64] );
| ^~~~~~~~~~~~~~~~~~~~~
/home/john/qcloud-iot-sdk-embedded-c/external_libs/mbedtls/librar y/ssl_tls.c: In function ‘ssl_calc_verify_tls_sha384’:
/home/john/qcloud-iot-sdk-embedded-c/external_libs/mbedtls/librar y/ssl_tls.c:1070:5: error: ‘mbedtls_sha512_finish’ accessing 64 bytes in a regio n of size 48 [-Werror=stringop-overflow=]
1070 | mbedtls_sha512_finish( &sha512, hash );
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/john/qcloud-iot-sdk-embedded-c/external_libs/mbedtls/librar y/ssl_tls.c:1070:5: note: referencing argument 2 of type ‘unsigned char *’
In file included from /home/john/qcloud-iot-sdk-embedded-c/extern al_libs/mbedtls/include/mbedtls/ssl_internal.h:41,
from /home/john/qcloud-iot-sdk-embedded-c/extern al_libs/mbedtls/library/ssl_tls.c:48:
/home/john/qcloud-iot-sdk-embedded-c/external_libs/mbedtls/includ e/mbedtls/sha512.h:102:6: note: in a call to function ‘mbedtls_sha512_finish’
102 | void mbedtls_sha512_finish( mbedtls_sha512_context *ctx, unsigned char o utput[64] );
| ^~~~~~~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors
make[2]: *** [external_libs/mbedtls/CMakeFiles/mbedtls.dir/build.make:188:exter nal_libs/mbedtls/CMakeFiles/mbedtls.dir/library/ssl_tls.c.o] 错误 1
make[1]: *** [CMakeFiles/Makefile2:289:external_libs/mbedtls/CMakeFiles/mbedtls .dir/all] 错误 2
make: *** [Makefile:91:all] 错误 2

移植到嵌入式平台,有相关介绍吗?

文档里面只是介绍了SDK的代码结构,但是对于移植的具体操作没有说明啊,有没有具体的操作实例?
怎么设置编译参数,怎么选择编译平台等等。

ESP8266平台无法连接到服务器

乐鑫SDK版本是v3.3(b74255d)

以下是调试信息:
INF|1970-01-01 00:00:06|qcloud_iot_device.c|iot_device_info_set(65): SDK_Ver: 3.1.3, Product_ID: R0UVGK0FR9, Device_Name: DEV000000000001
ERR|1970-01-01 00:00:06|HAL_TLS_mbedtls.c|HAL_TLS_Connect(256): mbedtls_ssl_handshake failed returned 0x7780(�s)
ERR|1970-01-01 00:00:06|mqtt_client.c|IOT_MQTT_Construct(121): mqtt connect with id: failed: -1001
INF|1970-01-01 00:00:06|mqtt_client.c|qcloud_iot_mqtt_fini(442): release mqtt client resources

SDK支持多个子设备上线

目前的GatewayParam结构体中只支持单个子设备名称,请提供多个子设备上线的接口。
如修改GatewayParam中char *subdev_device_name为char *subdev_device_name[],并在内部实现中新增相关代码。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.