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)安裝部署圖
審核編輯 黃宇
-
模型
+關(guān)注
關(guān)注
1文章
3243瀏覽量
48842 -
鴻蒙
+關(guān)注
關(guān)注
57文章
2352瀏覽量
42859 -
OpenHarmony
+關(guān)注
關(guān)注
25文章
3722瀏覽量
16321
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論