0
0
0

鸿蒙造物者之路 01 · 鸿蒙初开

文章摘要
|

续写章节|沿用「造物者」系列的武侠讲解体,面向电子信息 / 嵌入式方向的新手

=================前情提要===============

实训楼三楼最里面那间实验室,门牌上写着「嵌入式联合实验室」,但里面常年只有一排落灰的 51 开发板和一台风扇嗡嗡响的老台式机。

我叫阿粽,电子信息工程技术专业,专升本上来的。上专科那会儿跟着老师焊过电路板、点过流水灯、调过智能小车的循迹,能用 C 语言让一块 STM32 把舵机转起来。我一直觉得自己算"会点东西"的人。

直到九月的某天下午,我在这间实验室里,第一次听见"鸿蒙"这两个字。

========================================


这一章你会得到什么

🎯 学完这一章,你应该能:

  • ☐ 分清 OpenHarmony / HarmonyOS / HarmonyOS NEXT 这三个名字,以后不再混淆
  • ☐ 能画出鸿蒙的四层架构,说出每一层负责什么
  • ☐ 记住轻量 / 小型 / 标准三种系统形态各对应什么设备和内核
  • ☐ 判断自己该走南向(硬件)还是北向(应用),或者两条都走
  • ☐ 能向别人解释:鸿蒙到底解决了什么问题

**🧰 需要准备:**什么都不用准备。纸和笔就够了,这一章不动手。

**⏱ 预计用时:**约 40 分钟,纯理解

📊 难度:★☆☆☆☆ 入门,像读小说


一、一个让我愣住的问题

⚠️ 先吃颗定心丸:这一章是全书"名词密度"最高的一章。

好消息是——这一章不要求你记住任何细节,只要建立一个大概的印象就行。 后面每一章都会把这里的东西重新展开讲一遍。

如果一次读着累,分两口吃:

  • 第一口:第一到第三节(鸿蒙是什么、为什么需要有它)
  • 第二口:第四到第六节(南北向分工、架构四层、三种形态)

读完这一章,你只需要能回答一个问题:我要学的这个东西,到底是个啥。

那天我在焊一块转接板,烙铁刚沾上焊盘,身后有人说话。

“同学,你这块板子,要是想让它连上手机,你会怎么做?”

我回头。一个五十岁上下的男人站在门口,手里拎着一个帆布工具包,包上印着某个我认不出来的芯片 logo。他穿着件洗得发白的工装外套,袖口卷到手肘,露出一截被烙铁烫过的小臂。

后来我知道他姓陈,实验室的常驻老师都叫他老陈。早年在深圳做路由器固件,后来做 IoT 模组,再后来不知道为什么回了学校,在这间落灰的实验室里待着。

我老实回答:“加个蓝牙模块,手机写个 App 连上去。”

“那要是你还想让它跟宿舍的台灯联动呢?灯是另一个厂家的,协议不开放。”

“……那就逆向它的协议?或者换个能配网的灯。”

“要是你还有个手环,想让手环靠近时灯自己亮呢?”

我卡住了。烙铁停在半空,锡球滚到了桌面上。

"三个设备,三个厂家,三种协议,三个 App。"老陈走进来,拉了把椅子坐下,“你现在做的,是二十年前的做法——每个设备一个 App,每个 App 一个孤岛。”

他把我的转接板拨到一边,从包里掏出一块巴掌大的开发板放在桌上。板子上印着一行小字,我看清了:Hi3861。

“如果我说,有一种系统,可以让这三个东西说同一种语言,让开发板能直接调用手机的屏幕、让手机能直接用开发板的传感器、让手环靠近时灯自己就亮——你会不会觉得省事很多?”

我看着那块板子:“那得所有厂家都用同一套东西吧。”

"对。"老陈点头,“所以它不是某一个 App 的技术,是一套系统。”

“什么系统?”

“鸿蒙。”

我愣了两秒,然后脱口而出:“那个……不是手机系统吗?跟我这块板子有什么关系?”

老陈笑了。

