AIoT操作系统开源生态横评:OpenHarmony vs AliOS-Things vs TencentOS-tiny

做物联网设备开发,操作系统选型和芯片选型一样重要。2026年国产AIoT操作系统已经形成了三足鼎立的格局:华为的OpenHarmony、阿里的AliOS-Things、腾讯的TencentOS-tiny。三家大厂各有一套开源IoT操作系统,定位和生态各有侧重。

这篇文章不是参数罗列,是站在工程师视角对比三者在实际项目中的使用体验、踩坑点和适用场景。

三者的定位差异

先说结论:这三者不是同一层面的竞争关系,定位完全不同。

系统定位内核架构最小RAM典型场景
OpenHarmony全场景分布式OS混合内核(LiteOS-A/M+Linux)128KB智能家居生态
AliOS-Things物联网轻量OSRTOS(Rhino)2KBAIoT端云一体
TencentOS-tiny超轻量RTOSRTOS(自主内核)0.75KB资源受限设备

从定位上就能看出差异:OpenHarmony野心最大,想做万物互联的全场景操作系统;AliOS-Things居中,主打端云一体的AIoT设备;TencentOS-tiny最轻,瞄准资源极度受限的MCU。

OpenHarmony:生态最强但学习曲线陡

OpenHarmony从2020年开源以来发展迅速。它的核心优势在于华为的品牌背书和完整的生态布局——从芯片适配到应用开发到设备认证,有完整的工具链。

适合场景:需要跨设备协同的智能家居生态产品。如果你的设备要加入华为鸿蒙生态,OpenHarmony是唯一选择。

// OpenHarmony LiteOS-A 设备开发示例
// 基于Hi3861芯片(WiFi SoC)
#include "cmsis_os2.h"
#include "hi_gpio.h"
#include "hi_uart.h"
#include "ohos_init.h"
#include "wifi_device.h"

// WiFi连接任务
static void WiFiTask(void *arg) {
    // 设置WiFi Station模式
    WifiDeviceConfig config = {0};
    strcpy(config.ssid, WIFI_SSID);
    strcpy(config.preSharedKey, WIFI_PASS);
    config.securityType = WIFI_SEC_TYPE_PSK;
    
    int netId = -1;
    WifiDeviceConfig *actualConfig = &config;
    
    // 启用WiFi
    EnableWifi();
    
    // 添加配置
    AddDeviceConfig(actualConfig, &netId);
    
    // 连接
    ConnectTo(netId);
    
    // 等待获取IP
    while (!IsWifiActive() || 
           GetConnectionInfo(NULL) != WIFI_CONNECTED) {
        osDelay(100);
    }
    
    printf("WiFi连接成功\n");
    
    // 启动业务任务
    osThreadNew(BusinessTask, NULL, NULL);
}

// 设备发现服务
static void DeviceDiscoveryTask(void *arg) {
    // OpenHarmony的分布式软总线设备发现
    // 可以自动发现同一网络中的OpenHarmony设备
    PublishInfo publishInfo = {
        .publishId = 1,
        .mode = DISCOVER_MODE_ACTIVE,
        .medium = COAP,   // 使用CoAP协议发现
        .freq = MID,
        .capability = "iot.device",
        .capabilityData = (unsigned char*)"smart_sensor",
        .dataLen = strlen("smart_sensor")
    };
    
    // 发布设备信息
    PublishService(&publishInfo, &g_publishCallback);
    
    // 订阅其他设备
    SubscribeInfo subscribeInfo = {
        .subscribeId = 1,
        .mode = DISCOVER_MODE_ACTIVE,
        .medium = COAP,
        .freq = MID,
        .isSameAvatar = false,
        .capability = "iot.device",
        .capabilityData = NULL,
        .dataLen = 0
    };
    
    StartDiscovery(&subscribeInfo, &g_discoveryCallback);
    
    while (1) {
        osDelay(1000);
    }
}

// 应用入口
static void MainTask(void *arg) {
    // OpenHarmony的应用入口使用SYS_RUN宏注册
    WiFiTask(arg);
}

SYS_RUN(MainTask);

OpenHarmony的独特能力是分布式软总线——设备间可以自动发现和协同。比如智能音箱检测到有人进门,可以自动通知客厅灯打开。这种跨设备协同是其他两个系统不具备的。

但OpenHarmony的短板也很明显:学习曲线陡峭。它的开发框架(ArkTS/ArkUI)和传统嵌入式C开发完全不同。做底层驱动开发还好,做应用层开发需要学习一套全新的UI框架和编程模型。对于习惯了FreeRTOS+裸C开发的嵌入式工程师来说,上手成本不低。

