HarmonyOS源碼目錄結構的理解

本文目的:梳理HarmonyOS源碼目錄結構,介紹重要目錄包含的內容與做用,便於學習開發過程有全局觀,有針對性的研讀開發。git

HarmonyOS源碼文件之多,想要短期內研讀完成是比較困難的。對於咱們剛剛學習此操做系統的開發來講,若是一個個目錄去研讀代碼,須要花費大量的時間。本文從框架上簡單解析HarmonyOS的目錄結構,讓開發者有針對性的研究它。web

下圖將HarmonyOS源碼的一級目錄經過軟件層進行了簡單區分,能夠結合HarmonyOS架構圖一塊兒從總體要認識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官方幫助資料中的描述。

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領域,包括了線程、進程、內存管理等基本功能。

HarmonyOS源碼目錄結構的理解
參考:

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驅動

注意:因爲網頁版格式問題,你們可下載附件,更清晰的查看源碼目錄解析。

聲明:本人中的內容若有不正確之處,請社區大佬及時指正,謝謝。

相關文章
相關標籤/搜索