OpenHarmony系統HDF驅動開發介紹(補充)

一、HDF驅動簡介

HDF(Hardware Driver Foundation)驅動框架,為驅動開發者提供驅動框架能力,包括驅動加載、驅動服務管理、驅動消息機制和配置管理。
簡單來說:HDF框架的驅動和Linux的驅動比較相似都是由配置文件和驅動源碼組成。
HDF驅動:配置文件HCS + 驅動源碼。
Linux驅動:配置文件DTS + 驅動源碼。

二、HCS文件簡介

HCS(HDF Configuration Source)是HDF驅動框架的配置描述源碼,內容以Key-Value為主要形式。它實現了配置代碼與驅動代碼解耦,便于開發者進行配置管理。HC-GEN(HDF Configuration Generator)是HCS配置轉換工具,可以將HDF配置文件轉換為軟件可讀取的文件格式:

在弱性能環境中,轉換為配置樹源碼或配置樹宏定義,驅動可直接調用C代碼或宏式APIs獲取配置。
在高性能環境中,轉換為HCB(HDF Configuration Binary)二進制文件,驅動可使用HDF框架提供的配置解析接口獲取配置。

HCS文件示例:

root {device_info {match_attr = "hdf_manager";template host {hostName = "";priority = 100;template device {template deviceNode {policy = 0;priority = 100;preload = 0;permission = 0664;moduleName = "";serviceName = "";deviceMatchAttr = "";}}}base :: host {hostName = "base_host";priority = 50;device_support :: device {device0 :: deviceNode {policy = 2;priority = 10;permission = 0644;moduleName = "HDF_KEVENT";serviceName = "hdf_kevent";}}}}
}

上面是我從一個HCS文件中截取了一點內容,HCS子定義了一套格式。

三、HCS語法說明

下面是從官網的一個截圖:
官方介紹

HCS經過HC-GEN編譯生成HCB文件,HDF驅動框架中的HCS Parser模塊會從HCB文件中重建配置樹,HDF驅動模塊使用HCS Parser提供的配置讀取接口獲取配置內容。

表3 HCS配置語法保留關鍵字

|關鍵字 | 用途 |說明|

關鍵字用途說明
root配置根節點-
include引用其他HCS配置文件-
delete刪除節點或屬性只能用于操作include導入的配置樹
template定義模板節點-
match_attr用于標記節點的匹配查找屬性解析配置時可以使用該屬性的值查找到對應節點

HCS主要分為屬性(Attribute)和節點(Node)兩種結構。
詳細語法說明參考:https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/driver/driver-hdf-manage.md

上面的示例代碼中有:moduleName = “HDF_KEVENT”;
這塊的 moduleName 和 DTS文件中驅動節點的 compatible 功能相同,用來匹配對應的驅動代碼。

上面的示例代碼中有:serviceName = “hdf_kevent”;
當驅動匹配成功后最終在/dev路徑下面生成的節點名稱 “hdf_kevent”。但是是否在/dev下面生成節點信息和policy的屬性有關。

只有policy = 2時,在/dev下面才能看到節點信息。

typedef enum {/* 驅動不提供服務 */SERVICE_POLICY_NONE = 0,/* 驅動對內核態發布服務 */SERVICE_POLICY_PUBLIC = 1,/* 驅動對內核態和用戶態都發布服務 */SERVICE_POLICY_CAPACITY = 2,/* 驅動服務不對外發布服務,但可以被訂閱 */SERVICE_POLICY_FRIENDLY = 3,/* 驅動私有服務不對外發布服務,也不能被訂閱 */SERVICE_POLICY_PRIVATE = 4,/* 錯誤的服務策略 */SERVICE_POLICY_INVALID
} ServicePolicy;

四、驅動代碼介紹

驅動實現包含驅動業務代碼實現和驅動入口注冊,具體寫法如下:

  • 驅動業務代碼
#include "hdf_device_desc.h"          // HDF框架對驅動開發相關能力接口的頭文件
#include "hdf_log.h"                  // HDF框架提供的日志接口頭文件#define HDF_LOG_TAG sample_driver     // 打印日志所包含的標簽,如果不定義則用默認定義的HDF_TAG標簽。// 將驅動對外提供的服務能力接口綁定到HDF框架。
int32_t HdfSampleDriverBind(struct HdfDeviceObject *deviceObject)
{HDF_LOGD("Sample driver bind success");return HDF_SUCCESS;
}// 驅動自身業務初始化的接口
int32_t HdfSampleDriverInit(struct HdfDeviceObject *deviceObject)
{HDF_LOGD("Sample driver Init success");return HDF_SUCCESS;
}// 驅動資源釋放的接口
void HdfSampleDriverRelease(struct HdfDeviceObject *deviceObject)
{HDF_LOGD("Sample driver release success");return;
}
  • 驅動入口注冊到HDF框架
