更新时间:2025-08-13 GMT+08:00

OS系统选择与适配

Tiny中提供了LiteOS、NovaOS、linux、ucos_ii、macOS、FreeRTOS等多操作系统的适配,您也可以根据需要去适配自己的操作系统。

os 适配

IoT Device SDK Tiny本身是不局限于某一款具体的物联网操作系统的,但是其运行是依赖于操作系统的,因此需要进行OS的相关适配。用户可以根据模组、MCU厂商的需求使用其内置OS,适配IoT Device SDK Tiny实现对接华为云等进行一系列的云服务的使用。目前IoT Device SDK Tiny已经适配了多款OS,包括LiteOS、FreeRTOS、MacOS、Linux、NovaOS、ucos_ii等。

IoT Device SDK Tiny提供了osal(操作系统抽象层),实现了操作系统与SDK组件的隔离。因此厂商可以直接将想要使用的操作系统注册到osal中,即可实现对SDK组件的使用。其中包括与操作系统内核强相关的任务操作、信号量、互斥锁、内存管理接口等内容。在适配过程中可以参考已经适配好的操作系统imp文件。由于本SDK的队列queue采用互斥锁和信号量加以实现,因此无需对队列进行适配。最终调用顺序如下 osal_init() ---> os_imp_init() ---> osal_install(),其中os_imp_init是弱符号函数,需要用户根据自身需要进行实现,在其中调用osal_install()函数实现系统服务的注册。

TCP/IP 适配

对于IoT Device SDK Tiny而言,其网络协议栈决定于底层操作系统,在使用三方操作系统时,可以将相关的网络传输接口进行抽象,提供相关的协议栈接口即可。IoT Device SDK Tiny中调用的所有网络传输的接口,通过注册机制,最终都会调用到用户注册的函数。

IoT Device SDK Tiny也提供了抽象层sal,用户可以调用link_sal_install函数进行TCP/IP功能注册,同时用户必须实现link_tcpip_imp_init函数,该函数是一个弱符号函数。在该SDK初始化的过程中,调用顺序为:link_tcp_ip_init > link_tcpip_imp_init > link_sal_install,在初始化完毕之后,才可以使用TCP/IP相关的功能。详细参考sal_imp.h头文件,同时已经适配了LWIP、ESP8266\L716等软件或者模组提供的TCP/IP功能,如果您有第三方的组件或者模组,可以参考实现。

适配中的细节问题

  • 不同的操作系统对于任务优先级的规定是不同的,因此IoT Device SDK Tiny中用到的创建任务的函数调用中赋予的优先级要进行相应的改变,目前本SDK默认优先级顺序为优先级数在0-31,0为最高优先级,31为最低优先级。
  • 有些编译架构对于虚引用函数的支持以及编译方式可能略有不同,需要根据需求进行自行修改。
  • 对于上述组件,如果本身的SDK中已经具备相应的组件可以根据需求进行适配、裁剪等操作。
  • 编译架构的不同,可以保留源文件以及库文件,根据自己的需求进行移植适配以及使能,下面仅仅给个iot_config.h文件的参考示例,示例中以对接接口以V5版本接口为例。这里可以重点关注SDK的入口函数link_main.c,其中包含了如何通过宏定义控制哪些文件参与编译。
    //enable cJSON
    #define CONFIG_CJSON_ENABLE 1
    
    //enable LinkLog 
    #define CONFIG_LINKLOG_ENABLE 1
    
    //enable queue
    #define CONFIG_LINKQUEUE_ENABLE 1
    
    //enable DTLS_AL link_main
    #define CONFIG_DTLS_AL_ENABLE 1
    #define CONFIG_MBEDTLS_ENABLE 1
    #define CONFIG_MBEDTLS_PSK 1
    
    
    // enable MQTT link_main
    #define CONFIG_PAHO_MQTT 1
    #define CONFIG_MQTT_AL_ENABLE 1
    
    // enable tcpip
    #define CONFIG_TCPIP_AL_ENABLE 1
    
    //choose paho_mqtt or lite_mqtt
    //#define CONFIG_PAHO_MQTT 1  
    
    
    //paho_mqtt_port.c use them
    #define CONFIG_PAHO_CONNECT_TIMEOUT 10000
    #define CONFIG_PAHO_CMD_TIMEOUT 10000
    #define CONFIG_PAHO_LOOPTIMEOUT 10
    #define CONFIG_PAHO_SNDBUF_SIZE 2048
    #define CONFIG_PAHO_RCVBUF_SIZE 2048
    
    //enable OC_MQTT link_main 
    #define CONFIG_OCMQTT_ENABLE 1
    
    //mqtt the profile function tools and implement component oc_mqtt.mk
    #define CONFIG_OC_TINYMQTTV5_ENABLE 1 
    #define CONFIG_OC_MQTTV5_PROFILE 1
    
    #define CONFIG_IOT_LINK_CONFIGFILE "iot_config.h"