【OpenHarmony-v3.2代码分析】01 - 【OpenHarmony-v3.2代码分析】01 - 代码目录分析
OpenHarmony-v3.2代码获取链接:《code-v3.2-Release.tar.gz》
OpenHarmony其他版本代码获取链接:https://repo.huaweicloud.com/harmonyos/os/
开发者网站:https://developer.harmonyos.com/
gitee网站:https://gitee.com/openharmony/docs/blob/OpenHarmony-3.2-Release/zh-cn/device-dev/quick-start/Readme-CN.md
子系统介绍:https://gitee.com/openharmony/docs/tree/master/zh-cn/readme
从今天开始,我们正式进入OpenHarmony V3.2的代码分析,
在分析代码前,先来看看代码结构,看看每个目录大概作用是什么?
$ tree -L 3 OpenHarmony
OpenHarmony
├── applications // 内置的示例应用程序
│ ├── sample // 小型系统的示例应用程序,包含 CameraApp相机,wifi,gallery图库,launcher桌面,media拍照录像和音视频播放等
│ └── standard // 标准系统的示例应用程序,如Camera摄像头、Call通话、Contacts联系人,photos图像等
├── arkcompiler // 方舟编译器
│ ├── ets_frontend // 方舟运行时子系统的前端工具,结合ace-ets2bundle组件,支持将ets文件转换为方舟字节码文件。
│ ├── ets_runtime // OpenHarmony 上默认的ArkTS语言Runtime
│ ├── runtime_core // 方舟编译器Runtime 公共组件
│ └── toolchain // 方舟工具链, 一套OpenHarmony应用程序调试调优工具,其功能包括单步调试、断点调试、Watch变量及表达式、CPU Profiler和Heap Profiler等,并支持多实例和Worker调试
├── base // 基础软件服务子系统集和硬件服务子系统集,可根据需要进行裁剪。
│ ├── account // 在标准系统上,帐号子系统主要提供系统帐号生命周期管理,分布式帐号登录状态管理和应用帐号添加删除等基础管理能力。
│ ├── customization // 配置策略组,企业设备管理组件EDM
│ ├── global // 全球化子系统,提供多语言支持,多文化的资源管理,以及国际化能力
│ ├── hiviewdfx // DFX框架子系统,提供日志和系统事件的打印,输出功能
│ ├── inputmethod // 输入法框架,主要作用是拉通应用和输入法,保证应用可以通过输入法进行文本输入
│ ├── iothardware // IOT(The Internet of Things)硬件设备操作的接口,提供设备操作接口有:FLASH,GPIO,I2C,PWM,UART,WATCHDOG等
│ ├── location // 位置服务组件
│ ├── msdp // MSDP设备状态感知框架能够识别出目前设备的状态并传递给订阅者,整个框架是基于MSDP算法库和系统SensorHDI组件组成的
│ ├── notification
│ │ ├── common_event_service // 通过CES(Common Event Service)为应用程序提供订阅、发布、退订公共事件的能力
│ │ ├── distributed_notification_service // 通过ANS(Advanced Notification Service,通知系统服务)对通知类型的消息进行管理,支持多种通知类型,包括文本,长文本,多文本,图片,社交,媒体等。所有系统服务以及应用都可以通过通知接口发送通知消息,用户可以通过SystemUI查看所有通知消息。
│ │ └── eventhandler // 提供了OpenHarmony线程间通信的基本能力,可以通过EventRunner创建新线程,将耗时的操作抛到新线程上执行,从而实现在不阻塞原来的线程的基础上合理地处理耗时任务
│ ├── powermgr // 电源管理服务子系统,提供系统各模块的电源状态管理等接口
│ ├── request // 向三方应用提供文件下载/上传能力,以支撑应用开发者方便、高效地使用下载/上传业务的功能
│ ├── security // 安全子系统,提供系统安全,数据安全,应用安全等能力
│ ├── sensors // 传感器服务子系统,提供轻量级传感器服务基础框架
│ ├── startup // 启动恢复子系统,负责在内核启动之后,到应用启动之前的系统关键进程和服务的启动过程,并提供系统属性查询,修改及设备恢复出厂设置的功能
│ ├── telephony // 电话服务子系统,提供了一系列的API用于获取无线蜂窝网络和SIM卡相关的一些信息。应用可以通过调用API来获取当前注册网络名称、网络服务状态、信号强度以及SIM卡的相关信息
│ ├── theme // 锁屏管理服务是OpenHarmony中系统服务,为锁屏应用提供注册亮屏、灭屏、开启屏幕、结束休眠、退出动画、请求解锁结果监听,并提供回调结果给锁屏应用。锁屏管理服务向三方应用提供请求解锁、查询锁屏状态、查询是否设置锁屏密码的能力
│ ├── time // 提供管理系统时间时区和定时的能力,支持设置获取时间、日期、时区和系统定时器功能
│ ├── update // OpenHarmony升级子系统用来支持OpenHarmony设备的OTA(Over The Air)升级
│ ├── usb // Usb设备作为host设备连接device设备进行数据传输
│ ├── useriam // 人脸认证 (faceauth)支持用户人脸的录入,删除和认证功能
│ └── web // nweb是OpenHarmony webview组件的Native引擎,基于Chromium和CEF构建
├── build // 编译构建子系统提供了一个基于Gn和ninja的编译构建框架。
├── build.py -> build/lite/build.py
├── build.sh -> build/build_scripts/build.sh
├── commonlibrary
│ ├── c_utils // C++公共基础类库为标准系统提供了一些常用的C++开发工具类
│ ├── ets_utils // ets_utils组件共提供四个子模块,分别是:js_api_module、js_util_module、js_sys_module和js_worker_module
│ ├── memory_utils // 内存基础库部件位于公共基础库子系统中,为上层业务提供对应的操作内存的系统库,保证上层业务的稳定性。
│ └── utils_lite // 轻量级公共基础库存放OpenHarmony通用的基础组件。这些基础组件可被OpenHarmony各业务子系统及上层应用所使用
├── developtools // 常用开发工具集合
│ ├── ace_ets2bundle // 提供声明式范式的语法编译转换,语法验证,丰富友好的语法报错提示能力。
│ ├── ace_js2bundle // 提供类Web范式的语法编译转换、语法验证,丰富友好的语法报错提示。
│ ├── bytrace // bytrace是开发人员用于追踪进程轨迹、查看性能的一种工具,主要对内核ftrace进行了封装和扩展,来支持用户态的打点
│ ├── global_resource_tool // OpenHarmony资源编译工具, 资源编译工具属于PC端工具,在OpenHarmony SDK中toolchain目录下,提供给IDE使用,支持Windows, Linux, MacOS平台。
│ ├── hapsigner // Hap包签名工具, 为了保证OpenHarmony应用的完整性和来源可靠,在应用构建时需要对应用进行签名。经过签名的应用才能在真机设备上安装、运行、和调试。本仓提供了签名工具的源码,包含密钥对生成、CSR文件生成、证书生成、Profile文件签名、Hap包签名等功能。
│ ├── hdc // HDC-OpenHarmony设备连接器, 为开发人员提供的用于设备连接调试的命令行工具,pc端开发机使用命令行工具hdc,该工具需支持部署在Windows/Linux/Mac等系统上与OpenHarmony设备(或模拟器)进行连接调试通信。
│ ├── hiperf // hiperf 应用性能优化剖析组件, 为开发人员提供的用于调试的命令行工具,用于抓取特定程序或者系统的性能数据,类似内核的 perf 工具
│ ├── integration_verification // 集成验证部件,集成验证包含门禁冒烟和每日构建两个功能:门禁冒烟对开发者的提交进行基本功能、部件功能和按场景的端到端测试;每日构建定时取master和release分支代码进行版本归档、全量TDD测试、最小系统测试和部件化的架构看护检查。
│ ├── packing_tool // 打包拆包工具使用说明, packing_tool子系统用于生成打包工具和拆包工具,其中打包工具用于hap,app,hqf,appqf,har包的生成,拆包工具用于对hap,app,hqf,appqf,har包的拆包及对hap,app,appqf的解析。
│ ├── profiler // 性能调优组件,包含系统和应用调优框架,旨在为开发者提供一套性能调优平台,可以用来分析内存、性能等问题。
│ └── syscap_codec // 系统能力编解码工具, 提供PCID编解码、RPCID编解码、编码字符串、PCID与RPCID比较
├── device // 设备开发
│ ├── board // HiHope、上海海思芯片的开发板相关内容, 目前支持运行轻量系统、小型系统和标准系统的多款开发板,覆盖智慧视觉、智慧媒体、智慧IOT等多个领域
│ ├── qemu // Quick Emulator, 可以模拟内核运行在不同的单板,解除对物理开发板的依赖。
│ └── soc // 本仓用于存放上海海思芯片、瑞芯微相关内容,包含HDI实现(media、display、camera、codec、audio、ai等)、芯片驱动、外设驱动、芯片SDK库和头文件等,
├── docs // OpenHarmony文档仓库
│ ├── docker // OpenHarmony的Docker编译环境使用指导
├── drivers // OpenHarmony驱动子系统采用C面向对象编程模型构建,通过平台解耦、内核解耦,兼容不同内核,提供了归一化的驱动平台底座,旨在为开发者提供更精准、更高效的开发环境,力求做到一次开发,多系统部署。
│ ├── hdf_core // 存放OpenHarmony驱动子系统核心源码信息(包括驱动框架、配置管理、配置解析、驱动通用框架模型、硬件通用平台能力接口等),旨在为开发者提供更精准、更高效的开发环境,力求做到一次开发,多系统部署。
│ │ ├── adapter //包含所有LiteOS-M和LiteOS-A内核以及用户态接口库等相关适配代码以及编译脚本。
│ │ │ ├── khdf //提供驱动框架对LiteOS-A、Linux、LiteOS-M内核依赖适配
│ │ │ ├── platform// 平台基础驱动实现,如can、gpio、i2c、mipi_dsi、pwm、spi、uart、watchdog
│ │ │ ├── uhdf //提供用户态驱动接口对系统依赖适配
│ │ │ └── uhdf2 //提供用户态驱动框架对系统依赖适配
│ │ ├── figures
│ │ │ └── architecture-of-the-hdf.png // HDF系统框架图
│ │ └── framework //HDF框架、平台驱动框架、驱动模型等平台无关化的公共框架。
│ │ ├── core // 实现驱动框架的核心代码
│ │ │ ├── adapter // 实现对内核操作接口适配,提供抽象化的接口供开发者使用
│ │ │ ├── common // 驱动框架公共基础代码
│ │ │ ├── host // 驱动宿主环境模块
│ │ │ ├── manager // 驱动框架管理模块
│ │ │ └── shared // host和manager共享模块代码
│ │ ├── include // 驱动框架对外提供能力的头文件
│ │ │ ├── audio // AUDIO对外提供能力的头文件
│ │ │ ├── bluetooth // 蓝牙对外提供能力的头文件
│ │ │ ├── core // 驱动框架对外提供的头文件
│ │ │ ├── ethernnet // 以太网操作相关的头文件
│ │ │ ├── net // 网络数据操作相关的头文件
│ │ │ ├── osal // 系统适配相关接口的头文件
│ │ │ ├── platform // 平台设备相关接口的头文件
│ │ │ ├── utils // 驱动框架公共能力的头文件
│ │ │ └── wifi // WLAN对外提供能力的头文件
│ │ ├── model // 提供驱动通用框架模型
│ │ │ ├── audio // AUDIO框架模型
│ │ │ ├── display // 显示框架模型
│ │ │ ├── input // 输入框架模型
│ │ │ ├── misc // 杂项设备框架模型,包括dsoftbus、light、vibrator
│ │ │ ├── network // WLAN框架模型
│ │ │ └── sensor // Sensor驱动模型
│ │ │ └── storage // 存储驱动模型
│ │ │ └── usb // USB驱动模型
│ │ ├── sample // HCS配置描述示例及HDF驱动示例
│ │ ├── support // 提系统的基础能力
│ │ │ └── platform // 平台设备驱动框架及访问接口,范围包括GPIO、I2C、SPI等
│ │ │ └── posix // posix框架及访问接口,范围包括Mem、Mutex、Sem、Spinlock、Thread、Time等
│ │ ├── test // 测试用例
│ │ ├── tools // hdf框架工具相关的源码
│ │ │ └── hc-gen // 配置管理工具源码
│ │ │ └── hcs-view
│ │ │ └── hdf-dbg
│ │ │ └── hdf-dev_eco_tool
│ │ │ └── hdf-gen
│ │ │ └── idl-gen
│ │ │ └── leagecy
│ │ └── utils // 提供基础数据结构和算法等
│ ├── interface // Display、Input、Sensor、WLAN、Audio、Camera等外设模块HDI接口定义,用于管理各模块HDI(Hardware Device Interface)接口定义,接口定义使用IDL语言描述并以·idl文件形式保存。
│ │ ├── activity_recognition
│ │ ├── audio // audio HDI 接口定义
│ │ ├── battery // battery HDI 接口定义
│ │ ├── bluetooth // bluetooth HDI 接口定义
│ │ ├── camera // camera HDI 接口定义
│ │ ├── codec // codec HDI 接口定义
│ │ ├── connected_nfc_tag
│ │ ├── display // display HDI 接口定义
│ │ ├── distributed_camera
│ │ ├── face_auth // 人脸验证 HDI 接口定义
│ │ ├── figures
│ │ ├── fingerprint_auth // 指纹验证 HDI 接口定义
│ │ ├── input // input HDI 接口定义
│ │ ├── light // light HDI 接口定义
│ │ ├── location // location HDI 接口定义
│ │ ├── memorytracker
│ │ ├── motion
│ │ ├── nfc // nfc HDI 接口定义
│ │ ├── nnrt
│ │ ├── partitionslot
│ │ ├── pin_auth
│ │ ├── power
│ │ ├── ril // ril HDI 接口定义
│ │ ├── sensor // sensor HDI 接口定义
│ │ └── v1_0 // sensor HDI 接口 v1.0版本定义
│ │ ├── BUILD.gn // sensor idl文件编译脚本
│ │ ├── ISensorCallback.idl // sensor callback 接口定义idl文件
│ │ ├── ISensorInterface.idl // sensor interface 接口定义idl文件
│ │ └── SensorTypes.idl // sensor 数据类型定义idl文件
│ │ ├── thermal // thermal HDI 接口定义
│ │ ├── usb // usb HDI 接口定义
│ │ ├── user_auth
│ │ ├── vibrator // vibrator 马达HDI 接口定义
│ │ └── wlan // wlan HDI 接口定义
│ ├── liteos // 内核驱动是软件与硬件交互的桥梁,通过文件系统接口访问OpenHarmony内核的硬件资源,是用户与内核之间、进程与进程之间通信的一种方式。每类驱动代表一种能力,用户可以根据需求选择对应驱动,完成数据的传输
│ │ └── hievent
│ └── peripheral // Display、Input、Sensor、WLAN、Audio、Camera等外设模块硬件抽象层, 包含各外设器件驱动相关的HDI(Hardware Driver Interface)接口、HAL实现、驱动模型及测试用例等,根据模块划分不同目录。
│ ├── audio
│ ├── base
│ ├── battery
│ ├── bluetooth
│ ├── camera
│ ├── codec
│ ├── connected_nfc_tag
│ ├── display
│ ├── distributed_camera
│ ├── face_auth
│ ├── fingerprint_auth
│ ├── format
│ ├── input
│ ├── light
│ ├── location
│ ├── memorytracker
│ ├── motion
│ ├── nfc
│ ├── partitionslot
│ ├── pin_auth
│ ├── power
│ ├── ril
│ ├── sensor
│ ├── thermal
│ ├── usb
│ ├── user_auth
│ ├── vibrator
│ └── wlan
├── foundation // 系统基础能力子系统集,这部分可以根据需要进行裁剪
│ ├── ability
│ │ ├── ability_base // 部件作为元能力的基础定义部件,提供组件启动参数(Want),系统环境参数(Configuration),URI参数(Uniform Resource Identifier)的定义,用于启动应用,获取环境参数等功能。
│ │ ├── ability_lite // 元能力组件,是OpenHarmony为开发者提供的一套开发鸿蒙应用的开发框架
│ │ ├── ability_runtime // 元能力子系统实现对Ability的运行及生命周期进行统一的调度和管理,应用进程能够支撑多个Ability,Ability具有跨应用进程间和同一进程内调用的能力。Ability管理服务统一调度和管理应用中各Ability,并对Ability的生命周期变更进行管理。
│ │ ├── dmsfwk // 分布式组件管理部件模块负责跨设备组件管理,提供访问和控制远程组件的能力,支持分布式场景下的应用协同
│ │ ├── dmsfwk_lite // 轻量级分布式组件管理模块负责跨设备启动FA的能力,支持分布式场景下的应用协同
│ │ ├── form_fwk // 卡片是一种界面展示形式,可以将应用的重要信息或操作前置到卡片,以达到服务直达的目的。
│ │ └── idl_tool // 在OpenHarmony中,当应用/系统服务的客户端和服务端进行IPC(Inter-Process Communication)跨线程通信时,需要定义双方都认可的接口,以保障双方可以成功通信,OpenHarmony IDL(Interface Definition Language)则是一种定义此类接口的工具。OpenHarmony IDL先把需要传递的对象分解成操作系统能够理解的基本类型,并根据开发者的需要封装跨边界的对象。
│ ├── ai // AI引擎框架
│ ├── arkui
│ ├── barrierfree
│ ├── bundlemanager
│ ├── communication
│ ├── deviceprofile
│ ├── distributeddatamgr
│ ├── distributedhardware
│ ├── filemanagement
│ ├── graphic
│ ├── multimedia
│ ├── multimodalinput
│ ├── resourceschedule
│ ├── systemabilitymgr
│ └── window
├── interface
│ └── sdk-js
├── kernel // 内核系统
│ ├── linux // 小型系统和标准系统
│ ├── liteos_a // LiteOS-A内核是基于Huawei LiteOS内核演进发展的新一代内核,Huawei LiteOS是面向IoT领域构建的轻量级物联网操作系统,能够带给用户小体积、低功耗、高性能的体验以及统一开放的生态系统能力
│ ├── liteos_m // LiteOS-M内核是面向IoT领域构建的轻量级物联网操作系统内核,具有小体积、低功耗、高性能的特点,其代码结构简单,主要包括内核最小功能集、内核抽象层、可选组件以及工程目录等,分为硬件相关层以及硬件无关层,硬件相关层提供统一的HAL(Hardware Abstraction Layer)接口,提升硬件易适配性,不同编译工具链和芯片架构的组合分类,满足AIoT类型丰富的硬件和编译工具链的拓展
│ └── uniproton // 为上层业务软件提供一个统一的操作系统平台,屏蔽底层硬件差异,并提供强大的调试功能。使得业务软件可在不同的硬件平台之间快速移植,方便产品芯片选型,降低硬件采购成本和软件维护成本。
├── napi_generator // NAPI框架代码生成工具,它可以根据用户指定路径下的ts(typescript)接口文件一键生成NAPI框架代码、业务代码框架、GN文件等。在开发JS应用与NAPI间接口时,底层框架开发者无需关注Nodejs语法、C++与JS之间的数据类型转换等上层应用转换逻辑,只关注底层业务逻辑即可,专业的人做专业的事,从而可以大大提高开发效率。
├── prebuilts
│ ├── ark_tools
│ ├── build-tools
│ ├── clang
│ ├── cmake
│ ├── develop_tools
│ ├── gcc
│ ├── mingw-w64
│ ├── previewer
│ └── python
├── productdefine // 一个完整的产品包括芯片组件部分和系统组件部分。芯片组件部分在vendor/{company}/{product}/目录下定义。
│ └── common // 本仓主要定义与芯片无关的通用系统组件形态配置。
├── qemu-run -> vendor/ohemu/common/qemu-run
├── test // OpenHarmony稳定性测试自动化工具,通过模拟用户行为,对OpenHarmony系统及应用进行稳定性压力测试。
│ ├── ostest
│ ├── testfwk // OpenHarmony自动化测试框架代码部件仓arkXtest,包含单元测试框架(JsUnit)和Ui测试框架(UiTest)。
│ └── xts
├── third_party // 三方库
│ ├── EGL
│ ├── FatFs
│ ├── FreeBSD
│ ├── NuttX
│ ├── PyYAML
│ ├── abseil-cpp
│ ├── alsa-lib
│ ├── alsa-utils
│ ├── benchmark
│ ├── boost
│ ├── bounds_checking_function
│ ├── bzip2
│ ├── cJSON
│ ├── cef
│ ├── chromium
│ ├── cmsis
│ ├── css-what
│ ├── curl
│ ├── e2fsprogs
│ ├── ejdb
│ ├── elfio
│ ├── eudev
│ ├── exfatprogs
│ ├── expat
│ ├── f2fs-tools
│ ├── ffmpeg
│ ├── flatbuffers
│ ├── flutter
│ ├── freetype
│ ├── fsck_msdos
│ ├── gettext
│ ├── giflib
│ ├── glib
│ ├── glslang
│ ├── gn
│ ├── googletest
│ ├── gptfdisk
│ ├── grpc
│ ├── gstreamer
│ ├── harfbuzz
│ ├── icu
│ ├── iniparser
│ ├── iowow
│ ├── iptables
│ ├── jerryscript
│ ├── jinja2
│ ├── jsframework
│ ├── json
│ ├── jsoncpp
│ ├── libcoap
│ ├── libdrm
│ ├── libevdev
│ ├── libexif
│ ├── libffi
│ ├── libinput
│ ├── libjpeg-turbo
│ ├── libnl
│ ├── libphonenumber
│ ├── libpng
│ ├── libpsl
│ ├── libsnd
│ ├── libsoup
│ ├── libunwind
│ ├── libusb
│ ├── libuv
│ ├── libwebsockets
│ ├── libxml2
│ ├── littlefs
│ ├── ltp
│ ├── lwip
│ ├── lz4
│ ├── markupsafe
│ ├── mbedtls
│ ├── mesa3d
│ ├── mindspore
│ ├── mksh
│ ├── mtdev
│ ├── musl
│ ├── newfs_msdos
│ ├── nghttp2
│ ├── ninja
│ ├── node
│ ├── ntfs-3g
│ ├── openGLES
│ ├── openSLES
│ ├── opencl-headers
│ ├── openh264
│ ├── openmax
│ ├── openssl
│ ├── optimized-routines
│ ├── parse5
│ ├── pcre2
│ ├── pixman
│ ├── popt
│ ├── protobuf
│ ├── pulseaudio
│ ├── python
│ ├── qrcodegen
│ ├── quickjs
│ ├── re2
│ ├── selinux
│ ├── skia
│ ├── spirv-headers
│ ├── spirv-tools
│ ├── sqlite
│ ├── toybox
│ ├── typescript
│ ├── typescript_eslint
│ ├── tzdata
│ ├── unity
│ ├── vk-gl-cts
│ ├── vulkan-headers
│ ├── wayland-ivi-extension
│ ├── wayland-protocols_standard
│ ├── wayland_standard
│ ├── weex-loader
│ ├── weston
│ ├── wpa_supplicant
│ └── zlib
├── tools_previewer
└── vendor // 芯片组件部分
├── alientek
├── hihope
├── hisilicon
└── ohemu