// 定義驅動入口的對象,必須為HdfDriverEntry(在hdf_device_desc.h中定義)類型的全局變量。
struct HdfDriverEntry g_sampleDriverEntry = {.moduleVersion = 1,.moduleName = "HDF_KEVENT",.Bind = HdfSampleDriverBind,.Init = HdfSampleDriverInit,.Release = HdfSampleDriverRelease,
};// 調用HDF_INIT將驅動入口注冊到HDF框架中。在加載驅動時HDF框架會先調用Bind函數,再調用Init函數加載該驅動;當Init調用異常時,HDF框架會調用Release釋放驅動資源并退出。
HDF_INIT(g_sampleDriverEntry);

只要驅動代碼中的moduleName配置和HCS文件中moduleName配置內容相同就會執行驅動中的Bind函數,Bind函數執行成功后就會執行Init函數。如果Bind和Init函數有一個執行失敗會立刻執行Release函數。

五、其他

今天就介紹到這里,我最近幾年一直從事音頻開發,主要做Linux、Open Harmony系統的音頻開發。做過RK系列、海思和展銳的音頻適配,大家有什么問題可以留言咨詢。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/905520.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/905520.shtml
英文地址,請注明出處:http://en.pswp.cn/news/905520.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

自然語言處理 (NLP) 入門:NLTK 與 SpaCy 的初體驗

自然語言處理入門:NLTK 與 SpaCy 的初體驗 在當今數字化飛速發展的浪潮中,自然語言處理(NLP)已經成為了極具熱度的技術領域。自然語言處理的核心目標是讓計算機能夠理解、分析并生成人類語言,其應用場景極為廣泛&…

LLaVA:開源多模態大語言模型深度解析

一、基本介紹 1.1 項目背景與定位 LLaVA(Large Language and Vision Assistant)是由Haotian Liu等人開發的開源多模態大語言模型,旨在實現GPT-4級別的視覺-語言交互能力。該項目通過視覺指令微調技術,將預訓練的視覺編碼器與語言模型深度融合,在多個多模態基準測試中達到…

如何利用大模型對文章進行分段,提高向量搜索的準確性?

利用大模型對文章進行分段以提高向量搜索準確性,需結合文本語義理解、分塊策略優化以及向量表示技術。以下是系統性的解決方案: 一、分塊策略的核心原則 語義完整性優先 分塊需確保每個文本單元在語義上獨立且完整。研究表明,當分塊內容保持單一主題時,向量嵌入的語義表征能…

Java高頻面試之并發編程-17

volatile 和 synchronized 的區別 在 Java 并發編程中,volatile 和 synchronized 是兩種常用的同步機制,但它們的適用場景和底層原理有顯著差異。以下是兩者的詳細對比: 1. 核心功能對比 特性volatilesynchronized原子性不保證復合操作的原…

技術債務積累,如何進行有效管理

識別和評估技術債務、明確技術債務的優先級、制定系統的還債計劃、持續監控與預防技術債務產生是有效管理技術債務積累的重要策略。其中尤其要注重識別和評估技術債務,只有準確識別技術債務的種類和嚴重程度,才能制定出高效且有針對性的解決方案&#xf…

安裝windows版本的nacos

一、下載nacos安裝包 瀏覽器搜索nacos,進入nacos官網 https://nacos.io/docs/latest/overview/ 選擇下載windows版本的nacos 二、解壓縮 三、進入bin目錄,cmd命令行窗口 四、啟動nacos 查看日志 五、打開可視化頁面查看 以上,就是安裝wind…

小結:Android系統架構

https://developer.android.com/topic/architecture?hlzh-cn Android系統的架構,分為四個主要層次:應用程序層、應用框架層、庫和運行時層以及Linux內核層。: 1. 應用程序層(Applications) 功能:這一層包…

鴻蒙5.0項目開發——鴻蒙天氣項目的實現(歡迎頁)

【高心星出品】 文章目錄 歡迎頁面效果數據字典創建數據庫表格Splash頁面頁面功能歡迎頁代碼亮點 項目按照從數據庫連接層–視圖層–業務邏輯層這種三層架構開發,所以先設計了數據庫表格的結構,在EntryAbility中創建表格。 歡迎頁面效果 數據字典 sear…

