TencentCloud / tencentcloud-iot-sdk-embedded-c

SDK for connecting to Tencent Cloud IoT from a device using embedded C.
https://cloud.tencent.com/product/iothub
Other
148 stars 71 forks source link

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

Closed tuy0326 closed 5 years ago

tuy0326 commented 5 years ago

编译没有错误,能正常运行,同样配置直接在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后台时间功能

skyztmeng commented 5 years ago

看日志,返回的错误码为-111,可以参看qcloud_iot_export_error.h头文件,为QCLOUD_ERR_MQTT_REQUEST_TIMEOUT = -111 表示MQTT相关操作请求超时,这个可能和设备的网络环境有关系。 建议修改qcloud_iot_export.h头文件中,下面的两个宏定义为10*1000,试一下

/ MQTT 阻塞调用(包括连接, 订阅, 发布等)的超时时间, 单位:ms 建议5000ms /

define QCLOUD_IOT_MQTT_COMMAND_TIMEOUT (5 * 1000)

/ TLS连接握手超时时间, 单位:ms /

define QCLOUD_IOT_TLS_HANDSHAKE_TIMEOUT (5 * 1000)

tuy0326 commented 5 years ago

感谢

修改了上述两个参数后仍然是同样错误

skyztmeng commented 5 years ago

检查一下网络环境是好的么?

tuy0326 commented 5 years ago

网络环境正常

skyztmeng commented 5 years ago

查了一下后台日志,后台显示这个设备最近一次连接上了平台,时间是10:54,不知道这个是不是ubuntu的连接,按理说,同样的代码,在ubuntu上可以连接,说明逻辑没有问题,还请麻烦检查一下mips平台相关的环境,是否大小端,网络字节序不一样?

tuy0326 commented 5 years ago

10:54的这次是x86 ubuntu平台连接的

tuy0326 commented 5 years ago

不知道编译环境中是否有配置工具链的一些选项,这个编译环境我编译其它具有网络连接的软件是正常的

skyztmeng commented 5 years ago

pc是小端模式,mips是大端模式,有可能和这个相关,SDK中有个REVERSED宏定义,和大小端相关, ./src/mqtt/include/mqtt_client.h:92:#if defined(REVERSED) ./src/mqtt/src/mqtt_client_connect.c:29:#if defined(REVERSED) ./src/mqtt/src/mqtt_client_connect.c:55:#if defined(REVERSED) 麻烦在编译选项中定义下,这个宏定义,看一下能否连接上

tuy0326 commented 5 years ago

嗯,确实是这个问题,非常感谢