关注

鸿蒙 PC 底层开发技术详解(二):OpenHarmony、HarmonyOS 与 GNU/Linux 的关系

特别说明:本文所称 OpenHarmony 均指其“标准系统”,HarmonyOS 特指 PC 端版本(HarmonyOS 5.0 及以上)。所有结论仅代表个人观点,不代表任何官方定义。

OpenHarmony:非 GNU 系的 Linux 发行版

从系统架构上看,OpenHarmony 属于 “Linux 内核 + 非 GNU 用户态(non-GNU userland)” 的组合。

它与传统的 GNU/Linux(如 Debain、Red Hat)有显著区别:

  • C 库:使用定制版本的 musl libc,而非 GNU 的 glibc。
  • Shell:默认提供 mksh,而非 bash。
  • 工具集:内置 toybox,而非 GNU coreutils。

可以这么说:OpenHarmony 与 Android 类似,本质上是一个去 GNU 化的广义 Linux 发行版

这从 LLVM 编译器的 Target Triples(目标三元组)中可以直观体现:

  • aarch64-linux-gnu (GNU/Linux)
  • aarch64-linux-musl (musl Linux)
  • aarch64-linux-android (Android)
  • aarch64-linux-ohos (OpenHarmony)

由于三元组中都包含 linux,意味着它们共享相同的内核接口规范。

在工程层面,为 OpenHarmony 编译程序的过程与其它 Linux 发行版基本一致:

# 交叉编译:显式指定 target 以确保生成正确的 ABI 产物
clang --target=aarch64-linux-ohos my_program.c -o my_program

# 原生编译:target 默认即为 aarch64-linux-ohos,此时可省略该参数
clang my_program.c -o my_program

HarmonyOS:OpenHarmony 的商业发行版

HarmonyOS 是基于 OpenHarmony 打造的商业发行版。它继承了 OpenHarmony 的用户态架构和应用框架,并在底层内核、安全策略以及产品定位上进行了深度定制。

主要的几个改变:

OpenHarmony (社区版)HarmonyOS (商业版)
内核Linux 内核鸿蒙内核
源码属性开源闭源
root 权限提供具有 root 权限的 hdc shell不提供 root 权限
系统服务标准社区组件内置厂商特有服务与商业应用

在操作系统领域,商业发行版通常只会在社区版的基础上增加闭源组件或增强服务。像 HarmonyOS 这样对内核进行替换的做法实属罕见。这种“内核换血、接口兼容”的特殊模式,构成了 HarmonyOS 独特的运行环境。

从编译器视角来看,尽管 HarmonyOS 已不再使用 Linux 内核,但 LLVM 编译器并未为其定义独立的目标三元组。因此,在为 HarmonyOS 编译程序时,仍需沿用 OpenHarmony 的目标三元组,即 aarch64-linux-ohos

HarmonyOS 对 OpenHarmony 的兼容性

尽管内核不同,但 HarmonyOS 仍能够顺利运行大多数为 OpenHarmony 开发的软件。

这主要基于两个核心前提:

  1. ABI 兼容性:鸿蒙内核在设计上实现了 Linux ABI 兼容,允许针对 Linux 系统调用编写的程序直接在鸿蒙内核上运行。
  2. C 库解耦:应用程序主要通过 libc (musl) 与内核交互。作为中间层,libc 可以屏蔽底层内核的部分实现差异,从而实现应用层与内核层的逻辑解耦。

HarmonyOS 对 OpenHarmony 的不兼容性

虽然实现了 ABI 兼容,但鸿蒙内核并非 100% 与 Linux 内核表现一致:

  • 系统标识差异uname 系统调用返回的内核名称不同。部分依赖内核名称进行逻辑判断的脚本或程序,在两个系统上可能会有不同的表现。
  • 安全机制增强:鸿蒙内核引入了更为严格的安全特性,例如二进制代码签名校验等。这也是用户在鸿蒙 PC 上运行第三方程序时,频繁遇到 Permission denied 的一大原因。

转载自CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/hqzing/article/details/160717501

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--