0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

鴻蒙開發(fā)學(xué)習(xí):【驅(qū)動(dòng)子系統(tǒng)】

jf_46214456 ? 來源:jf_46214456 ? 作者:jf_46214456 ? 2024-03-17 22:05 ? 次閱讀

OpenHarmony驅(qū)動(dòng)子系統(tǒng)采用C面向?qū)ο?a target="_blank">編程模型構(gòu)建,通過平臺(tái)解耦、內(nèi)核解耦,兼容不同內(nèi)核,提供了歸一化的驅(qū)動(dòng)平臺(tái)底座,旨在為開發(fā)者提供更精準(zhǔn)、更高效的開發(fā)環(huán)境,力求做到一次開發(fā),多系統(tǒng)部署。

為了縮減驅(qū)動(dòng)開發(fā)者的驅(qū)動(dòng)開發(fā)周期,降低三方設(shè)備驅(qū)動(dòng)集成難度,OpenHarmony驅(qū)動(dòng)子系統(tǒng)支持以下關(guān)鍵特性和能力。

  • 彈性化的框架能力:
    在傳統(tǒng)的驅(qū)動(dòng)框架能力的基礎(chǔ)上,OpenHarmony驅(qū)動(dòng)子系統(tǒng)通過構(gòu)建彈性化的框架能力,可支持在百K級(jí)別到百兆級(jí)容量的終端產(chǎn)品形態(tài)部署。
  • 規(guī)范化的驅(qū)動(dòng)接口
    定義了常見驅(qū)動(dòng)接口,為驅(qū)動(dòng)開發(fā)者和使用者提供豐富、穩(wěn)定接口,并和未來開放的面向手機(jī)、平板、智慧屏等設(shè)備驅(qū)動(dòng)接口保持API兼容性。
  • 組件化的驅(qū)動(dòng)模型:
    支持組件化的驅(qū)動(dòng)模型,為開發(fā)者提供更精細(xì)化的驅(qū)動(dòng)管理,開發(fā)者可以對(duì)驅(qū)動(dòng)進(jìn)行組件化拆分,使得驅(qū)動(dòng)開發(fā)者可以更多關(guān)注驅(qū)動(dòng)與硬件交互部分。
    同時(shí)系統(tǒng)也預(yù)置了部分模板化的驅(qū)動(dòng)模型組件,如網(wǎng)絡(luò)設(shè)備模型等。
  • 歸一化的配置界面:
    提供統(tǒng)一的配置界面,構(gòu)建跨平臺(tái)的配置轉(zhuǎn)換和生成工具,實(shí)現(xiàn)跨平臺(tái)的無縫切換

為了方便驅(qū)動(dòng)開發(fā)者更易于開發(fā)OpenHarmony驅(qū)動(dòng)程序,OpenHarmony驅(qū)動(dòng)子系統(tǒng)在DevEco集成了驅(qū)動(dòng)開發(fā)套件工具,支持驅(qū)動(dòng)工程管理,驅(qū)動(dòng)模板生成、配置管理等界面化的操作。

架構(gòu)

OpenHarmony驅(qū)動(dòng)框架采用主從架構(gòu)設(shè)計(jì)模式,圍繞著框架、模型、能力庫(kù)和工具四個(gè)維度能力展開構(gòu)建。

