在HDF驅動框架中,HdfDriverEntry對象被用來描述一個驅動實現 。
編寫一個簡單的驅動,首先需要實現驅動程序 (Driver Entry)入口中的三個主要接口:
■ Bind接口:
實現驅動接口實例化綁定,如果需要發布驅動接口,會在驅動加載過程中被調用,實例化該接口的驅動服務并和DeviceObject綁定 。
■ Init接口:
實現驅動的初始化,返回錯誤將中止驅動加載流程 。
■ Release接口:

實現驅動的卸載,在該接口中釋放驅動實例的軟硬件資源 。
3.2 導出驅動程序入口符號
實現驅動程序初始化后,需要將驅動程序入口通過驅動聲明宏導出,這樣驅動框架才能在啟動時識別到驅動程序的存在,驅動才能被加載:

下面是實現原理:

圖4 Driver Entry內存分布
可以看到HDF_INIT宏是定義了一個“驅動模塊名 HdfEntry”的符號放到“.hdf.driver” 所在section,該符號指向的內存地址即為驅動程序入口結構體的地址 。這個特殊的section將用于開機啟動時查找設備驅動 。
3.3 添加設備配置
在設備對應的device_info.hcs添加sample驅動的配置:

【我來教你HarmonyOS工具鏈】在配置中定義的device將在加載過程中產生一個設備實例,通過moduleName字段指定設備對應的驅動名稱,從而將設備與驅動關聯起來 。其中,設備與驅動可以是一對多的關系,即可以實現一個驅動支持多個同類型設備 。
3.4 驅動啟動過程
我們添加的驅動是如何被執行的呢?簡單來說,在系統啟動時,驅動框架先啟動,通過解析配置文件獲取到設備列表,通過讀取“.hdf.driver”段讀取到驅動程序(Driver Entry)列表,然后遍歷設備列表與驅動程序列表進行匹配,并加載匹配成功的驅動 。
驅動框架有兩大核心管理者:
● DeviceManager:負責設備的管理,包括設備加載、卸載和查詢等設備相關功能 。
● DeviceServiceManager:負責管理設備發布的接口服務,提供接口服務的發布和查詢等功能 。
驅動加載主要由DeviceManager主導,首先DeviceManager要解析配置文件中的Host列表,根據Host列表中的信息來實例化對應的Host對象 。Host解析配置文件獲取到關聯的設備列表,遍歷設備列表去獲取與之匹配的驅動程序名稱,然后基于驅動程序名稱遍歷前面提到的“.hdf.driver” section獲得驅動程序地址 。
下面介紹具體過程 。
3.4.1 獲取設備列表

圖5 設備列表結構
配置文本編譯后會變成二進制格式的配置文件,其中設備相關信息被存放在一個用“hdf_manager”標記的device_info配置塊中,host的內容以塊的形式在device_info塊中依次排列,host塊中記錄了host名稱、啟動優先級和設備列表信息 。設備信息中的moduleName字段將用于和驅動程序入口中的moduleName進行匹配,從而為設備匹配到正確的驅動程序 。
3.4.2 獲取驅動程序列表

圖6 驅動程序(DriverEntry)內存布局
HDF驅動框架通過驅動程序入口符號的地址集中存放到一個特殊的section來實現對驅動的索引,這個section的開頭和末尾插入了_hdf_drivers_start、_hdf_drivers_end兩個特殊符號,用于標記這個section的范圍,兩個特殊符號之間的數據即為驅動實現指針 。
推薦閱讀
- win10任務欄透明設置不了 我來分享win10任務欄透明怎么設置
- win10不能輸入怎么辦 小編教你Win10鍵盤無法輸入怎么辦
- excel表格導入CAD 我來分享怎么把Excel表格導入CAD中
- win10電腦時不時卡頓 小編教你Win10時不時卡頓怎么辦
- 我來教你電腦怎么連接打印機步驟
- 我來分享電腦出現應用程序錯誤怎么修復
- 關閉win10自帶殺毒軟件的工具 我來教你怎么關閉win10自帶殺毒軟件
- 我來分享電腦無法刪除文件怎么辦
- 我來分享查看自己電腦的型號方法
- 我來教你2021年5月15日支付寶螞蟻莊園答案公布!螞蟻莊園小課堂5.15今日最新答案