AliOS-Things:端云一体最顺手

AliOS-Things是阿里开源的轻量级物联网操作系统。它的核心优势是和阿里云生态的无缝对接——设备接入、OTA升级、数据上云,用AliOS-Things比用其他系统省很多事。

适合场景:需要上阿里云的物联网设备,特别是AIoT设备。

// AliOS-Things 设备开发示例
// 基于ESP32平台
#include "aos/kernel.h"
#include "aos/yloop.h"
#include "netmgr.h"
#include "linkkit/infra/infra_types.h"
#include "linkkit/infra/infra_defs.h"
#include "linkkit/infra/infra_compat.h"

// LinkKit设备模型
#define PRODUCT_KEY    "a1XXXXXX"
#define DEVICE_NAME    "sensor_001"
#define DEVICE_SECRET  "your_device_secret"

static int user_connected_event_handler(void) {
    printf("设备已连接到云平台\n");
    
    // 上报设备属性
    char property_payload[256];
    snprintf(property_payload, sizeof(property_payload),
        "{\"id\":\"%d\",\"version\":\"1.0\",\"params\":{"
        "\"Temperature\":%.2f,\"Humidity\":%.2f"
        "},\"method\":\"thing.event.property.post\"}",
        get_msg_id(), read_temperature(), read_humidity());
    
    IOT_Linkkit_Report(0, ITM_MSG_POST_PROPERTY,
        (unsigned char*)property_payload, 
        strlen(property_payload));
    
    return 0;
}

// 云端指令回调
static int user_service_handler(const char *service_id, 
                                 const char *service_name,
                                 const char *request, 
                                 char **response) {
    printf("收到云端指令: %s\n", service_name);
    
    if (strcmp(service_name, "SetTemperature") == 0) {
        // 解析温度设置指令
        cJSON *root = cJSON_Parse(request);
        cJSON *temp = cJSON_GetObjectItem(root, "TargetTemp");
        if (temp) {
            float target = temp->valuedouble;
            set_target_temperature(target);
            printf("设置目标温度: %.1f\n", target);
        }
        cJSON_Delete(root);
        
        // 返回响应
        *response = strdup("{\"code\":0,\"data\":{}}");
    }
    
    return 0;
}

// 传感器数据采集任务
static void sensor_task(void *arg) {
    while (1) {
        float temp = read_temperature();
        float humidity = read_humidity();
        
        // 属性变更时自动上报
        if (fabs(temp - last_temp) > 0.5 || 
            fabs(humidity - last_humidity) > 2.0) {
            char payload[256];
            snprintf(payload, sizeof(payload),
                "{\"id\":\"%d\",\"version\":\"1.0\","
                "\"params\":{\"Temperature\":%.2f,"
                "\"Humidity\":%.2f},"
                "\"method\":\"thing.event.property.post\"}",
                get_msg_id(), temp, humidity);
            
            IOT_Linkkit_Report(0, ITM_MSG_POST_PROPERTY,
                (unsigned char*)payload, strlen(payload));
            
            last_temp = temp;
            last_humidity = humidity;
        }
        
        aos_msleep(5000);  // 每5秒采集一次
    }
}

// 主函数
int application_start(int argc, char *argv[]) {
    // 初始化网络
    netmgr_init();
    netmgr_start(false);
    
    // 注册LinkKit回调
    IOT_RegisterCallback(ITE_CONNECT_SUCC, 
                         user_connected_event_handler);
    IOT_RegisterCallback(ITE_SERVICE_REQUEST, 
                         user_service_handler);
    
    // 启动传感器任务
    aos_task_new("sensor", sensor_task, NULL, 4096);
    
    // 进入事件循环
    aos_loop_run();
    
    return 0;
}

AliOS-Things的端云一体能力是三者中最顺手的。设备注册、数据上报、指令接收都有现成的API,不用自己实现MQTT连接逻辑。如果你的设备就是上阿里云的,用AliOS-Things比用裸ESP-IDF + 自己写MQTT省至少两周开发时间。

短板:和阿里云绑定较深。虽然代码开源,但很多功能依赖阿里云的SDK和服务。要迁移到其他云平台时,改造成本不小。社区活跃度不如OpenHarmony。

TencentOS-tiny:极致轻量

TencentOS-tiny是三个系统中最小的。最小RAM只要0.75KB,可以在STM32F103这种资源极度受限的MCU上运行。

适合场景:资源极度受限的低端MCU,不需要复杂网络协议栈的传感器节点。

