本文目的:梳理HarmonyOS源碼目錄結構,介紹重要目錄包含的內容與做用,便於學習開發過程有全局觀,有針對性的研讀開發。git
HarmonyOS源碼文件之多,想要短期內研讀完成是比較困難的。對於咱們剛剛學習此操做系統的開發來講,若是一個個目錄去研讀代碼,須要花費大量的時間。本文從框架上簡單解析HarmonyOS的目錄結構,讓開發者有針對性的研究它。web
下圖將HarmonyOS源碼的一級目錄經過軟件層進行了簡單區分,能夠結合HarmonyOS架構圖一塊兒從總體要認識HarmonyOS目錄結構。算法
HarmonyOS架構圖中表述的應用框架層和系統服務層,均可以理解爲Farmwork層,是Harmony最重要,也是最核心的部分。bootstrap
接着談談咱們對每一個目錄的簡單認識:安全
applications
從字面上解讀,主要存放用戶的應用程序,或是是HarmonyOS 預置的系統應用程序。數據結構
applications
|
|——sample //提供Hi3516/Hi3518/Hi3861基礎應用,這些應用應用預置設備中
|
|——camera // 主要說明Hi35xx AI Camera的基礎應用
| |
| |——app // 此目錄爲用戶本身開發的目錄,能夠經過該目錄下的BUILD.gn文件適配是否要預置到系統中
| |——communication // 通話模塊(hostapd wpa_cli wpa_supplicant)
| |——example // 示例模塊
| |——hap // 預置的app,HarmonyOS 中的hap對應Android中的app
| |——media // 視頻模塊實例
|——wifi-iot
|
——app // 此目錄爲用戶本身開發的目錄,能夠經過該目錄下的BUILD.gn文件適配是否
要預置到系統中(建議IoT開發預置led_example,便於開箱檢查產品)架構
對應的代碼倉包含有:app
applications/sample/camera: https://gitee.com/openharmony/applications_sample_camera框架
applications/sample/wifi-iot:https://gitee.com/openharmony/applications_sample_wifi_iot/iview
base
HarmonyOS Framework基礎能力集合,定位於大多數設備開發都須要能力模塊,目前提供了全球化、DFX、安全、系統啓動等模塊
base
|
|——global // 全球化模塊,做爲設備的基礎能力模塊,固然也可裁剪掉
| |
| |——frameworks // 全球化資源調度模塊
| |——interfaces // 全球化資源調度系統間開放APIs
|——hiviewdfx // DFX模塊
| |
| |——frameworks
| | |
| | |——ddrdump_lite // 輕量級設備 Dump信息存儲模塊,目前暫時沒有內容
| | |——hievent_lite // 輕量級設備DFX-MCU/CPU事件記錄模塊
| | |——hilog_lite // 輕量級設備DFX-MCU/CPU日誌模塊
| |——interfaces
| | |
| | |——innerkits // DFX模塊(日誌、事件)內部接口
| | |——kits // DFX模塊(日誌、事件)APIs
| |——services // DFX-MUC框架/日誌服務功能模塊Services
| |——utils // DFX-MCU基礎組件
|——iot_hardware // IoT外設能力模塊(GPIO/I2C/SPI/AD/DA等)
| |
| |——frameworks
| | |
| | ——wifiiot_lite // IoT外設模塊實現(包含.c文件)
| |——hals
| | |
| | ——wifiiot_lite // HAL adapter 接口(爲frameworks與驅動層提供適配)
| |——interfaces
| |
| ——kits // IoT外設控制模塊接口,與frameworks/wifiiot_lite配合
|——security
| |
| |——frameworks
| | |
| | |——app_verify // hap包簽名校驗模塊
| | |——crypto_lite // 加解密模塊
| | |——hichainsdk_lite // 設備認證模塊
| | |——huks_lite // 祕鑰與證書管理模塊
| | |——secure_os // libteec庫函數實現,提供TEE Client APIs
| |——interfaces
| | |
| | |——innerkits // 內部接口目錄,與frameworks對應
| | |——kits // 模塊APIs(應用權限管理)
| |——services
| |
| |——iam_lite // 應用權限管理及IPC通訊鑑權服務
| |——secure_os // secure_os TEE代理服務
|——startup
|
|——frameworks
| |
| ——syspara_lite // 系統屬性模塊源文件(param_impl_hal-Cortex-M,param_impl_posix-Cortex-A)
|——hals
| |
| ——syspara_lite // 系統屬性模塊文文件
|——interfaces
| |
| ——kits // 系統屬性模塊對外APIs
|——services
|
|——appspawn_lite // 應用孵化模塊
|——bootstrap_lite // 啓動服務模塊
|——init_lite // 啓動引導模塊
interfaces提供內外部APIs
frameworks提供接口實現的源代碼;
hals:HAL adapter 接口(爲frameworks與驅動層提供適配)
services:經過服務管理模塊
Foundtion
Foundtion的中文意義爲基礎、底座等,這裏的基礎與Base目錄的基礎怎麼區分,有什麼不一樣呢。下表爲HarmonyOS官方幫助資料中的描述。
我的理解Foundtion提供了更爲高級的能力模塊,此類模塊也是HarmonyOS 的核心競爭力模塊,例如分佈式調度、分佈式通訊等等。Base和Foundtion之間沒有絕對的界限,由於對於低端設備部分Base能力能夠也要裁剪,例如:IoT設備中可能不須要全球化;對於高端設備Base和Foundtion的模塊都屬於基礎能力。
foundation
|
|——aafwk // Ability開發框架接口、Ability管理服務
| |——frameworks
| | |——ability_lite // Ability開發框架的源代碼
| | |——abilitymgr_lite // 管理AbilityKit與Ability管理服務通訊的客戶端代碼
| | |——want_lite // Ability之間交互的信息載體的實現代碼
| |——interfaces
| | |——innerkits //Ability管理服務爲其它子系統提供的接口
| | |——kits
| | | |——ability_lite// AbilityKit爲開發者提供的接口
| | | |——want_lite // Ability之間交互的信息載體的對外接口
| |——services // Ability管理服務
|——ace // JS應用開發框架,提供了一套跨平臺的類web應用開發框架
| |——frameworks
| | |——lite
| | |——examples // 示例代碼目錄
| | |——include // 對外暴露頭文件存放目錄
| | |——packages // 框架JS實現存放目錄
| | |——src // 源代碼存放目錄
| | |——targets // 各目標設備配置文件存放目錄
| | |——tools // 工具代碼存放目錄
| |——interfaces // JS應用框架APIs
| |——builtin
| |——async // JS應用框架異步接口
| |——base // 內存管理接口
| |——jsi // JS應用框架對外APIs
|——appexecfwk
| |——frameworks // 管理BundleKit與包管理服務通訊的客戶端代碼
| |——interfaces // BundleKit爲開發者提供的接口
| |——services // 包管理服務的實現代碼
| |——utils // 包管理服務實現中用到的工具性的代碼
|——communication // 分佈式通訊(https://gitee.com/openharmony/docs/blob/master/readme/分佈式通訊子系統README.md)
| |——frameworks
| | |——ipc_lite // 進程間通訊框架實現
| | |——wifi_lite // Wifi通訊框架(未實現)
| |——hals // hal適配層
| |——interfaces // 提供APIs
| | |——kits
| | |——ipc_lite // 進程間通訊APIs
| | |——softbus_lite// 軟總線APIs
| | |——wifi_lite // Wi-Fi通訊APIs
| |——services
| |——authmanager // 提供設備認證機制和設備知識庫管理
| |——discovery // 提供基於coap協議的設備發現機制
| |——os_adapter // OS適配管理
| |——trans_service // 提供認證和傳輸通道
|
|——distributedschedule // 分佈式調度
| |——interfaces
| | |——kits
| | | |——samgr_lite
| | | |——samgr // M核和A核系統服務框架APIs
| | | |——registry
| | | | //A核進程間服務調用APIs
| | | |——communication
| | | | // M核和A核進程內事件廣播服務APIS
| | |——innerkits // 內部APIs
| |——services
| |——dtbschedmgr_lite
| | // 分佈式調度服務管理
| |——safwk_lite // 用於samgr啓動,初始化已經註冊的Services
| |——samgr_lite
| |——communication
| | // M核和A核進程內事件廣播服務
| |——samgr
| | |——adapter // POSIX和CMSIS接口適配層,適配屏蔽A核M核接口差別
| |——samgr_client// A核進程間服務調用的註冊與發現
| |——samgr_endpoint
| | // A核IPC通訊消息收發包管理
| |——samgr_server// A核進程間服務調用的IPC地址管理和訪問控制
|——graphic // 圖像模塊
| |
| |——frameworks // 圖像目錄框架實現
| | |——surface // Surface共享內存
| | |——ui // UI模塊(UI控件、動畫、字體以及DFX等)
| |——hals // hal適配層
| |——interfaces
| | |——ui // UI模塊對外接口
| | |——utils // 圖形子系統公共庫
| |——services
| | |——ims // 輸入管理服務(輸入事件處理、分發)
| | |——wms // 窗口管理服務(窗口的建立、管理和合成)
| |——utils // 圖形子系統公共庫
|——multimedia // 多媒體
|
|——frameworks // 內部框架實現,包括audio,camera,player.recorder
|——interfaces // 多媒體APIs
|——services // 多媒體接口底層服務實現與管理
|——utils // 多媒體接口公共模塊實現
|——hals // 多媒體HAL adapter,爲驅動或硬件提供接口,適配framework
utils
公共基礎庫存放OpenHarmony通用的基礎組件。這些基礎組件可被OpenHarmony各業務子系統及上層應用所使用。
公共基礎庫在不一樣平臺上提供的能力:
LiteOS-M內核(Hi3861平臺):KV存儲、文件操做、定時器、IoT外設控制
LiteOS-A內核(Hi351六、Hi3518平臺):KV存儲、定時器、ACE JS API
utils
|——native
|——lite
|——file // 文件APIs實現
|——hals // hals(適配文件操做硬件抽象層)
|——include // 公共基礎庫頭文件
|——js // ACE JS APIs
|——kal // KAL timer
|——kv_store // KV存儲實現
|——timer_task // Timer實現
至此,完成應用框架目錄的梳理,接着梳理內核層的目錄。
kernel
kernel目錄目前包含了Liteos-a/Liteos-m,隨着發展也許harmonyOS會支持類Linux的重量級設備。當前的內核主要面向IoT領域,包括了線程、進程、內存管理等基本功能。
參考:
https://gitee.com/openharmony/docs/blob/master/readme/內核子系統README.md
內核實用指導:https://gitee.com/openharmony/docs/blob/master/kernel/Readme-CN.md
drivers
驅動,就是一個完成軟件與硬件通訊程序的。harmony旨在經過平臺解耦、內核解耦,兼容不一樣內核,提供了歸一化的驅動平臺底座,爲開發者提供更精準、更高效的開發環境,力求作到一次開發,多系統部署。
驅動代碼的目錄結構以下:
driver
|——HDF // harmonyOS 驅動框架
| |——frameworks // 完成驅動框架、模型、能力庫的實現
| | |——ability // 提供驅動開發的功能能力支持,如消息模型庫等
| | |——core // HDF(harmonyOS 驅動框架)核心代碼
| | | |——host // 驅動宿主環境框架功能
| | | |——manger // 框架管理模塊
| | | |——shared // host和manager共享模塊代碼
| | |——include // HDF相關接口的頭文件
| | |——model // 驅動通用框架模型
| | |——support // 驅動使用的系統接口資源和硬件資源(已經進行平臺解耦),即platformDriver
| | |——tools // 驅動能力工具庫(hc-gen)
| | |——utils // 驅動相關基礎數據結構和算法等
| |——lite
| |——adapter // 實現對內核操做接口適配
| |——hdi // 驅動程序接口
| |——include // 輕量設備的HDF頭文件
| |——manager // 驅動設備管理
| |——model // 輕量設備的驅動模型
| |——posix // 輕量設備與系統相關的接口適配
| |——tools // 驅動能力工具庫
|——liteos
|——hievent // Liteos事件驅動
|——include
|——mem // Liteos內存管理驅動
|——random // Liteos 隨機數驅動
|——tzdriver // TrustZone驅動
|——video // video驅動
注意:因爲網頁版格式問題,你們可下載附件,更清晰的查看源碼目錄解析。
聲明:本人中的內容若有不正確之處,請社區大佬及時指正,謝謝。