圖 1 驅(qū)動(dòng)架構(gòu)圖

  • 驅(qū)動(dòng)框架 -位于framework/core目錄
    • 提供驅(qū)動(dòng)框架能力,主要完成驅(qū)動(dòng)加載和啟動(dòng)功能。
    • 通過對(duì)象管理器方式可實(shí)現(xiàn)驅(qū)動(dòng)框架的彈性化部署和擴(kuò)展。
  • 驅(qū)動(dòng)模型 - 位于framework/model目錄
    • 提供了模型化驅(qū)動(dòng)能力,如網(wǎng)絡(luò)設(shè)備模型。
  • 驅(qū)動(dòng)能力庫(kù) - 位于framework/ability目錄
    • 提供基礎(chǔ)驅(qū)動(dòng)能力模型,如IO通信能力模型。
  • 驅(qū)動(dòng)工具 - 位于framework/tools目錄
    • 提供HDI接口轉(zhuǎn)換、驅(qū)動(dòng)配置編譯等工具。
  • 驅(qū)動(dòng)接口 - 位于lite/hdi目錄
    • 提供規(guī)范化的驅(qū)動(dòng)接口。
  • Support - 位于framework/support目錄
    • 提供規(guī)范化的平臺(tái)驅(qū)動(dòng)接口和系統(tǒng)接口抽象能力。

使用

圖 2 驅(qū)動(dòng)框架交互流程

驅(qū)動(dòng)框架完成大部分驅(qū)動(dòng)加載的動(dòng)作,用戶只需注冊(cè)自己所需的接口和配置,然后驅(qū)動(dòng)框架就會(huì)解析配置的內(nèi)容,完成驅(qū)動(dòng)加載和初始化動(dòng)作。

開發(fā)者基于HDF驅(qū)動(dòng)框架開發(fā)的驅(qū)動(dòng)主要包含三大部分:

1、驅(qū)動(dòng)程序部分 - 完成驅(qū)動(dòng)的功能邏輯。

2、驅(qū)動(dòng)配置信息 - 指示驅(qū)動(dòng)的加載信息內(nèi)容。

3、驅(qū)動(dòng)資源配置 - 配置驅(qū)動(dòng)的硬件配置信息。

驅(qū)動(dòng)程序主要是完成驅(qū)動(dòng)功能的開發(fā)部分:

對(duì)于開發(fā)者首先看到的是驅(qū)動(dòng)入口部分,驅(qū)動(dòng)入口部分通過DriverEntry對(duì)其進(jìn)行描述。

其中主要包含bind, init 和release三個(gè)接口。

struct HdfDriverEntry g_deviceSample = {
    .moduleVersion = 1,
    .moduleName = "sample_driver", 
    .Bind = SampleDriverBind,
    .Init = SampleDriverInit,
    .Release = SampleDriverRelease,
};

Bind接口描述:該接口的作用主要是完成驅(qū)動(dòng)設(shè)備和設(shè)備服務(wù)接口的bind動(dòng)作。

int32_t SampleDriverBind(struct HdfDeviceObject *deviceObject)
{
    // TODO: Bind device service to device object.
    // And you can also initialize device resources here.
    return HDF_SUCCESS;
}

Init接口描述:當(dāng)框架完成設(shè)備綁定動(dòng)作后,就開始調(diào)用驅(qū)動(dòng)初始化接口,當(dāng)初始化成功后,驅(qū)動(dòng)框架根據(jù)配置文件決定是否對(duì)外創(chuàng)建設(shè)備服務(wù)接口,還是只是對(duì)當(dāng)前服務(wù)接口可見。如果Init初始化失敗的話,驅(qū)動(dòng)框架就會(huì)主動(dòng)釋放創(chuàng)建的設(shè)備接口等信息。

int32_t SampleDriverInit(struct HdfDeviceObject *deviceObject)
{
    // TODO: Init hardware or other resources here.
    return HDF_SUCCESS;
}

Release接口描述:當(dāng)用戶需要卸載驅(qū)動(dòng)時(shí),驅(qū)動(dòng)框架先通過該接口通知驅(qū)動(dòng)程序釋放資源。然后在執(zhí)行其他內(nèi)部資源釋放。

void SampleDriverRelease(struct HdfDeviceObject *deviceObject)
{
    // Release all resources.
    return;
}

安裝

OpenHarmony驅(qū)動(dòng)主要部署在內(nèi)核態(tài),當(dāng)前主要采用靜態(tài)鏈接方式,隨內(nèi)核子系統(tǒng)編譯和系統(tǒng)鏡像打包。

