OpenHarmony 标准系统到底是什么?—【万物智能之开源鸿蒙 OpenHarmony 系统实战开发系列教程】
开篇把「为什么做开源鸿蒙、这块板适不适合你」说完了。今天把四个字拆开:标准系统到底是什么。后面所有命令,默认你在这一档上——有窗口、有 hap,不是 MCU 那套轻量内核。
把板子插上串口,波特率调到 1500000,内核打出来的版本是 Linux 5.10。很多人在这一步就会下结论:开源鸿蒙就是套了壳的 Linux。
这个结论对了一半。标准系统的内核确实是 Linux,设备树、dmesg、/sys 都还在。错的那一半是:你接下来要装的应用、要调的显示、要写的驱动,很大一部分已经不在「发行版 Linux」那套习惯里了。
OpenHarmony 是开放原子开源基金会下面的开源项目。官方的说法比较克制:面向全场景,搭一个智能终端操作系统的框架。落到 RK3568 这种能跑桌面的芯片上,它给的是 标准系统——有窗口、有 GPU 合成、有 ArkTS 应用,不是 MCU 上那种轻量内核。
官方分层图是下面这一张。建议先看图,再往下读,否则后面的目录名会飘在空中。


从上往下四层:
应用层是桌面、设置、以及你自己编的 hap。框架层是 Ability、ArkUI,还有相机、音频这些 Kit。系统服务层是包管理、图形合成、网络、电源。最底是内核:Linux 加上一套叫 HDF 的驱动框架。
在 RK3568 上可以立刻验证你跑的是不是这一档:
hdc shell uname -a
hdc shell ls -l /system/lib/ld-musl-arm.so.1
hdc shell param get ohos.boot.hardware
第一行会看到 aarch64 的 Linux。第二行必须存在——用户态是 32 位 musl,没有这份 loader,你自己编的 64 位程序根本 exec 不了。第三行在这块 BSP 上常常是 rk30board,init 和 fstab 只认带这个后缀的文件。三个结果对得上,你才和后文的路径在同一套系统里。
为啥会有轻量、小型、标准三个词
因为同一套名字要覆盖差两个数量级的硬件。MCU 上 128 KB 内存,和 RK3568 上 2 GB 内存,不可能跑同一份桌面。
轻量系统给 Cortex-M、RISC-V,内存可以从一百多 KB 起,做连接和简单控制。小型系统到了 Cortex-A,能做一点图形和编解码,比如猫眼。标准系统还是 Cortex-A,但按完整应用框架来:窗口、3D、hap。RK3568 属于最后这一档。
官方给标准系统写过 128 MB 内存的下限。那是「能起来」,不是「能拿来做相机预览和 ArkTS 界面」。实际买板,2 GB 才像能干活,4 GB 更从容。选板的细节在上一篇。
档选错的典型症状是:你拿着标准系统的 build.sh、hdc、hap 去对一块 MCU 板,或者反过来,在 RK3568 上找 LiteOS 的烧录文档。两边的快速入门都在官方树里,入口不同。RK3568 的说明在他们的 开发板介绍。
标准系统在这种芯片上实际在干什么
别把「全场景」当成要一次做完的功能清单。按 RK3568 的接口,常见就这几类。
带屏的设备。产线操作界面、门口机、仓储终端。VOP2 能出很多种屏,但同一时刻通常只能把一路当主显示。HDMI 还 okay 的时候去点 MIPI 屏,背光可能亮,桌面不会来。这是显示那几篇的核心约束,不是驱动没编进去。
网关。双千兆,USB 上再挂 Wi-Fi 或蜂窝模组。4G 有的枚举成 wwan0 走 QMI,5G 有的枚举成 usb0 走 NCM,不能拿同一套拨号程序去套。
采集和执行。I2C 上的温度、光感,UART 上的定位模块,GPIO 上的继电器。应用往往不是通过一套完整的 Kit 就能读到所有芯片,而是 NAPI 打开 /dev 或 /sys。权限、节点是否 0666、SELinux 是否还在开发期的宽松模式,都会让「驱动已经 probe 成功、应用还是读失败」发生。
相机。MIPI CSI 走 ISP,USB 走 UVC。预览花了,优先查缓冲区格式和写到了哪块内存,而不是先怀疑传感器没起来。传感器起来、/dev/video 也在、画面仍然错,是 HAL 那一层的事。
这些场景决定了后面文章的顺序:先把桌面和调试口做稳,再按总线把芯片一篇一篇写。分布式软总线、跨设备调度,官方有专门章节。单机屏都不稳的时候去做组网,只会得到两块都不稳的板。
HDF 是什么,为啥不能当没看见
Linux 上加一个 GPIO 灯,设备树加节点、内核开 CONFIG_LEDS_GPIO 就结束了。OpenHarmony 里,触摸、音频、显示、一部分相机,走的是 HDF:配置文件叫 HCS,编进内核或放进 vendor,上层通过 HDI 来用。
官方对 HDF 的概述在 驱动框架。架构可以看成:上面是统一的设备接口,中间是加载和消息,下面用 OSAL 挡住不同内核的差异。
RK3568 标准系统上的现实更土一些。灯、超声波、RFID 仍然是 Linux 原生驱动加 /dev。触摸却常常把设备树里的 goodix 关掉,让 HDF 独占 I2C。于是你会看到一种很怪的现象:i2cdetect 有地址,Linux 的 goodix 没 bind,应用却能点——因为另一套驱动在干活。
后文每碰到一个外设,会写它走哪条腿。两条腿同时踩同一颗芯片,是抢总线的常见原因。
应用为啥不是一个 ELF
传统板上你丢一个 arm-linux-gnueabihf-gcc 编出来的程序到 /usr/bin。这里用户态是 musl、32 位。交叉编译器要换成开源鸿蒙那套,动态链接器路径要写成 /system/lib/ld-musl-arm.so.1。
带界面的程序是 hap。DevEco 编出来先是 unsigned,直接安装会失败。签名用 Java 工具和一套 p12/p7b,不是 Android 那套密钥。系统预装还要过包管理里的指纹列表和权限级别,错误码不同,门也不同。
所以「我在 Linux 上会写 C」只覆盖了内核模块和一部分 NAPI。应用那一层有自己的包格式和规则,后面会单独写,这里先建立预期:编过 Qt 的经验,不能直接搬。
版本和以后
这组文章钉在 OpenHarmony 4.1、API 11。升到更新的 API,ArkTS、包结构和签名材料都会变,hap 不要假设能直接装上去。
芯片侧,RK3568 / 更强的同系列会继续当标准系统的常见平台。南向工作的内容比较稳定:设备树、HCS、init、fstab、显示时序、外设兼容。这些不会因为换一个桌面主题就消失。
端侧模型、NPU、把相机帧送进推理,我打算在相机画面稳定之后另写。现在预览如果是花的,模型输入就是花的。路径上可以先记住三件事:帧存在哪、格式是什么、应用有没有权限拿到。那三件事清楚了,后面接模型只是多一个用户态库。
下一篇写同一颗 RK3568 上,从普通嵌入式 Linux 换过来以后,哪些习惯要改。里面会有具体命令,对照着跑比看架构图有用。
系列第 1 篇 · 芯片:瑞芯微 RK3568 · OpenHarmony 4.1(API 11) · Linux 5.10
更多推荐



所有评论(0)