使用譜聚類將相似度矩陣分為2類

使用譜聚類將相似度矩陣分為2類的步驟如下: 構建相似度矩陣:提供的1717矩陣已滿足對稱性且對角線為1。 計算度矩陣:對每一行求和得到各節點的度,形成對角矩陣。 計算歸一化拉普拉斯矩陣:采用對稱歸一化形式 LsymI?D…

MySQL 8.0 OCP 英文題庫解析(三)

Oracle 為慶祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免費考取原價245美元的MySQL OCP 認證。 從今天開始,將英文題庫免費公布出來,并進行解析,幫助大家在一個月之內輕松通過OCP認證。 本期公布試題16~25 試題16:…

【SQL】如何在 SQL 中統計結構化字符串的特征頻率

在數據分析場景中,我們經常會遇到需要解析結構化字符串并統計特征出現次數的需求。本文將以常用數據庫為例,探討如何高效處理類似 [特征A][特征B][特征C] 格式的字符串數據,并實現特征頻率統計。以下是完整的實現思路和解決方案。 一、問題場…

Docker Compose 的安裝方法

以下是 Docker Compose 的安裝方法整理,綜合了多篇指南的推薦步驟和注意事項: 一、安裝前準備 確保已安裝 Docker Docker Compose 依賴 Docker 引擎運行,需先安裝 Docker。若未安裝,可通過以下命令一鍵安裝(國內服…

配置Nginx解決http host頭攻擊漏洞【詳細步驟】

前言 大概內容: 安全系統滲透測試出host頭攻擊漏洞,下面是解決步驟,本人已測過無問題。 server_name aaabbb.com; if ($http_Host !~* ^127.0.0.1|aaabbb.com|localhost$){return 403;}

自研時序大模型講解(4月29日)直播回顧

4 月 29 日,清華團隊揭秘:時序大模型如何讓數據“活”起來線上直播圓滿結束。清華大學軟件學院博士生,IoTDB 原生機器學習引擎 AINode 研發同學劉雍在線上面向數千人次的時序數據分析人員與 AI 大模型行業關注者,就時序大模型的發…

attention_weights = torch.ones_like(prompt_embedding[:, :, 0]):切片操作獲取第二維度,第三維度

attention_weights = torch.ones_like(prompt_embedding[:, :, 0]):切片操作獲取第1 維度,第二維度 attention_weights = torch.ones_like(prompt_embedding[:, :, 0]) 這行代碼的作用是創建一個與 prompt_embedding[:, :, 0] 形狀相同且所有元素都為 1 的張量,它用于初始化…

鴻蒙Next API17新特性學習之如何使用新增鼠標軸事件

今天咱們接著學習鴻蒙開發文檔API17版本的新特性——對鼠標軸事件的支持。這對于需要精細交互的應用來說是一個非常有用的特性,例如地圖滾動、文檔瀏覽等場景。本文將詳細介紹在鴻蒙 Next 中如何使用新增的鼠標軸事件。 開發步驟 環境準備 在開始開發之前&#x…

【行為型之命令模式】游戲開發實戰——Unity可撤銷系統與高級輸入管理的架構秘鑰

文章目錄 ?? 命令模式(Command Pattern)深度解析一、模式本質與核心價值二、經典UML結構三、Unity實戰代碼(可撤銷的建造系統)1. 定義命令接口與接收者2. 實現具體命令3. 命令管理器(Invoker)4. 客戶端使…

計算機網絡|| 路由器和交換機的配置

一、實驗目的 1. 了解路由器和交換機的工作模式和使用方法; 2. 熟悉 Cisco 網絡設備的基本配置命令; 3. 掌握 Cisco 路由器的基本配置方式及配置命令; 4. 掌握路由器和交換機的基本配置與管理方法。 二、實驗環境 1. 運行 Windows 操作…

面試--HTML

1.src和href的區別 總結來說&#xff1a; <font style"color:rgb(238, 39, 70);background-color:rgb(249, 241, 219);">src</font>用于替換當前元素&#xff0c;指向的資源會嵌入到文檔中&#xff0c;例如腳本、圖像、框架等。<font style"co…

CVPR2025 | Prompt-CAM: 讓視覺 Transformer 可解釋以進行細粒度分析

Prompt-CAM: Making Vision Transformers Interpretable for Fine-Grained Analysis 摘要-Abstract引言-Introduction方法-Approach預備知識-PreliminariesPrompt-CAM: Prompt Class Attention Map特征識別與定位-Trait Identification and Localization變體與擴展-Variants an…