“这就是我今天要跟你讲的第一件事——你听到的’鸿蒙’,和你以为的’鸿蒙’,大概率不是同一个东西。”

二、三个名字,先分清楚

老陈从包里抽出一支记号笔,在那块白板的正中间画了一条竖线,把板面分成两半。

“市面上你听到’鸿蒙’,其实混着三个名字。分不清这三个,后面学的全是糊涂账。”

他在左边写下三个词:

OpenHarmony      ←  开源项目(根)
HarmonyOS        ←  华为的商业发行版(果)
HarmonyOS NEXT   ←  纯血版本(新的果)

2.1 OpenHarmony:树根

“OpenHarmony 是由开放原子开源基金会(OpenAtom Foundation)孵化及运营的开源项目。”

老陈敲了敲这个词:“记住’开放原子开源基金会’这几个字。2020 年,华为把自己那套系统的基础能力代码捐给了这个基金会,从此这套代码不姓华,姓’开源’。任何人、任何公司都可以拿它去做产品,不用给华为付钱,也不用华为点头。”

“所以……它是个像 Linux 那样的东西?”

"比 Linux 更狠一点。"老陈说,“Linux 只是个内核,你拿到 Linux 还得自己拼上桌面环境、网络协议栈、图形库,才能做出一个能用的系统。而 OpenHarmony 拿到手,是一整套——内核、驱动框架、系统服务、图形框架、应用框架,从几 KB 内存的门锁到几个 G 内存的手机,它都给你配齐了。”

他在白板上画了一棵树:“你现在能买到的那些写着’搭载 OpenHarmony’的门禁机、温控面板、工控屏,跑的都是它。它们跟华为手机没有半毛钱关系,厂商自己拿源码编译的。”

2.2 HarmonyOS:果子

“那 HarmonyOS 呢?”

"HarmonyOS 是华为在 OpenHarmony 之上做的商业发行版。"老陈在右边画了一个圈,用箭头连到左边的根上,“根是开源的,但华为在根上头,加了一大堆自己的东西——HMS 服务、华为帐号、应用市场、推送、地图、支付……这些是闭源的,是华为的商业资产。”

“所以华为手机上的鸿蒙,不等于 OpenHarmony?”

"是’基于’,不是’等于’。"老陈强调,“就像 Android 和 AOSP 的关系。AOSP 是开源的,小米拿到 AOSP 加上 MIUI 是 MIUI 系统;华为拿到 OpenHarmony 加上 HMS 和一堆闭源能力,才是你在手机上看到的 HarmonyOS。”

我记下这句话。

2.3 HarmonyOS NEXT:断了奶的那个

"第三个最狠。"老陈把"HarmonyOS NEXT"圈了个红框。

“HarmonyOS NEXT,现在正式叫 HarmonyOS 5,也就是大家嘴里的’纯血鸿蒙’。它把 AOSP 的代码全删了。”

“全删了?”

"一个不剩。"老陈说,“以前的 HarmonyOS 为了能跑安卓 App,底层还留着 AOSP 那一套代码,所以你说它是’安卓套壳’虽然难听,但技术上不算全错——它确实能跑 APK。NEXT 不一样,它不支持 APK,只跑自己的 HAP 包。”

“那微信怎么办?”

"所以从 2023 年到 2025 年,华为一直在干一件事:拉着全国的 App 厂商重写鸿蒙原生应用。"老陈放下笔,“现在微信、支付宝、抖音、淘宝都有自己的鸿蒙原生版,是重新写的,不是转译的。”

他顿了顿:“你知道这件事对你们这行意味着什么吗?”

我想了想:“……意味着会鸿蒙的人变值钱了?”

"意味着现在这个时间点,是这十年里学鸿蒙性价比最高的时候。"老陈说,“一个新生态刚断奶、原生应用还没写全、会的人还不多——这个窗口期就这两三年。等哪天满大街都是鸿蒙程序员,你再进来,就是红海了。”

2.4 三者关系速查

