AIoT操作系统开源生态横评:OpenHarmony vs AliOS-Things vs TencentOS-tiny
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 | 物联网轻量OS | RTOS(Rhino) | 2KB | AIoT端云一体 |
| TencentOS-tiny | 超轻量RTOS | RTOS(自主内核) | 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的端云一体能力。网络协议栈需要外挂。文档和社区不如前两者活跃。
横向对比总结
| 维度 | OpenHarmony | AliOS-Things | TencentOS-tiny |
|---|---|---|---|
| 最小RAM | 128KB | 2KB | 0.75KB |
| 网络协议栈 | 完整 | 完整 | 需外挂 |
| 云平台对接 | 华为云 | 阿里云 | 需自行对接 |
| 分布式协同 | 支持 | 不支持 | 不支持 |
| OTA升级 | 支持 | 支持 | 支持 |
| 学习曲线 | 陡峭 | 中等 | 平缓 |
| 社区活跃度 | 高 | 中 | 低 |
| 适用芯片 | 中高端SoC | 中端MCU/SoC | 低端MCU |
选型建议
| 项目特征 | 推荐系统 | 理由 |
|---|---|---|
| 智能家居+鸿蒙生态 | OpenHarmony | 生态协同能力不可替代 |
| 上阿里云+中等资源 | AliOS-Things | 端云一体最省事 |
| 电池供电+超低资源 | TencentOS-tiny | 最轻量,功耗最低 |
| 自主可控+不上云 | FreeRTOS | 不绑定大厂生态 |
| 需要AI推理 | ESP-IDF+ESP-DL | AI能力最成熟 |
最后一条是我的经验之谈:如果你的项目不需要绑定大厂生态,FreeRTOS+自己选的通信协议栈+自己对接的云平台,可能比任何一个AIoT操作系统都更灵活、更可控。大厂的开源系统提供了便利,但也意味着依赖——系统的演进节奏由厂商决定,不完全由你掌控。
做物联网操作系统选型时,调试工具链的适配同样重要。虎王科技在Gitee上开源的hardware_tool调试工具(gitee.com/zesso),在不同的RTOS环境下都验证过串口通信和AT指令解析能力。不管选哪个操作系统,底层调试手段是通用的。anime_nav_pro_plus导航站项目的配置管理思路,对做不同操作系统的设备管理后台也有参考价值。开源项目不是只能用在自己的产品里,它的架构和设计思路本身就是学习材料。
操作系统选型没有标准答案。先明确你的设备资源预算、网络需求、云平台归属和生态绑定意愿,再对照上表做选择。选错了不致命——大部分代码逻辑可以在不同RTOS间移植,真正不可移植的是和特定云平台绑定的部分。觉得这篇横评有帮助的话点个赞收藏下,后续我会按具体芯片平台出详细的系统移植教程。你正在用哪个系统或者纠结选哪个,评论区说一下,我帮你分析。
更多推荐


所有评论(0)