前言
OpenHarmony是由开放原子开源基金会(OpenAtom Foundation)孵化及运营的开源项目,目标是面向全场景、全连接、全智能时代、基于开源的方式,搭建一个智能终端设备操作系统的框架和平台,促进万物互联产业的繁荣发展。最近在学习OpenHarmony源代码,个人认为学习有三个阶段,分别是看、实操、写(归纳总结),本着追求学习的终极目标,因此有了这篇文章。
一、OpenHarmony编译框架特点
OpenHarmony编译框架是基于模块化的,从大到小依次划分为产品、子系统集(或领域)、子系统、部件、模块、特性。这种模块化的树状编译框架,非常方便根据目标产品硬件资源的大小进行灵活的裁剪,从而实现“统一OS,弹性部署”的目标。
1.产品(product)
产品是基于解决方案为基于开发板的完整产品,主要包含产品对OS的适配、部件拼装配置、启动配置和文件系统配置等。build.sh编译的时候通过–product-name编译选项指定;hb编译的时候通过hb set进行设置。
#适用于标准(即L2或standard)系统编译
./build.sh --product-name rk3568 --ccache
cd build #进入源码下build目录
hb set #执行hb set命令,选择对应的产品名称
hb build #执行hb build命令,进行编译
2.子系统集(domain)
OpenHarmony技术架构中有四大子系统集:“系统基本能力子系统集”、“基础软件服务子系统集”、“增强软件服务子系统集”、“硬件服务子系统集”。四大子系统不会直接出现在编译选项或者参数中,而是有对应的一级源代码文件夹:“系统基本能力子系统集”对应源码foundation文件夹;“基础软件服务子系统集”和“硬件服务子系统集”对应源码base文件夹;“增强软件服务子系统集”对应源码domains文件夹。
.
├── applications //应用程序
├── arkcompiler //ark编译器
├── base //“基础软件服务子系统集”和“硬件服务子系统集”
├── build //编译目录
├── build.py -> build/lite/build.py //软链接
├── build.sh -> build/build_scripts/build.sh //软链接,标准系统编译入口
├── commonlibrary //通用库
├── developtools //开发工具
├── device //芯片相关
├── docs //文档md文件目录
├── drivers //驱动文件
├── foundation //“系统基本能力子系统集”
├── ide //ide
├── interface //接口
├── kernel //内核,liteos-m,liteos-a,linux,uniproton
├── napi_generator //native api相关
├── prebuilts //编译工具路径
├── productdefine //产品定义
├── qemu-run -> vendor/ohemu/common/qemu-run //qemu模拟器运行脚本
├── test //测试用例
├── third_party //三方库
└── vendor //产品
3.子系统(subsystem)
子系统是一个逻辑概念,它具体由对应的部件构成。在多设备部署场景下,支持根据实际需求裁剪某些非必要的子系统或部件。在build/subsystem_config.json中定义。
{
"arkui": {
"path": "foundation/arkui", //子系统源码路径
"name": "arkui" //子系统名称
},
"ai": {
"path": "foundation/ai",
"name": "ai"
},
"distributeddatamgr": {
"path": "foundation/distributeddatamgr",
"name": "distributeddatamgr"
},
"security": {
"path": "base/security",
"name": "security"
},
"startup": {
"path": "base/startup",
"name": "startup"
},
"hiviewdfx": {
"path": "base/hiviewdfx",
"name": "hiviewdfx"
},
"kernel": {
"path": "kernel",
"name": "kernel"
},
"thirdparty": {
"path": "third_party",
"name": "thirdparty"
}
...
}
** 4.部件(component)**