名字 性质 谁在维护 能不能免费用 关键特征
OpenHarmony 开源操作系统项目 开放原子开源基金会 能,完全开源 不含华为私有服务,可自行商用
HarmonyOS 商业发行版 华为 手机预装 基于 OpenHarmony + HMS 等闭源能力
HarmonyOS NEXT(5) 纯血商业发行版 华为 手机 / 平板 / 车机 移除 AOSP,不兼容 APK,只跑 HAP

一句话记住:OpenHarmony 是教材,HarmonyOS 是华为按教材写的作业,NEXT 是华为把抄别人那段全撕了重写的一版。

三、为什么非得有鸿蒙

"老师,"我有点不服,“安卓和 Linux 用得好好的,干嘛非要另起炉灶做一个系统?这不折腾吗?”

老陈没直接回答,他问我:“你宿舍有几台需要联网的东西?”

“手机、电脑、台灯、音箱、还有个蓝牙耳机。”

“几个 App 控制?”

我想了想:“……五个。台灯一个,音箱一个,耳机不用 App。”

"五个设备五个 App,每个 App 都要注册、都要配网、都要更新。"老陈说,“这就是现在物联网最真实的样子——碎片化到了荒唐的地步。”

他在白板上写下数字:

全球 IoT 设备数量:    数百亿级
主流 IoT 操作系统:    几十种
常见 IoT 通信协议:    Wi-Fi / 蓝牙 / ZigBee / Thread / Matter / 私有 2.4G ...
结果:                 一个设备一套系统、一套协议、一个 App

3.1 安卓扛不动这件事

“有人说,那把安卓塞进这些小设备不就行了?”

"塞不进去,也塞不起。"老陈说,“安卓是为手机设计的,它有几斤几两你猜猜——一个最小的 Android 系统镜像,几百 MB 起步,运行时要吃掉几百 MB 内存。你让一个内存只有 128 KB 的温感器跑安卓?它连开机动画都放不完就没电了。”

“那用 RTOS 呢?FreeRTOS、RT-Thread 那些?”

"能跑,但它们是单机思维。"老陈说,“RTOS 解决的是’这个设备自己怎么把活干好’,它压根没想过’这个设备怎么跟别的设备协作’。你想让门锁告诉空调’主人回来了’,对不起,RTOS 不提供这套能力,你自己写网络协议、自己搞设备发现、自己做安全认证——写到最后你会发现,你在重复造轮子。”

他转过身看着我:

“鸿蒙想解决的问题,不是’怎么让一个设备跑起来’,而是’怎么让一堆设备像一个设备那样工作’。”

3.2 鸿蒙的三板斧

“具体怎么做?三招。”

老陈竖起三根手指。

第一招:一套系统,弹性部署。

“同一套代码,编译的时候你挑一挑部件,能编出跑在 128 KB 内存 MCU 上的迷你版,也能编出跑在 8 GB 内存手机上的完整版。不是写两套系统,是一套系统按需伸缩。”

第二招:一次开发,多端部署。

“你写一个应用,框架层自动帮你适配手机、平板、车机、智慧屏、手表。不用每个端写一遍。”

第三招:硬件互助,资源共享(这条最狠)。

"这是鸿蒙真正区别于别的系统的地方。"老陈眼睛亮了一下,“简单说——设备之间能互相’借’硬件。”

他举了个例子:

“你的手表要扫码,摄像头太小拍不清。鸿蒙可以让手表直接调用手机的摄像头,拍完照片传回来。对手表上的应用来说,它就是在调自己的摄像头,一行代码都不用改。”

“……这怎么做到的?”

"分布式软总线。"老陈在白板上重重写下这五个字,“后面我会花一整章跟你讲。这是鸿蒙的命根子,也是你以后面试最值钱的那部分知识。”

四、一体两面:南向和北向

"好了,现在说跟你最相关的部分。"老陈把白板翻过来,“鸿蒙这个东西,学习路线是劈成两半的。”

