




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
6.1.3HDF驅動開發步驟通過本節學習,您可以:了解HDF驅動開發步驟HDF驅動開發步驟HDF框架的驅動開發的組成部分:驅動實現、驅動編譯腳本編寫和驅動配置。1.驅動實現:驅動實現包含驅動業務代碼實現和驅動入口注冊,具體寫法如下:(1)驅動業務代碼模板
#include"hdf_device_desc.h"http://HDF框架對驅動開發相關能力接口的頭文件
#include"hdf_log.h"http://HDF框架提供的日志接口頭文件
#defineHDF_LOG_TAGtest_driver//打印日志所包含的標簽,如果不定義則用默認定義的HDF_TAG標簽。
//將驅動對外提供的服務能力接口綁定到HDF框架。
int32_tHdfTestDriverBind(structHdfDeviceObject*deviceObject){
HDF_LOGD("Testdriverbindsuccess");
returnHDF_SUCCESS;
}
//驅動自身業務初始化的接口
int32_tHdfTestDriverInit(structHdfDeviceObject*deviceObject){
HDF_LOGD("TestdriverInitsuccess");
returnHDF_SUCCESS;
}
//驅動資源釋放的接口
voidHdfTestDriverRelease(structHdfDeviceObject*deviceObject){
HDF_LOGD("Testdriverreleasesuccess");
return;
}HDF驅動開發步驟(2)驅動入口注冊到HDF框架
structHdfDriverEntryg_testDriverEntry={
.moduleVersion=1,
.moduleName="test_driver",
.Bind=HdfTestDriverBind,
.Init=HdfTestDriverInit,
.Release=HdfTestDriverRelease,
};
//調用HDF_INIT將驅動入口注冊到HDF框架中。在加載驅動時HDF框架會先調用Bind函數,再調用Init函數加載該驅動;當Init調用異常時,HDF框架會調用Release釋放驅動資源并退出。
HDF_INIT(g_testDriverEntry);驅動注冊,就是實例化驅動入口,驅動入口必須為HdfDriverEntry(在hdf_device_desc.h中定義)類型的全局變量,且moduleName要和device_info.hcs中保持一致。HDF框架會將所有加載的驅動的HdfDriverEntry對象首地址匯總,形成一個類似數組的段地址空間,方便上層調用。HDF驅動開發步驟2.驅動編譯腳本編寫添加模塊BUILD.gn把新增模塊的BUILD.gn所在的目錄添加到上一級BUILD.gn文件中
import("http://drivers/adapter/khdf/liteos/hdf.gni")
hdf_driver("hdf_led"){
sources=[
"led.c",#此處為點燈實驗,根據實驗進行修改
]
include_dirs=[
"http://device/st/drivers/module_driver/Module_Common/inc/",
]}
group("drivers"){
deps=[
"led",#新增模塊BUILD.gn的名稱,根據實驗進行修改
]
}HDF驅動開發步驟3.驅動配置驅動配置包含兩部分:HDF框架定義的驅動設備描述和驅動的私有配置信息。(1)驅動設備描述HDF框架加載驅動所需要的信息來源于HDF框架定義的驅動設備描述,因此基于HDF框架開發的驅動必須要在HDF框架定義的device_info.hcs配置文件中添加對應的設備描述。
root{
device_info{
match_attr="hdf_manager";HDF驅動開發步驟
templatehost{//host模板,繼承該模板的節點(如下test_host)如果使用模板中的默認值,則節點字段可以缺省。
hostName="";
priority=100;
templatedevice{
templatedeviceNode{
policy=0;
priority=100;
preload=0;
permission=0664;
moduleName="";
serviceName="";
deviceMatchAttr="";
}
}
}HDF驅動開發步驟
platform::host{
hostName="platform_host";//host名稱,host節點是用來存放某一類驅動的容器。
priority=50;//host啟動優先級(0-200),值越大優先級越低,建議默認配100,優先級相同則不保證host的加載順序。
device_led::device{//led設備節點
device0::deviceNode{//led驅動的DeviceNode節點
policy=2;//policy字段是驅動服務發布的策略
priority=200;//驅動啟動優先級(0-200),值越大優先級越低,建議默認配100,優先級相同則不保證device的加載順序
preload=0;//驅動按需加載字段
permission=0777;//驅動創建設備節點權限
moduleName="HDF_LED";//驅動名稱,該字段的值必須和驅動入口結構的moduleName值一致
serviceName="hdf_led";//驅動對外發布服務的名稱,必須唯一
deviceMatchAttr="st_stm32mp157_led";//驅動私有數據匹配的關鍵字,必須和驅動私有數據配置表中的match_attr值相等
}
}
}
}}HDF驅動開發步驟(2)驅動私有配置信息如果驅動有私有配置,則可以添加一個驅動的配置文件,用來填寫一些驅動的默認配置信息。HDF框架在加載驅動的時候,會將對應的配置信息獲取并保存在HdfDeviceObject中的property里面,通過Bind和Init傳遞給驅動。驅動的配置信息示例如下:配置信息定義之后,需要將該配置文件添加到板級配置入口文件hdf.hcs,示例如下:
root{
LedDriverConfig{
led_gpio
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 福建生物工程職業技術學院《傳播倫理與法規》2023-2024學年第二學期期末試卷
- 甘肅財貿職業學院《Python程序設計實驗》2023-2024學年第二學期期末試卷
- 云南醫藥健康職業學院《組織戰略與行為學》2023-2024學年第二學期期末試卷
- 山西醫科大學晉祠學院《電路分析基礎實驗》2023-2024學年第二學期期末試卷
- 北海康養職業學院《舞臺表演基礎》2023-2024學年第二學期期末試卷
- 2024年汽車座套項目資金需求報告代可行性研究報告
- 糖尿病飲食健康教育
- 2025年貴州六枝經濟開發區溢鑫投資開發有限公司招聘筆試參考題庫含答案解析
- 2025年云南玉溪市市政開發建設有限公司招聘筆試參考題庫附帶答案詳解
- 2025年安徽省六安東城經濟建設有限公司招聘筆試參考題庫附帶答案詳解
- 美國藥品批發行業發展歷程譯稿
- 十字頭零件的加工工藝規程及精車外圓工裝夾具畢業設計(機械CAD圖紙)
- 含公式新財務報表模板 包括:三大報表、所有者權益變動表、和相關指標計算
- 移動通信終端NS_IOT測試解析
- 臨床免疫學檢驗技術(共64頁).ppt
- 股東大會律師見證的法律意見書范本
- 干灰庫高大模板支撐系統施工專項方案
- 2015通用安裝定額解釋完整版
- 乙型肝炎病毒表面抗體診斷試劑盒酶聯免疫法說明書
- 乙型肝炎病毒e抗體診斷試劑盒(酶聯免疫法)說明書
- AQL抽樣檢驗標準
評論
0/150
提交評論