OpenHarmony驅(qū)動子系統(tǒng)采用C面向?qū)ο?a target="_blank">編程模型構(gòu)建,通過平臺解耦、內(nèi)核解耦,兼容不同內(nèi)核,提供了歸一化的驅(qū)動平臺底座,旨在為開發(fā)者提供更精準、更高效的開發(fā)環(huán)境,力求做到一次開發(fā),多系統(tǒng)部署。
為了縮減驅(qū)動開發(fā)者的驅(qū)動開發(fā)周期,降低三方設備驅(qū)動集成難度,OpenHarmony驅(qū)動子系統(tǒng)支持以下關(guān)鍵特性和能力。
- 彈性化的框架能力:
在傳統(tǒng)的驅(qū)動框架能力的基礎上,OpenHarmony驅(qū)動子系統(tǒng)通過構(gòu)建彈性化的框架能力,可支持在百K級別到百兆級容量的終端產(chǎn)品形態(tài)部署。 - 規(guī)范化的驅(qū)動接口:
定義了常見驅(qū)動接口,為驅(qū)動開發(fā)者和使用者提供豐富、穩(wěn)定接口,并和未來開放的面向手機、平板、智慧屏等設備驅(qū)動接口保持API兼容性。 - 組件化的驅(qū)動模型:
支持組件化的驅(qū)動模型,為開發(fā)者提供更精細化的驅(qū)動管理,開發(fā)者可以對驅(qū)動進行組件化拆分,使得驅(qū)動開發(fā)者可以更多關(guān)注驅(qū)動與硬件交互部分。
同時系統(tǒng)也預置了部分模板化的驅(qū)動模型組件,如網(wǎng)絡設備模型等。 - 歸一化的配置界面:
提供統(tǒng)一的配置界面,構(gòu)建跨平臺的配置轉(zhuǎn)換和生成工具,實現(xiàn)跨平臺的無縫切換
為了方便驅(qū)動開發(fā)者更易于開發(fā)OpenHarmony驅(qū)動程序,OpenHarmony驅(qū)動子系統(tǒng)在DevEco集成了驅(qū)動開發(fā)套件工具,支持驅(qū)動工程管理,驅(qū)動模板生成、配置管理等界面化的操作。
架構(gòu)
OpenHarmony驅(qū)動框架采用主從架構(gòu)設計模式,圍繞著框架、模型、能力庫和工具四個維度能力展開構(gòu)建。
圖 1 驅(qū)動架構(gòu)圖
- 驅(qū)動框架 -位于framework/core目錄
- 提供驅(qū)動框架能力,主要完成驅(qū)動加載和啟動功能。
- 通過對象管理器方式可實現(xiàn)驅(qū)動框架的彈性化部署和擴展。
- 驅(qū)動模型 - 位于framework/model目錄
- 提供了模型化驅(qū)動能力,如網(wǎng)絡設備模型。
- 驅(qū)動能力庫 - 位于framework/ability目錄
- 提供基礎驅(qū)動能力模型,如IO通信能力模型。
- 驅(qū)動工具 - 位于framework/tools目錄
- 提供HDI接口轉(zhuǎn)換、驅(qū)動配置編譯等工具。
- 驅(qū)動接口 - 位于lite/hdi目錄
- 提供規(guī)范化的驅(qū)動接口。
- Support - 位于framework/support目錄
- 提供規(guī)范化的平臺驅(qū)動接口和系統(tǒng)接口抽象能力。
使用
圖 2 驅(qū)動框架交互流程
驅(qū)動框架完成大部分驅(qū)動加載的動作,用戶只需注冊自己所需的接口和配置,然后驅(qū)動框架就會解析配置的內(nèi)容,完成驅(qū)動加載和初始化動作。
開發(fā)者基于HDF驅(qū)動框架開發(fā)的驅(qū)動主要包含三大部分:
1、驅(qū)動程序部分 - 完成驅(qū)動的功能邏輯。
2、驅(qū)動配置信息 - 指示驅(qū)動的加載信息內(nèi)容。
3、驅(qū)動資源配置 - 配置驅(qū)動的硬件配置信息。
驅(qū)動程序主要是完成驅(qū)動功能的開發(fā)部分:
對于開發(fā)者首先看到的是驅(qū)動入口部分,驅(qū)動入口部分通過DriverEntry對其進行描述。
其中主要包含bind, init 和release三個接口。
struct HdfDriverEntry g_deviceSample = {
.moduleVersion = 1,
.moduleName = "sample_driver",
.Bind = SampleDriverBind,
.Init = SampleDriverInit,
.Release = SampleDriverRelease,
};
Bind接口描述:該接口的作用主要是完成驅(qū)動設備和設備服務接口的bind動作。
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接口描述:當框架完成設備綁定動作后,就開始調(diào)用驅(qū)動初始化接口,當初始化成功后,驅(qū)動框架根據(jù)配置文件決定是否對外創(chuàng)建設備服務接口,還是只是對當前服務接口可見。如果Init初始化失敗的話,驅(qū)動框架就會主動釋放創(chuàng)建的設備接口等信息。
int32_t SampleDriverInit(struct HdfDeviceObject *deviceObject)
{
// TODO: Init hardware or other resources here.
return HDF_SUCCESS;
}
Release接口描述:當用戶需要卸載驅(qū)動時,驅(qū)動框架先通過該接口通知驅(qū)動程序釋放資源。然后在執(zhí)行其他內(nèi)部資源釋放。
void SampleDriverRelease(struct HdfDeviceObject *deviceObject)
{
// Release all resources.
return;
}
安裝
OpenHarmony驅(qū)動主要部署在內(nèi)核態(tài),當前主要采用靜態(tài)鏈接方式,隨內(nèi)核子系統(tǒng)編譯和系統(tǒng)鏡像打包。
圖 3 驅(qū)動安裝部署圖
審核編輯 黃宇
-
模型
+關(guān)注
關(guān)注
1文章
3226瀏覽量
48807 -
鴻蒙
+關(guān)注
關(guān)注
57文章
2339瀏覽量
42805 -
OpenHarmony
+關(guān)注
關(guān)注
25文章
3713瀏覽量
16254
發(fā)布評論請先 登錄
相關(guān)推薦
評論