《鴻蒙智能互聯(lián)設(shè)備開發(fā)(微課版)》 課件 6.1.3 HDF驅(qū)動開發(fā)步驟_第1頁
《鴻蒙智能互聯(lián)設(shè)備開發(fā)(微課版)》 課件 6.1.3 HDF驅(qū)動開發(fā)步驟_第2頁
《鴻蒙智能互聯(lián)設(shè)備開發(fā)(微課版)》 課件 6.1.3 HDF驅(qū)動開發(fā)步驟_第3頁
《鴻蒙智能互聯(lián)設(shè)備開發(fā)(微課版)》 課件 6.1.3 HDF驅(qū)動開發(fā)步驟_第4頁
《鴻蒙智能互聯(lián)設(shè)備開發(fā)(微課版)》 課件 6.1.3 HDF驅(qū)動開發(fā)步驟_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

6.1.3HDF驅(qū)動開發(fā)步驟通過本節(jié)學習,您可以:了解HDF驅(qū)動開發(fā)步驟HDF驅(qū)動開發(fā)步驟HDF框架的驅(qū)動開發(fā)的組成部分:驅(qū)動實現(xiàn)、驅(qū)動編譯腳本編寫和驅(qū)動配置。1.驅(qū)動實現(xiàn):驅(qū)動實現(xiàn)包含驅(qū)動業(yè)務(wù)代碼實現(xiàn)和驅(qū)動入口注冊,具體寫法如下:(1)驅(qū)動業(yè)務(wù)代碼模板

#include"hdf_device_desc.h"http://HDF框架對驅(qū)動開發(fā)相關(guān)能力接口的頭文件

#include"hdf_log.h"http://HDF框架提供的日志接口頭文件

#defineHDF_LOG_TAGtest_driver//打印日志所包含的標簽,如果不定義則用默認定義的HDF_TAG標簽。

//將驅(qū)動對外提供的服務(wù)能力接口綁定到HDF框架。

int32_tHdfTestDriverBind(structHdfDeviceObject*deviceObject){

HDF_LOGD("Testdriverbindsuccess");

returnHDF_SUCCESS;

}

//驅(qū)動自身業(yè)務(wù)初始化的接口

int32_tHdfTestDriverInit(structHdfDeviceObject*deviceObject){

HDF_LOGD("TestdriverInitsuccess");

returnHDF_SUCCESS;

}

//驅(qū)動資源釋放的接口

voidHdfTestDriverRelease(structHdfDeviceObject*deviceObject){

HDF_LOGD("Testdriverreleasesuccess");

return;

}HDF驅(qū)動開發(fā)步驟(2)驅(qū)動入口注冊到HDF框架

structHdfDriverEntryg_testDriverEntry={

.moduleVersion=1,

.moduleName="test_driver",

.Bind=HdfTestDriverBind,

.Init=HdfTestDriverInit,

.Release=HdfTestDriverRelease,

};

//調(diào)用HDF_INIT將驅(qū)動入口注冊到HDF框架中。在加載驅(qū)動時HDF框架會先調(diào)用Bind函數(shù),再調(diào)用Init函數(shù)加載該驅(qū)動;當Init調(diào)用異常時,HDF框架會調(diào)用Release釋放驅(qū)動資源并退出。

HDF_INIT(g_testDriverEntry);驅(qū)動注冊,就是實例化驅(qū)動入口,驅(qū)動入口必須為HdfDriverEntry(在hdf_device_desc.h中定義)類型的全局變量,且moduleName要和device_info.hcs中保持一致。HDF框架會將所有加載的驅(qū)動的HdfDriverEntry對象首地址匯總,形成一個類似數(shù)組的段地址空間,方便上層調(diào)用。HDF驅(qū)動開發(fā)步驟2.驅(qū)動編譯腳本編寫添加模塊BUILD.gn把新增模塊的BUILD.gn所在的目錄添加到上一級BUILD.gn文件中

import("http://drivers/adapter/khdf/liteos/hdf.gni")

hdf_driver("hdf_led"){

sources=[

"led.c",#此處為點燈實驗,根據(jù)實驗進行修改

]

include_dirs=[

"http://device/st/drivers/module_driver/Module_Common/inc/",

]}

group("drivers"){

deps=[

"led",#新增模塊BUILD.gn的名稱,根據(jù)實驗進行修改

]

}HDF驅(qū)動開發(fā)步驟3.驅(qū)動配置驅(qū)動配置包含兩部分:HDF框架定義的驅(qū)動設(shè)備描述和驅(qū)動的私有配置信息。(1)驅(qū)動設(shè)備描述HDF框架加載驅(qū)動所需要的信息來源于HDF框架定義的驅(qū)動設(shè)備描述,因此基于HDF框架開發(fā)的驅(qū)動必須要在HDF框架定義的device_info.hcs配置文件中添加對應(yīng)的設(shè)備描述。

root{

device_info{

match_attr="hdf_manager";HDF驅(qū)動開發(fā)步驟

templatehost{//host模板,繼承該模板的節(jié)點(如下test_host)如果使用模板中的默認值,則節(jié)點字段可以缺省。

hostName="";

priority=100;

templatedevice{

templatedeviceNode{

policy=0;

priority=100;

preload=0;

permission=0664;

moduleName="";

serviceName="";

deviceMatchAttr="";

}

}

}HDF驅(qū)動開發(fā)步驟

platform::host{

hostName="platform_host";//host名稱,host節(jié)點是用來存放某一類驅(qū)動的容器。

priority=50;//host啟動優(yōu)先級(0-200),值越大優(yōu)先級越低,建議默認配100,優(yōu)先級相同則不保證host的加載順序。

device_led::device{//led設(shè)備節(jié)點

device0::deviceNode{//led驅(qū)動的DeviceNode節(jié)點

policy=2;//policy字段是驅(qū)動服務(wù)發(fā)布的策略

priority=200;//驅(qū)動啟動優(yōu)先級(0-200),值越大優(yōu)先級越低,建議默認配100,優(yōu)先級相同則不保證device的加載順序

preload=0;//驅(qū)動按需加載字段

permission=0777;//驅(qū)動創(chuàng)建設(shè)備節(jié)點權(quán)限

moduleName="HDF_LED";//驅(qū)動名稱,該字段的值必須和驅(qū)動入口結(jié)構(gòu)的moduleName值一致

serviceName="hdf_led";//驅(qū)動對外發(fā)布服務(wù)的名稱,必須唯一

deviceMatchAttr="st_stm32mp157_led";//驅(qū)動私有數(shù)據(jù)匹配的關(guān)鍵字,必須和驅(qū)動私有數(shù)據(jù)配置表中的match_attr值相等

}

}

}

}}HDF驅(qū)動開發(fā)步驟(2)驅(qū)動私有配置信息如果驅(qū)動有私有配置,則可以添加一個驅(qū)動的配置文件,用來填寫一些驅(qū)動的默認配置信息。HDF框架在加載驅(qū)動的時候,會將對應(yīng)的配置信息獲取并保存在HdfDeviceObject中的property里面,通過Bind和Init傳遞給驅(qū)動。驅(qū)動的配置信息示例如下:配置信息定義之后,需要將該配置文件添加到板級配置入口文件hdf.hcs,示例如下:

root{

LedDriverConfig{

led_gpio

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論