鸿蒙的诞生背景

说实话,鸿蒙这个系统刚出来的时候,我第一反应是:又一套安卓换皮?

但真正深入进去才发现,完全不是那么回事。鸿蒙的诞生,说白了是被逼出来的。2019年那会儿,华为被制裁,谷歌服务不让用了。你想想看,一个手机厂商,突然没法用安卓的GMS了,这多要命。

但华为的选择不是去求谷歌,而是——自己搞一套。我当时在内部交流会上听到一个说法:与其被别人卡脖子,不如自己造一条路。嗯,这话糙理不糙。

技术层面的驱动力

除了外部压力,还有技术上的原因。我这些年做嵌入式开发,最头疼的就是设备碎片化。手机一套系统,手表一套系统,电视又一套系统。每套系统都得单独维护,累不累?

鸿蒙想解决的就是这个问题:一套系统,搞定所有设备。从128KB内存的传感器,到8GB内存的手机,都能跑。这在当时,我觉得有点天方夜谭。但后来看到他们的技术方案,确实有点东西。

核心目标:实现「一次开发,多端部署」,让开发者不用为每个设备单独写代码。

设计理念:分布式不是噱头

鸿蒙的设计理念,我总结成三个词:分布式、原子化、统一OS

分布式架构

这个理念其实不新鲜,但鸿蒙把它玩出了花。传统系统里,每个设备都是孤岛。手机是手机,平板是平板。鸿蒙不一样,它把多个设备当成一个「超级终端」。

我举个例子你就明白了。你在手机上打游戏,突然有电话进来。传统做法是游戏暂停,接电话。鸿蒙的做法是:电话来了,自动流转到耳机上,游戏继续在手机上跑。或者更夸张一点,游戏画面可以投到平板上,手机只当手柄用。

为什么会这样?因为鸿蒙把设备的硬件能力抽象成了资源池。屏幕、摄像头、扬声器、传感器……这些不再是某个设备的私有财产,而是整个系统的共享资源。

个人经验:我在做智能家居项目时,试过用鸿蒙的分布式软总线把门锁和摄像头连起来。门锁开了,摄像头自动抓拍。代码量比传统方式少了大概40%。

原子化服务

这个理念更狠。传统App你得先安装才能用。鸿蒙搞了个「原子化服务」,说白了就是:用的时候才加载,用完就销毁

比如你扫个共享单车二维码,不需要下载App,直接调出原子化服务就能开锁。用完就没了,不占空间。我刚开始觉得这玩意儿就是小程序换皮,但后来发现底层机制完全不同。原子化服务是系统级的,权限管控更严格,性能开销也更低。

统一OS

这个好理解。鸿蒙把系统分成了两个版本:

  • 轻量系统:面向IoT设备,内存128KB起步,跑在MCU上
  • 标准系统:面向手机、平板、车机,内存128MB起步,跑在应用处理器上

但内核层是统一的。轻量系统用LiteOS内核,标准系统用Linux内核。上层API完全一致。这意味着你写一套代码,稍微改改配置,就能在两个平台上跑。

注意:虽然API一致,但轻量系统的功能集是标准系统的子集。比如轻量系统不支持GPU加速,也不支持Java。这个在选型时一定要想清楚。

技术架构全景图

下面这张图是我自己画的鸿蒙技术架构。说实话,第一次看官方文档时我头都大了,层数太多。后来我把它简化成四层,好理解多了。

鸿蒙系统技术架构全景图 应用层 原子化服务 | 传统App | 快应用 | 桌面 框架层 Ability框架 | 分布式数据管理 | 分布式软总线 UI框架(ArkUI) | 安全框架 | 多模输入 系统服务层 图形子系统 | 多媒体子系统 | 通信子系统 | 位置服务 电源管理 | 设备管理 | 升级服务 | 日志服务 内核层 LiteOS内核(轻量系统) | Linux内核(标准系统) 用户态 内核态 轻量系统:LiteOS内核 标准系统

这张图我画得比较简洁,但核心逻辑都在了。从上往下看:

  • 应用层:你写的代码最终跑在这一层。原子化服务和传统App共存。
  • 框架层:这是鸿蒙最牛的地方。分布式软总线让设备之间像插U盘一样即插即用。我调试的时候经常用这个功能,手机和平板之间拖文件,跟本地操作一样。
  • 系统服务层:各种子系统。注意图形子系统,轻量系统用的是轻量级图形栈,标准系统用的是完整的GPU管线。
  • 内核层:轻量系统用LiteOS,标准系统用Linux。但上层API是统一的,所以你的代码不用改。

避坑指南:我曾经在轻量系统上调用过标准系统才有的图形API,结果编译过了,运行直接崩。后来查文档才发现,轻量系统不支持GPU。所以写代码前,一定先确认目标设备的系统类型。

轻量系统 vs 标准系统:核心差异

这两个版本的区别,我整理了一张表,方便你对照:

对比项 轻量系统 标准系统
内存要求 128KB ~ 128MB 128MB 以上
处理器 MCU(如Cortex-M) 应用处理器(如Cortex-A)
内核 LiteOS Linux
图形能力 轻量级2D图形 完整GPU + 3D图形
编程语言 C/C++ C/C++ + Java + JS/TS
典型设备 智能灯、传感器、手表 手机、平板、车机

说白了,轻量系统就是给「小设备」用的。你想想看,一个智能灯泡,总共就128KB内存,你让它跑Linux?不现实。LiteOS内核只有几KB,调度器也简单,但够用。

标准系统则是给「大设备」用的。手机、平板这些,需要完整的进程管理、内存管理、文件系统。Linux内核在这块很成熟,鸿蒙直接拿来用,省了不少事。

我的建议:如果你做的是IoT设备,选轻量系统。如果你做的是带屏幕的交互设备,选标准系统。别想着用轻量系统跑复杂UI,那是在给自己挖坑。

写在最后

鸿蒙这套架构,说实话,刚开始我觉得有点复杂。但用久了你会发现,它的设计逻辑其实很清晰:用一套系统,覆盖所有设备。轻量系统管小设备,标准系统管大设备,中间通过分布式软总线连起来。

嗯,这一章就聊这么多。下一章我们深入看看轻量系统的内核实现,到时候我会拿一个实际的MCU项目来拆解。


公众号:蓝海资料掘金营,微信deep3321