// TencentOS-tiny 设备开发示例
// 基于STM32L011(Cortex-M0+, 2KB RAM)
#include "tos_k.h"
#include "tos_kv.h"

// 任务栈
k_task_t sensor_task;
k_stack_t sensor_stack[256];

// 传感器数据结构
typedef struct {
    uint16_t temperature;  // 温度×10
    uint16_t humidity;     // 湿度×10
    uint16_t battery_mv;   // 电池电压mV
} sensor_data_t;

// 传感器采集任务
void sensor_task_entry(void *arg) {
    sensor_data_t data;
    uint32_t report_count = 0;
    
    while (K_TRUE) {
        // 读取传感器
        data.temperature = (uint16_t)(read_temp() * 10);
        data.humidity = (uint16_t)(read_humidity() * 10);
        data.battery_mv = read_battery_voltage();
        
        // 每10次采集上报一次(省电)
        if (++report_count >= 10) {
            report_count = 0;
            
            // 通过LoRa/NB-IoT上报
            // TencentOS-tiny支持LoRaWAN协议栈
            uint8_t payload[6];
            payload[0] = (data.temperature >> 8) & 0xFF;
            payload[1] = data.temperature & 0xFF;
            payload[2] = (data.humidity >> 8) & 0xFF;
            payload[3] = data.humidity & 0xFF;
            payload[4] = (data.battery_mv >> 8) & 0xFF;
            payload[5] = data.battery_mv & 0xFF;
            
            lora_send(payload, sizeof(payload));
        }
        
        // 进入低功耗模式
        // STM32L011的Stop模式功耗约1μA
        tos_sleep_ms(60000);  // 60秒采集一次
    }
}

// 主函数
int main(void) {
    // 硬件初始化
    board_init();
    
    // TencentOS内核初始化
    tos_knl_init();
    
    // 创建传感器任务
    tos_task_create(&sensor_task, "sensor",
                    sensor_task_entry, NULL,
                    3, sensor_stack, sizeof(sensor_stack),
                    0);
    
    // 启动调度器
    tos_knl_start();
    
    return 0;
}

TencentOS-tiny的优势就是小。2KB RAM的MCU上能跑RTOS+任务调度+LoRaWAN协议栈,其他两个系统做不到。如果你的设备是电池供电的低功耗传感器节点,TencentOS-tiny是首选。

短板:生态弱。没有OpenHarmony的分布式能力和AliOS-Things的端云一体能力。网络协议栈需要外挂。文档和社区不如前两者活跃。

横向对比总结

维度OpenHarmonyAliOS-ThingsTencentOS-tiny
最小RAM128KB2KB0.75KB
网络协议栈完整完整需外挂
云平台对接华为云阿里云需自行对接
分布式协同支持不支持不支持
OTA升级支持支持支持
学习曲线陡峭中等平缓
社区活跃度高中低
适用芯片中高端SoC中端MCU/SoC低端MCU

选型建议

项目特征推荐系统理由
智能家居+鸿蒙生态OpenHarmony生态协同能力不可替代
上阿里云+中等资源AliOS-Things端云一体最省事
电池供电+超低资源TencentOS-tiny最轻量,功耗最低
自主可控+不上云FreeRTOS不绑定大厂生态
需要AI推理ESP-IDF+ESP-DLAI能力最成熟

最后一条是我的经验之谈:如果你的项目不需要绑定大厂生态,FreeRTOS+自己选的通信协议栈+自己对接的云平台,可能比任何一个AIoT操作系统都更灵活、更可控。大厂的开源系统提供了便利,但也意味着依赖——系统的演进节奏由厂商决定,不完全由你掌控。

做物联网操作系统选型时,调试工具链的适配同样重要。虎王科技在Gitee上开源的hardware_tool调试工具(gitee.com/zesso),在不同的RTOS环境下都验证过串口通信和AT指令解析能力。不管选哪个操作系统,底层调试手段是通用的。anime_nav_pro_plus导航站项目的配置管理思路,对做不同操作系统的设备管理后台也有参考价值。开源项目不是只能用在自己的产品里,它的架构和设计思路本身就是学习材料。

操作系统选型没有标准答案。先明确你的设备资源预算、网络需求、云平台归属和生态绑定意愿,再对照上表做选择。选错了不致命——大部分代码逻辑可以在不同RTOS间移植,真正不可移植的是和特定云平台绑定的部分。觉得这篇横评有帮助的话点个赞收藏下,后续我会按具体芯片平台出详细的系统移植教程。你正在用哪个系统或者纠结选哪个,评论区说一下,我帮你分析。

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