他在白板上画了一道横线,上半部分写"北",下半部分写"南"。

              ┌─────────────────────────────┐
              │   北向 · 应用开发            │
              │   ArkTS / ArkUI / Ability    │
              │   面向:手机、平板、车机 App   │
              └─────────────────────────────┘
              ┌─────────────────────────────┐
              │   南向 · 设备开发            │
              │   C/C++ / 驱动 / HDF          │
              │   面向:开发板、模组、终端     │
              └─────────────────────────────┘

“南向,指的是往硬件那边走。写驱动、配外设、调传感器、搞编译烧录。用的是 C/C++,跟你现在玩的单片机是一个路数,只是系统换成 OpenHarmony。”

“北向,指的是往用户那边走。写界面、写业务、写 App。用的是 ArkTS,华为自己搞的语言。”

我本能地想选一个:“那我是不是该选一头?”

"你要是想在这行混得好,两头都得会。"老陈的话很直接。

“为什么?”

"因为纯北向的人,满大街都是——培训班三个月能出一堆会写 ArkTS 页面的。但既懂硬件又懂鸿蒙的人,市场上一将难求。"他敲了敲桌子,“你想想,一家做智能门锁的公司,要招一个能给他们的鸿蒙模组写驱动、又能顺手把配套 App 写出来的人——这种人他愿意开多少钱?”

我咽了口唾沫。

"所以这本书的路子,是先南后北,最后打通。"老陈说,“先让你用最熟悉的方式入手——点亮一盏灯;等你明白了系统是怎么跟硬件说话的,再往上走写界面;最后把两头接起来,做一个真正的软硬结合项目。”

他看着我:“你这个专业背景,走这条路是最顺的。别浪费了你会焊板子的手。”

五、鸿蒙的身体:技术架构四层

"在动手之前,你得先看清它的骨架。"老陈把白板擦干净,从下往上画了四个大框。

┌──────────────────────────────────────────────┐
│  第四层 · 应用层                               │
│  系统应用  |  桌面  |  设置  |  第三方应用        │
├──────────────────────────────────────────────┤
│  第三层 · 框架层                               │
│  Ability 框架 | ArkUI 框架 | 方舟运行时          │
├──────────────────────────────────────────────┤
│  第二层 · 系统服务层                           │
│  分布式软总线 | 分布式数据 | 分布式任务调度       │
│  图形 | 多媒体 | 安全 | AI | 电源 | 位置 ...     │
├──────────────────────────────────────────────┤
│  第一层 · 内核层                               │
│  LiteOS-M | LiteOS-A | Linux  |  HDF 驱动框架   │
└──────────────────────────────────────────────┘
         ↑
     硬件(芯片 / 开发板 / 模组)

5.1 内核层:地基

“最底下这层,是内核层,分两半。”

“一半是内核子系统——LiteOS-M、LiteOS-A、Linux,三选一或者组合,看你设备多大。”

"另一半是驱动子系统,核心是 HDF(Hardware Driver Foundation,硬件驱动框架)。"老陈特意把 HDF 三个字母写大,“这是鸿蒙南向最要紧的东西,后面一整章讲它。先记一句:HDF 让驱动可以一次开发、跨内核复用。”

“跨内核复用?”

"对。你写的一个驱动,跑在 LiteOS-M 上能用,换到 Linux 内核上也能用。"老陈说,“传统做法里,不同内核驱动是完全不同的写法,换内核等于重写。HDF 把它们统一了。”

5.2 系统服务层:五脏六腑

“往上一层是系统服务层,这是鸿蒙最’重’的一层,分成四组:”

子系统集 干什么 关键成员
系统基本能力 分布式底座与运行时 分布式软总线、分布式数据管理、分布式任务调度、方舟多语言运行时、公共基础库、多模输入、图形、安全、AI
基础软件服务 通用基础能力 事件通知、电话、多媒体、DFX(可观测性)、MSDP 等
增强软件服务 面向特定设备的增强能力 智慧屏专有业务、穿戴专有业务、IoT 专有业务等
硬件服务 硬件能力抽象 位置服务、生物特征识别、穿戴专有硬件服务、IoT 专有硬件服务