圖 3 驅(qū)動(dòng)安裝部署圖

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 模型
    +關(guān)注

    關(guān)注

    1

    文章

    3243

    瀏覽量

    48842
  • 鴻蒙
    +關(guān)注

    關(guān)注

    57

    文章

    2352

    瀏覽量

    42859
  • OpenHarmony
    +關(guān)注

    關(guān)注

    25

    文章

    3722

    瀏覽量

    16321
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    盤點(diǎn)那些硬件+項(xiàng)目學(xué)習(xí)套件:Hi3861鴻蒙開發(fā)板及入門常見問題解答

    、源碼、視頻課程,可以進(jìn)行單片機(jī)入門、電機(jī)控制基礎(chǔ)、總線通訊-協(xié)議學(xué)習(xí)。Hi3861鴻蒙+STM32單片機(jī)的協(xié)作開發(fā):Hi3861鴻蒙開發(fā)
    發(fā)表于 02-01 16:55

    【連載】信盈達(dá)實(shí)力大佬講師帶你學(xué)習(xí)鴻蒙系統(tǒng)移植和驅(qū)動(dòng)開發(fā)!

    第一個(gè)應(yīng)用程序和第一個(gè)驅(qū)動(dòng)程序的實(shí)現(xiàn)?!拘庞_(dá)】鴻蒙操作系統(tǒng)移植--1、開發(fā)板介紹【信盈達(dá)】鴻蒙操作系統(tǒng)
    發(fā)表于 09-11 10:25

    鴻蒙OS驅(qū)動(dòng)開發(fā)

    這篇文章主要帶領(lǐng)大家學(xué)習(xí)鴻蒙系統(tǒng)驅(qū)動(dòng)開發(fā),本文包含以下知識(shí)點(diǎn):1、開發(fā)Hi3516第一個(gè)
    發(fā)表于 09-11 14:42

    首批HarmonyOS系統(tǒng)課程開發(fā)者為您詳解鴻蒙系統(tǒng)開發(fā)與應(yīng)用

    信盈達(dá)實(shí)力大佬講師帶你學(xué)習(xí)鴻蒙系統(tǒng)移植和驅(qū)動(dòng)開發(fā)!講師介紹:胡智元,男、江西理工大學(xué)碩士,資深嵌入式ARM、Linux研發(fā)工程師。具有多年嵌
    發(fā)表于 09-14 14:26

    【課程連載】高級(jí)硬件工程師張飛帶你學(xué)習(xí)鴻蒙驅(qū)動(dòng)開發(fā)系統(tǒng)燒錄

    ,去測(cè)試鴻蒙操作系統(tǒng)的wifi驅(qū)動(dòng)是否安裝成功。實(shí)現(xiàn)手機(jī)能夠連上開發(fā)板網(wǎng)卡生成的熱點(diǎn),及開發(fā)板連上指定的熱點(diǎn)。5、從串口、網(wǎng)口、USB的方式
    發(fā)表于 09-17 09:36

    【HarmonyOS IPC 試用連載 】鴻蒙系統(tǒng)初步了解

    服務(wù)和用戶服務(wù)資源都是在同一個(gè)空間內(nèi)實(shí)現(xiàn),運(yùn)行效率比較高,不過一個(gè)服務(wù)資源的崩潰,會(huì)導(dǎo)致整個(gè)內(nèi)核的崩潰。鴻蒙內(nèi)核分為內(nèi)核子系統(tǒng),驅(qū)動(dòng)子系統(tǒng),相互隔離和分開。
    發(fā)表于 01-04 17:25

    鴻蒙開發(fā)AI應(yīng)用(匯總)連載中

    Ubuntu、配置共享目錄和在Win10上映射網(wǎng)絡(luò)驅(qū)動(dòng)器,操作系統(tǒng)相關(guān)的配置...3. 用鴻蒙開發(fā)AI應(yīng)用(三)軟件篇本篇介紹了DevEco Device Tool的配置、
    發(fā)表于 01-13 15:03

    鴻蒙應(yīng)用開發(fā)基礎(chǔ)術(shù)語(yǔ)學(xué)習(xí) 輕應(yīng)用

    。我們計(jì)劃后續(xù)深度開發(fā),作為鴻蒙操作系統(tǒng)上的獨(dú)特的開發(fā)學(xué)習(xí)平臺(tái)與方式。通過輕應(yīng)用,帶點(diǎn)游戲娛樂性質(zhì)的方式,廣泛地傳播
    發(fā)表于 05-19 18:33

    鴻蒙驅(qū)動(dòng)子系統(tǒng)資料匯總(一)

    1、輕量系統(tǒng)驅(qū)動(dòng)開發(fā)查看 //drivers/adapter/khdf/,這個(gè)目錄下有一個(gè) liteos_m 子目錄,進(jìn)入子目錄查看 readme 文檔: 該倉(cāng)主要存放 OpenHarmony
    發(fā)表于 03-29 14:53

    鴻蒙驅(qū)動(dòng)子系統(tǒng)資料匯總(二)

    3、驅(qū)動(dòng)相關(guān)模塊的編譯打開并查看 //vendor/hisilicon/hispark_taurus/config.json, 這是小型系統(tǒng) Hi3516 開發(fā)板的產(chǎn)品配置表,仔細(xì)查看與驅(qū)動(dòng)
    發(fā)表于 03-29 14:58

    鴻蒙驅(qū)動(dòng)子系統(tǒng)-1-輕量系統(tǒng)驅(qū)動(dòng)開發(fā)

    注:本系列文章基于LTS分支代碼(本地代碼根目錄B_LTS/),對(duì)鴻蒙系統(tǒng)的設(shè)備驅(qū)動(dòng)開發(fā)進(jìn)行學(xué)習(xí)、分析和總結(jié)。查看 //drivers/ad
    發(fā)表于 12-22 15:40

    要成為鴻蒙開發(fā)者,應(yīng)該學(xué)習(xí)哪些編程語(yǔ)言

    據(jù)了解,鴻蒙系統(tǒng)是基于Linux開發(fā)的,源碼是C語(yǔ)言。那么,作為一名開發(fā)者,如何幫助鴻蒙系統(tǒng)構(gòu)建
    的頭像 發(fā)表于 09-24 12:06 ?1.3w次閱讀

    鴻蒙系統(tǒng)是基于什么開發(fā)

    爭(zhēng)議,那么鴻蒙系統(tǒng)到底是基于什么開發(fā)的呢?下面小編就為大家?guī)?b class='flag-5'>鴻蒙系統(tǒng)是基于什么開發(fā)的答案。
    的頭像 發(fā)表于 07-05 17:12 ?1.2w次閱讀

    gpio和pinctrl子系統(tǒng)的關(guān)系與區(qū)別

    gpio 和 pinctrl 子系統(tǒng)在內(nèi)核里的使用率非常高,和嵌入式產(chǎn)品的關(guān)聯(lián)非常大。從這兩個(gè)子系統(tǒng)開始學(xué)習(xí)驅(qū)動(dòng)開發(fā)是個(gè)不錯(cuò)的入門選擇。
    的頭像 發(fā)表于 03-15 11:40 ?4967次閱讀

    迅為RK3568開發(fā)驅(qū)動(dòng)開發(fā)指南-輸入子系統(tǒng)

    迅為RK3568開發(fā)驅(qū)動(dòng)開發(fā)指南-輸入子系統(tǒng)
    的頭像 發(fā)表于 02-23 15:11 ?884次閱讀
    迅為RK3568<b class='flag-5'>開發(fā)</b>板<b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>開發(fā)</b>指南-輸入<b class='flag-5'>子系統(tǒng)</b>