“这些名字你现在不用背,混个眼熟就行。但有三样东西,你必须现在就记住它们在这一层——”

老陈圈出三个:

分布式软总线、分布式数据管理、分布式任务调度。

“这仨是鸿蒙’硬件互助’的技术底座。第 09 章整章都是它们。”

5.3 框架层:舞台

“再往上是框架层,你写 App 打交道的就是这层。”

  • Ability 框架:应用的基本组成单元与生命周期管理
  • ArkUI 框架:声明式 UI 的开发框架(ArkTS 写界面就靠它)
  • 方舟多语言运行时(Ark Compiler / ArkTS Runtime):执行 ArkTS、C/C++、JS 代码的运行时
  • 多语言框架 API:把系统能力暴露成各种语言能调的接口

"ArkTS 你听过的吧?"老陈问。

“课上讲过一点,说是 TypeScript 改的。”

"ArkTS 是 TypeScript 的超集,但不是自由的 TypeScript——它加了很多静态类型限制。"老陈说,“目的很明确:让编译器在编译期就能确定类型,好直接生成高效的机器码,跳过运行时的类型推演。”

“所以 ArkTS 比 TS 更’死板’?”

“对,死板换性能。这点在第 06 章会让你刻骨铭心。”

5.4 应用层:台前的戏

“最上面是应用层,分系统应用和第三方应用。你写的就是第三方应用。”

“鸿蒙的应用包叫 HAP(Harmony Ability Package)——记住这个名字,它和安卓的 APK 完全不是一回事,第 11 章会细说。”

六、三种身法:系统的三种形态

"最后一件,也是最能体现鸿蒙’弹性部署’的地方。"老陈把白板分成三栏。

“同一套 OpenHarmony 代码,根据设备资源的不同,能编译出三种形态的系统:”

系统形态 面向处理器 内存要求 使用内核 典型设备
轻量系统(mini) MCU,如 Cortex-M、RISC-V 32 位 128 KiB 起 LiteOS-M 门锁、温感、开关面板、纽扣电池设备
小型系统(small) 应用处理器,如 Cortex-A 1 MiB ~ 128 MiB LiteOS-A 或 Linux 摄像头、路由器、智能音箱、车载 T-Box
标准系统(standard) 应用处理器,如 Cortex-A 128 MiB 以上 Linux 手机、平板、智慧屏、车机

"128 KB 到几个 GB,同一套系统。"老陈强调,“你手里那块 Hi3861,跑的就是轻量系统 + LiteOS-M,内存只有 352 KB,但它是完整的 OpenHarmony。”

我有点震惊:“352 KB 能跑操作系统?”

"能跑,还能跑多线程、跑网络协议栈、跑图形框架。"老陈笑了,“这就是 LiteOS-M 的本事——一个极小的实时操作系统内核(RTOS)。”

“那我以前玩的 FreeRTOS……”

"本质是同一类东西。"老陈说,“LiteOS-M 也是 RTOS,支持任务调度、信号量、互斥锁、消息队列、定时器,这些你在 FreeRTOS 里见过的它都有。区别是——LiteOS-M 上面接着一整套鸿蒙的系统能力,而 FreeRTOS 上面什么都没有。”

这句话让我心里一亮。

“所以你不是从零开始学,“老陈看穿了我的想法,”**你是有基础的。**你玩过单片机、写过 C、调过时序图,这些经验在南向开发里全都能直接用上。你比那些只会写 JS 的人,起点高得多。”

七、小剧场 · 三个名字

=================小剧场模式=================

我:(举手)老师,我再确认一遍——OpenHarmony 是开源的,HarmonyOS 是华为的,NEXT 是不兼容安卓的那个?

老陈:对。

我:那我以后要是去一家做智能门锁的公司,他们用的是哪个?

老陈:多半是 OpenHarmony。他们自己拿源码编译,不依赖华为。

我:那我学 HarmonyOS 那套,是不是白学了?

老陈:(摇头)不白学。ArkTS、ArkUI、Ability 这些上层的东西,两边是通用的——因为 HarmonyOS 本来就是从 OpenHarmony 长出来的。你学会北向那套,两边都能写。

我:只有南向不一样?

老陈:南向的驱动框架 HDF 也是通用的,不一样的主要是芯片厂商提供的闭源 SDK 和工具链。核心能力是共通的。

我:那岂不是……学一套能打两份工?

老陈:(笑)聪明。这就是为什么我说现在学它性价比高。

========================================

八、你的第一件装备

老陈把桌上那块 Hi3861 推到我面前。

“拿着。”

我接过来,板子很小,比银行卡还窄一半。正面一颗主控芯片,背面一排邮票孔,边上有个 MicroUSB 口和一颗蓝色 LED。

"Hi3861,华为海思的 Wi-Fi SoC,2.4G Wi-Fi + BLE,主频 160 MHz,SRAM 352 KB,Flash 2 MB。"老陈报参数跟报菜名一样顺,“OpenHarmony 轻量系统的经典入门板,一块几十块钱,坏了不心疼。”

“我拿它做什么?”

“第一件事——点亮那颗蓝灯。”

我愣住了:“……就点个灯?我大一就会点灯了。”

"你现在用 51 点灯,是让一个芯片的一根引脚输出高电平。"老陈说,“我要你用鸿蒙点灯,是让一个操作系统,通过它的驱动框架,去管理一个 GPIO 设备。”

他一字一句地说:

“前者是操作寄存器,后者是让系统替你操作寄存器。这两件事之间的差距,就是你从一个’会写单片机的人’变成一个’会做系统的人’的距离。”

我低头看着板子上那颗小小的蓝色 LED,忽然觉得它比刚才顺眼多了。

“什么时候开始?”

"明天晚上八点,带上你的笔记本电脑。"老陈站起来,把记号笔盖好,“先把环境搭起来。记住,环境搭建是所有新手的第一道鬼门关——倒在这一步的人,比倒在写代码上的多得多。”

他走到门口,回头补了一句:

“哦对了,你那台笔记本内存多大?”

“16 G。”

“够用。硬盘呢?”

“还剩……两百多 G?”

老陈沉默了两秒。

“明天之前,给我清出 100 G。”

“啊?一个点灯要 100 G?!”

"点灯不要。"老陈头也不回地走了,“编译 OpenHarmony 源码要。”


本章自检

过一遍下面的问题。答不上来的,回去翻对应小节——那些就是你这个章的欠账。

  • ☐ 有人问你「鸿蒙是不是安卓套壳」,你能讲清楚吗?
  • ☐ 不看资料,能在纸上画出四层架构吗?
  • ☐ 三种系统形态分别用什么内核?各举一个典型设备。
  • ☐ 南向和北向各自干什么?分别用什么语言?
  • ☐ 说出你打算走哪条路,为什么。

**➡️ 下一站:**第 02 章 · 三种身法 —— 搞明白同一套系统,凭什么能大能小。


=================剧情片段=================

导演:卡。开篇讲完了,观众应该对鸿蒙是什么有个概念了吧?

助理:(翻稿子)讲了三个名字的区别、架构四层、三种系统形态、南北向分工……信息量挺大的。

导演:够不够?会不会太干?

助理:还好,都套在故事里了。不过有观众会问——为什么非得先讲清楚 OpenHarmony 和 HarmonyOS 的区别?

导演:因为这个分不清,后面选开发板、选 SDK、看文档全会走错路。有人明明要做 IoT 模组,却去下 HarmonyOS 的 SDK,折腾一周才发现方向错了。

助理:那下一章讲什么?

导演:主角要开始搭环境了,但在这之前——

助理:先让他知道他要编译的那个东西,里面到底装了什么?

导演:对。内核。三种系统形态对应三种内核,不搞清楚内核,你连自己写的代码跑在谁头上都不知道。

助理:所以下一章叫——

导演:《三种身法》。 讲 LiteOS-M、LiteOS-A 和 Linux 是怎么被塞进同一套系统里的。

========================================

未完待续。。。

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或者给予支持!

评论

欢迎来到我的博客!