自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

HDC2021技術(shù)分論壇:OpenHarmony驅(qū)動(dòng)框架解讀和開發(fā)實(shí)踐

開發(fā) 前端
OpenHarmony作為一個(gè)自主研發(fā)、全新技術(shù)生態(tài)的全領(lǐng)域下一代開源操作系統(tǒng),提供了一套驅(qū)動(dòng)框架來滿足此訴求。

[[433907]]

想了解更多內(nèi)容,請(qǐng)?jiān)L問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

在IoT時(shí)代下,終端設(shè)備差異較大、形態(tài)各異、尺寸各異、交互方式各異,解決設(shè)備適配問題無疑是實(shí)現(xiàn)萬物互聯(lián)的一個(gè)關(guān)鍵。但是,在驅(qū)動(dòng)框架的開發(fā)和部署過程中,由于終端設(shè)備對(duì)硬件的計(jì)算和存儲(chǔ)能力的需求不同、設(shè)備廠商提供的設(shè)備軟硬件操作接口不同、內(nèi)核提供的操作接口不同,這就使得OEM廠商部署系統(tǒng)的時(shí)候需要投入大量的精力來適配和維護(hù)驅(qū)動(dòng)代碼。

能否提供了一個(gè)跨芯片平臺(tái)、跨內(nèi)核的驅(qū)動(dòng)框架,使得設(shè)備驅(qū)動(dòng)軟件可以在不同的設(shè)備上運(yùn)行?OpenHarmony作為一個(gè)自主研發(fā)、全新技術(shù)生態(tài)的全領(lǐng)域下一代開源操作系統(tǒng),提供了一套驅(qū)動(dòng)框架來滿足此訴求。

下面我們將帶著大家解讀OpenHarmony驅(qū)動(dòng)框架。

一、OpenHarmony驅(qū)動(dòng)框架解讀

1. 設(shè)計(jì)目標(biāo)

為解決在開發(fā)和部署過程中遇到的困難,OpenHarmony驅(qū)動(dòng)框架設(shè)計(jì)目標(biāo)如下:

  • 支持百K級(jí)~G級(jí)容量的設(shè)備部署,如手機(jī)、手環(huán)等
  • 提供統(tǒng)一硬件IO抽象,屏蔽SoC芯片差異,兼容不同內(nèi)核,如Linux、LiteOS等。
  • 屏蔽驅(qū)動(dòng)和系統(tǒng)組件間交互??蓜?dòng)態(tài)拆解,滿足不同容量設(shè)備的部署。
  • 面向不同容量的設(shè)備,提供統(tǒng)一的配置界面。

2. 設(shè)計(jì)思路

OpenHarmony驅(qū)動(dòng)框架(下面簡(jiǎn)稱為HDF)通過提供驅(qū)動(dòng)與芯片平臺(tái)、內(nèi)核解耦的底座,規(guī)范硬件驅(qū)動(dòng)接口,實(shí)現(xiàn)驅(qū)動(dòng)軟件在不同設(shè)備中部署。

HDF驅(qū)動(dòng)框架架構(gòu)如下圖所示。

HDC2021技術(shù)分論壇:OpenHarmony驅(qū)動(dòng)框架解讀和開發(fā)實(shí)踐-鴻蒙HarmonyOS技術(shù)社區(qū)

圖1 驅(qū)動(dòng)架構(gòu)

為了達(dá)成設(shè)計(jì)目標(biāo),OpenHarmony驅(qū)動(dòng)框架采用如下核心設(shè)計(jì)思路:

(1)彈性化架構(gòu)

  • 框架可動(dòng)態(tài)伸縮: 通過對(duì)象管理器,多態(tài)加載不同容量設(shè)備實(shí)現(xiàn)方式,實(shí)現(xiàn)彈性伸縮部署。
  • 驅(qū)動(dòng)可動(dòng)態(tài)伸縮: 支持統(tǒng)一的設(shè)備驅(qū)動(dòng)插件管理,實(shí)現(xiàn)設(shè)備驅(qū)動(dòng)任意分層,積木式組合拼接

(2)組件化設(shè)備模型

  • 提供設(shè)備功能模型抽象,屏蔽設(shè)備驅(qū)動(dòng)與系統(tǒng)交互的實(shí)現(xiàn),為開發(fā)者提供統(tǒng)一的驅(qū)動(dòng)開發(fā)接口
  • 提供主流IC的公版驅(qū)動(dòng)能力,支持配置化部署

(3)歸一化平臺(tái)底座

  • 提供規(guī)范化的內(nèi)核、SoC硬件IO適配接口,兼容不同內(nèi)核、SoC芯片,對(duì)外開發(fā)規(guī)范化的平臺(tái)驅(qū)動(dòng)接口

(4)統(tǒng)一配置界面

  • 構(gòu)建全新的配置語言,面向不同容量的設(shè)備,提供統(tǒng)一配置界面,支持硬件資源配置和設(shè)備信息配置

3. 構(gòu)建策略

面向Liteos的輕量級(jí)設(shè)備,主要基于HDF構(gòu)建主流IC驅(qū)動(dòng),形成公版驅(qū)動(dòng)和通用設(shè)備功能模型,支撐不同硬件芯片、不同內(nèi)核(LiteOS-M/LiteOS-A)部署。

HDC2021技術(shù)分論壇:OpenHarmony驅(qū)動(dòng)框架解讀和開發(fā)實(shí)踐-鴻蒙HarmonyOS技術(shù)社區(qū)

圖2 輕量級(jí)設(shè)備部署模式

面向標(biāo)準(zhǔn)設(shè)備,除了支持內(nèi)核態(tài)驅(qū)動(dòng),還支持用戶態(tài)驅(qū)動(dòng)。用戶態(tài)驅(qū)動(dòng)的重點(diǎn)在于構(gòu)建設(shè)備抽象模型,為系統(tǒng)提供統(tǒng)一的設(shè)備接口,兼容Linux原生驅(qū)動(dòng)和HDF驅(qū)動(dòng)。內(nèi)核態(tài)則使用Linux驅(qū)動(dòng)與HDF驅(qū)動(dòng)并存的策略,提供端到端的解決方案。

HDC2021技術(shù)分論壇:OpenHarmony驅(qū)動(dòng)框架解讀和開發(fā)實(shí)踐-鴻蒙HarmonyOS技術(shù)社區(qū)

圖3 標(biāo)準(zhǔn)設(shè)備部署模式

4. 現(xiàn)狀與演進(jìn)

目前HDF驅(qū)動(dòng)框架已經(jīng)支持Liteos-m、Liteos-a、Linux內(nèi)核,以及OpenHarmony輕量級(jí)、標(biāo)準(zhǔn)級(jí)上部署,并且在標(biāo)準(zhǔn)系統(tǒng)上同時(shí)支持內(nèi)核態(tài)與用戶態(tài)部署。

HDC2021技術(shù)分論壇:OpenHarmony驅(qū)動(dòng)框架解讀和開發(fā)實(shí)踐-鴻蒙HarmonyOS技術(shù)社區(qū)

圖4 OpenHarmony驅(qū)動(dòng)框架演進(jìn)圖

經(jīng)過開發(fā)者的不斷努力,OpenHarmony驅(qū)動(dòng)框架正在不斷完善和增強(qiáng),在OpenHarmony LTS3.0中,基礎(chǔ)框架新增了對(duì)熱插拔設(shè)備的管理以及HDI編譯工具h(yuǎn)di-gen,驅(qū)動(dòng)模型部分新增了Audio、Camera、Senso、USB DDK等多個(gè)模塊的支持。

二、OpenHarmony驅(qū)動(dòng)開發(fā)

OpenHarmony驅(qū)動(dòng)為了避免與具體內(nèi)核產(chǎn)生依賴,實(shí)現(xiàn)可遷移目標(biāo),開發(fā)時(shí)需要遵循以下約定:

系統(tǒng)相關(guān)接口使用HDF OSAL接口;

總線和硬件資源相關(guān)接口使用平臺(tái)驅(qū)動(dòng)提供的相關(guān)接口。

基于HDF框架,驅(qū)動(dòng)開發(fā)的通常流程包含驅(qū)動(dòng)代碼的實(shí)現(xiàn)、編譯腳本、配置文件添加、以及用戶態(tài)程序和驅(qū)動(dòng)交互的流程。下面將詳細(xì)介紹HDF驅(qū)動(dòng)開發(fā)一般步驟。

1. 實(shí)現(xiàn)驅(qū)動(dòng)代碼

在HDF驅(qū)動(dòng)框架中,HdfDriverEntry對(duì)象被用來描述一個(gè)驅(qū)動(dòng)實(shí)現(xiàn)。

  1. struct HdfDriverEntry { 
  2.     int32_t moduleVersion; 
  3.     const char *moduleName; 
  4.     int32_t (*Bind)(struct HdfDeviceObject *deviceObject); 
  5.     int32_t (*Init)(struct HdfDeviceObject *deviceObject); 
  6.     void (*Release)(struct HdfDeviceObject *deviceObject); 
  7. }; 

編寫一個(gè)簡(jiǎn)單的驅(qū)動(dòng),首先需要實(shí)現(xiàn)驅(qū)動(dòng)程序(Driver Entry)入口中的三個(gè)主要接口:

  • Bind接口: 實(shí)現(xiàn)驅(qū)動(dòng)接口實(shí)例化綁定,如果需要發(fā)布驅(qū)動(dòng)接口,會(huì)在驅(qū)動(dòng)加載過程中被調(diào)用,實(shí)例化該接口的驅(qū)動(dòng)服務(wù)并和DeviceObject綁定。當(dāng)用戶態(tài)發(fā)起調(diào)用時(shí),Bind中綁定的服務(wù)對(duì)象的Dispatch方法將被回調(diào),在該方法中處理用戶態(tài)調(diào)用的消息。
  • Init接口: 實(shí)現(xiàn)驅(qū)動(dòng)或者硬件的初始化,返回錯(cuò)誤將中止驅(qū)動(dòng)加載流程。
  • Release接口: 實(shí)現(xiàn)驅(qū)動(dòng)的卸載,在該接口中釋放驅(qū)動(dòng)實(shí)例的軟硬件資源。

一個(gè)基于HDF框架編寫的簡(jiǎn)單驅(qū)動(dòng)代碼如下,其功能是用戶態(tài)消息回環(huán),即驅(qū)動(dòng)收到用戶態(tài)發(fā)送的消息后將相同內(nèi)容的消息再發(fā)送給用戶態(tài):

  1. #include "hdf_base.h" 
  2. #include "hdf_device_desc.h" 
  3. #include "hdf_log.h" 
  4. #define HDF_LOG_TAG "sample_driver" 
  5. #define SAMPLE_WRITE_READ 0xFF00 
  6. static int EchoString(struct HdfDeviceObject *deviceObject, struct HdfSBuf *data, struct HdfSBuf *reply) 
  7.     const char *readData = HdfSbufReadString(data); 
  8.     if (readData == NULL) { 
  9.         HDF_LOGE("%s: failed to read data", __func__); 
  10.         return HDF_ERR_INVALID_PARAM; 
  11.     } 
  12.     if (!HdfSbufWriteInt32(reply, INT32_MAX)) { 
  13.         HDF_LOGE("%s: failed to reply int32", __func__); 
  14.         return HDF_FAILURE; 
  15.     } 
  16.     return HdfDeviceSendEvent(deviceObject, id, data); // 發(fā)送事件到用戶態(tài) 
  17. int32_t HdfSampleDriverDispatch(struct HdfDeviceObject *deviceObject, int id, struct HdfSBuf *data, struct HdfSBuf *reply) 
  18.     const char *readData = NULL
  19.     int ret = HDF_SUCCESS; 
  20.     switch (id) { 
  21.         switch SAMPLE_WRITE_READ: 
  22.             ret = EchoString(deviceObject, data, reply); 
  23.             break; 
  24.         default
  25.             HDF_LOGE("%s: unsupported command"); 
  26.             ret = HDF_ERR_INVALID_PARAM; 
  27.     } 
  28.     return ret; 
  29. void HdfSampleDriverRelease(struct HdfDeviceObject *deviceObject) 
  30.     // 在這里釋放驅(qū)動(dòng)申請(qǐng)的軟硬件資源 
  31.     return
  32. int HdfSampleDriverBind(struct HdfDeviceObject *deviceObject) 
  33.     if (deviceObject == NULL) { 
  34.         return HDF_FAILURE 
  35.     } 
  36.     static struct IDeviceIoService testService = { 
  37.         .Dispatch = HdfSampleDriverDispatch, 
  38.     }; 
  39.     deviceObject->service = &testService; 
  40.     return HDF_SUCCESS; 
  41. int HdfSampleDriverInit(struct HdfDeviceObject *deviceObject) 
  42.     if (deviceObject == NULL) { 
  43.         HDF_LOGE("%s::ptr is null!", __func__); 
  44.         return HDF_FAILURE; 
  45.     } 
  46.     HDF_LOGE("Sample driver Init success"); 
  47.     return HDF_SUCCESS; 
  48. struct HdfDriverEntry g_sampleDriverEntry = { 
  49.     .moduleVersion = 1, 
  50.     .moduleName = "sample_driver"
  51.     .Bind = HdfSampleDriverBind, 
  52.     .Init = HdfSampleDriverInit, 
  53.     .Release = HdfSampleDriverRelease, 
  54. }; 
  55. HDF_INIT(g_sampleDriverEntry); 

2. 配置設(shè)備信息

在HDF框架的配置文件(例如vendor/hisilicon/xxx/config/device_info.hcs)中添加該驅(qū)動(dòng)的配置信息,配置目錄與具體開發(fā)板關(guān)聯(lián),如下所示:

  1. root { 
  2.     device_info { 
  3.         match_attr = "hdf_manager"
  4.         template host { 
  5.             hostName = ""
  6.             priority = 100; 
  7.             template device { 
  8.                 template deviceNode { 
  9.                     policy = 0; 
  10.                     priority = 100; 
  11.                     preload = 0; 
  12.                     permission = 0664; 
  13.                     moduleName = ""
  14.                     serviceName = ""
  15.                     deviceMatchAttr = ""
  16.                 } 
  17.             } 
  18.         } 
  19.        sample_host :: host{ 
  20.             hostName = "host0";    // host名稱,host節(jié)點(diǎn)是用來存放某一類驅(qū)動(dòng)的容器 
  21.             priority = 100;        // host啟動(dòng)優(yōu)先級(jí)(0-200),值越大優(yōu)先級(jí)越低,建議默認(rèn)配100,優(yōu)先級(jí)相同則不保證host的加載順序 
  22.             device_sample :: device {        // sample設(shè)備節(jié)點(diǎn) 
  23.                 device0 :: deviceNode {      // sample驅(qū)動(dòng)的DeviceNode節(jié)點(diǎn) 
  24.                     policy = 1;              // policy字段是驅(qū)動(dòng)服務(wù)發(fā)布的策略,在驅(qū)動(dòng)服務(wù)管理章節(jié)有詳細(xì)介紹 
  25.                     priority = 100;          // 驅(qū)動(dòng)啟動(dòng)優(yōu)先級(jí)(0-200),值越大優(yōu)先級(jí)越低,建議默認(rèn)配100,優(yōu)先級(jí)相同則不保證device的加載順序 
  26.                     preload = 0;             // 驅(qū)動(dòng)加載策略,參考《5.2 HDF驅(qū)動(dòng)框架章節(jié)》 
  27.                     permission = 0664;       // 驅(qū)動(dòng)創(chuàng)建設(shè)備節(jié)點(diǎn)權(quán)限 
  28.                     moduleName = "sample_driver";   // 驅(qū)動(dòng)名稱,該字段的值必須和驅(qū)動(dòng)入口結(jié)構(gòu)體的moduleName值一致 
  29.                     serviceName = "sample_service";    // 驅(qū)動(dòng)對(duì)外發(fā)布服務(wù)的名稱,必須唯一 
  30.                     deviceMatchAttr = "sample_config"; // 驅(qū)動(dòng)私有數(shù)據(jù)匹配的關(guān)鍵字,必須和驅(qū)動(dòng)私有數(shù)據(jù)配置表中的match_attr值相等 
  31.                 } 
  32.             } 
  33.         } 
  34.     } 

定義設(shè)備列表時(shí)使用了HCS的模板語法,template host節(jié)點(diǎn)下的內(nèi)容由HDF框架定義,新增host以及host中的device只需要繼承該模板并填充具體內(nèi)容即可。

在配置中定義的device將在加載過程中產(chǎn)生一個(gè)設(shè)備實(shí)例,配置中通過moduleName字段指定設(shè)備對(duì)應(yīng)的驅(qū)動(dòng)名稱,從而將設(shè)備與驅(qū)動(dòng)關(guān)聯(lián)起來。其中,設(shè)備與驅(qū)動(dòng)可以是一對(duì)多的關(guān)系,即可以實(shí)現(xiàn)一個(gè)驅(qū)動(dòng)支持多個(gè)同類型設(shè)備。

3. 用戶態(tài)程序與驅(qū)動(dòng)交互

用戶態(tài)程序和驅(qū)動(dòng)交互基于HDF IoService模型實(shí)現(xiàn),該設(shè)計(jì)屏蔽了具體內(nèi)核的差異,將驅(qū)動(dòng)接口抽象為IoService對(duì)象,調(diào)用者基于名稱獲取該對(duì)象,并可以使用IoService系列接口進(jìn)行接口調(diào)用和事件監(jiān)聽。值得一提的是消息傳遞時(shí)使用了HDF Sbuf對(duì)象進(jìn)行參數(shù)的序列化和反序列化,這樣可以避免不受控的內(nèi)存訪問,也簡(jiǎn)化了消息傳遞和分發(fā)過程中的內(nèi)存所有權(quán)問題,有利于提升用戶態(tài)和內(nèi)核態(tài)數(shù)據(jù)傳遞的安全性和便利性。HDF Sbuf相關(guān)接口可以參考HarmonyOS設(shè)備開發(fā)官網(wǎng)API Reference中頭文件hdf_sbuf.h部分。

基于HDF框架編寫的用戶態(tài)程序和驅(qū)動(dòng)交互的代碼如下:

  1. #include "hdf_log.h" 
  2. #include "hdf_sbuf.h" 
  3. #include "hdf_io_service_if.h" 
  4. #define HDF_LOG_TAG "sample_test" 
  5. #define SAMPLE_SERVICE_NAME "sample_service" 
  6. #define SAMPLE_WRITE_READ 0xFF00 
  7. int g_replyFlag = 0; 
  8. static int OnDevEventReceived(void *priv, uint32_t id, struct HdfSBuf *data) 
  9.     const char *string = HdfSbufReadString(data); 
  10.     int ret = HDF_SUCCESS; 
  11.     if (string == NULL) { 
  12.         HDF_LOGE("failed to read string in event data"); 
  13.         ret = HDF_FAILURE; 
  14.     } else { 
  15.         HDF_LOGE("%s", string); 
  16.     } 
  17.     g_replyFlag = 1; 
  18.     return ret; 
  19. static int SendEvent(struct HdfIoService *serv, char *eventData) 
  20.     int ret = 0; 
  21.     struct HdfSBuf *data = HdfSBufObtainDefaultSize(); // 申請(qǐng)需要發(fā)送的序列化對(duì)象 
  22.     if (data == NULL) { 
  23.         HDF_LOGE("failed to obtain sbuf data"); 
  24.         return 1; 
  25.     } 
  26.     struct HdfSBuf *reply = HdfSBufObtainDefaultSize(); // 申請(qǐng)返回?cái)?shù)據(jù)的序列化對(duì)象 
  27.     if (reply == NULL) { 
  28.         HDF_LOGE("failed to obtain sbuf reply"); 
  29.         ret = HDF_DEV_ERR_NO_MEMORY; 
  30.         goto out
  31.     } 
  32.     if (!HdfSbufWriteString(data, eventData)) { // 準(zhǔn)備消息內(nèi)容 
  33.         HDF_LOGE("failed to write sbuf"); 
  34.         ret = HDF_FAILURE; 
  35.         goto out
  36.     } 
  37.     ret = serv->dispatcher->Dispatch(&serv->object, SAMPLE_WRITE_READ, data, reply); // 發(fā)起接口調(diào)用 
  38.     if (ret != HDF_SUCCESS) { 
  39.         HDF_LOGE("failed to send service call"); 
  40.         goto out
  41.     } 
  42.     int replyData = 0; 
  43.     if (!HdfSbufReadInt32(reply, &replyData)) { // 反序列化返回?cái)?shù)據(jù) 
  44.         HDF_LOGE("failed to get service call reply"); 
  45.         ret = HDF_ERR_INVALID_OBJECT; 
  46.         goto out
  47.     } 
  48.     HDF_LOGE("Get reply is: %d", replyData); 
  49. out
  50.     HdfSBufRecycle(data); 
  51.     HdfSBufRecycle(reply); 
  52.     return ret; 
  53. int main() 
  54.     struct HdfIoService *serv = HdfIoServiceBind(SAMPLE_SERVICE_NAME); // 通過名稱獲取IoService對(duì)象,與驅(qū)動(dòng)配置中的名稱一致 
  55.     if (serv == NULL) { 
  56.         HDF_LOGE("failed to get service %s", SAMPLE_SERVICE_NAME); 
  57.         return HDF_FAILURE; 
  58.     } 
  59.     static struct HdfDevEventlistener listener = { // 構(gòu)造驅(qū)動(dòng)事件監(jiān)聽器對(duì)象 
  60.         .callBack = OnDevEventReceived, // 填充事件處理方法 
  61.         .priv = NULL
  62.     }; 
  63.     if (HdfDeviceRegisterEventListener(serv, &listener) != HDF_SUCCESS) {  // 注冊(cè)事件監(jiān)聽 
  64.         HDF_LOGE("failed to register event listener"); 
  65.         return HDF_FAILURE; 
  66.     } 
  67.     if (SendEvent(serv, "Hello World, HDF Driver!")) { // 調(diào)用驅(qū)動(dòng)接口,樣例驅(qū)動(dòng)收到事件 
  68.         HDF_LOGE("failed to send event"); 
  69.         return HDF_FAILURE; 
  70.     } 
  71.     while (g_replyFlag == 0) { // 等待驅(qū)動(dòng)上報(bào)事件 
  72.         sleep(1); 
  73.     } 
  74.     HdfDeviceUnregisterEventListener(serv, &listener)); // 去注冊(cè)事件監(jiān)聽器 
  75.     HdfIoServiceRecycle(serv); // 回收IoService對(duì)象 
  76.     return 0; 

該示例執(zhí)行后會(huì)在終端中打印出"Hello World, HDF Driver!"字符串,表明我們的用戶態(tài)測(cè)試程序和驅(qū)動(dòng)成功地進(jìn)行了一次交互。

三、使用DevEco Device Tool進(jìn)行驅(qū)動(dòng)開發(fā)

上一小節(jié)介紹了OpenHarmony驅(qū)動(dòng)的一般開發(fā)方法,那么有沒有更簡(jiǎn)單的方法添加一款驅(qū)動(dòng)呢?答案就是華為南向開發(fā)IDE——DevEco Device Tool。DevEco Device Tool最新版本已經(jīng)集成了HDF驅(qū)動(dòng)開發(fā)功能,下面介紹如何使用DevEco Device Tool進(jìn)行驅(qū)動(dòng)開發(fā)。

DevEco Device Tool下載鏈接:

https://device.harmonyos.com/cn/develop/ide#download_release。

1. 創(chuàng)建驅(qū)動(dòng)

(1)導(dǎo)入工程

參考DevEco Device Tool手冊(cè),通過npm或網(wǎng)絡(luò)下載的方式導(dǎo)入OHOS工程。

HDC2021技術(shù)分論壇:OpenHarmony驅(qū)動(dòng)框架解讀和開發(fā)實(shí)踐-鴻蒙HarmonyOS技術(shù)社區(qū)

圖5 DevEco Device Tool啟動(dòng)界面

(2)使用HDF頁面工具創(chuàng)建新驅(qū)動(dòng),按照需求填寫Module名稱,工具將根據(jù)Module名稱創(chuàng)建對(duì)應(yīng)驅(qū)動(dòng)代碼與。

HDC2021技術(shù)分論壇:OpenHarmony驅(qū)動(dòng)框架解讀和開發(fā)實(shí)踐-鴻蒙HarmonyOS技術(shù)社區(qū)

圖6 Device Eco Tool HDF插件界面

DevEco Device Tool將自動(dòng)生成驅(qū)動(dòng)實(shí)現(xiàn)代碼:

HDC2021技術(shù)分論壇:OpenHarmony驅(qū)動(dòng)框架解讀和開發(fā)實(shí)踐-鴻蒙HarmonyOS技術(shù)社區(qū)

圖7 Device Eco Tool 生成驅(qū)動(dòng)代碼

為源碼文件自動(dòng)生成編譯腳本:

HDC2021技術(shù)分論壇:OpenHarmony驅(qū)動(dòng)框架解讀和開發(fā)實(shí)踐-鴻蒙HarmonyOS技術(shù)社區(qū)

圖8 Device Eco Tool 生成驅(qū)動(dòng)編譯腳本

DevEco Device Tool還會(huì)在對(duì)應(yīng)單板的驅(qū)動(dòng)配置中生成驅(qū)動(dòng)設(shè)備配置信息:

HDC2021技術(shù)分論壇:OpenHarmony驅(qū)動(dòng)框架解讀和開發(fā)實(shí)踐-鴻蒙HarmonyOS技術(shù)社區(qū)

圖9 Device Eco Tool 生成驅(qū)動(dòng)配置信息

2. 修改驅(qū)動(dòng)

HDC2021技術(shù)分論壇:OpenHarmony驅(qū)動(dòng)框架解讀和開發(fā)實(shí)踐-鴻蒙HarmonyOS技術(shù)社區(qū)

圖10 Device Eco Tool驅(qū)動(dòng)快速編輯界面

DevEco Device Tool提供了快捷方式直達(dá)源碼、編譯腳本、配置文件,點(diǎn)擊鏈接修改相關(guān)文件,實(shí)現(xiàn)驅(qū)動(dòng)功能。DevEco Device Tool自動(dòng)生成代碼已經(jīng)提供了DriverEntry的基礎(chǔ)實(shí)現(xiàn),只需填充對(duì)應(yīng)函數(shù)的實(shí)際功能即可。

3. 編譯版本

使用DevEco Device Tool build功能一鍵編譯版本,編譯輸出顯示在終端窗口:

HDC2021技術(shù)分論壇:OpenHarmony驅(qū)動(dòng)框架解讀和開發(fā)實(shí)踐-鴻蒙HarmonyOS技術(shù)社區(qū)

圖11 Device Eco Tool編譯界面

4. 燒錄驗(yàn)證

DevEco Device Tool提供了一站式的燒錄、調(diào)試環(huán)境。使用upload功能將編譯好的鏡像燒錄進(jìn)開發(fā)板。

HDC2021技術(shù)分論壇:OpenHarmony驅(qū)動(dòng)框架解讀和開發(fā)實(shí)踐-鴻蒙HarmonyOS技術(shù)社區(qū)

圖12 Device Eco Tool燒寫功能界面

燒錄過程和進(jìn)度顯示在終端窗口。

HDC2021技術(shù)分論壇:OpenHarmony驅(qū)動(dòng)框架解讀和開發(fā)實(shí)踐-鴻蒙HarmonyOS技術(shù)社區(qū)

圖13 Device Eco Tool燒寫輸出

四、總結(jié)

除了在此次HDC大會(huì)與大家分享驅(qū)動(dòng)框架的設(shè)計(jì)和最新進(jìn)展,開放原子基金會(huì)還在OpenHarmony公眾號(hào)、gitee社區(qū)等渠道發(fā)布了一系列技術(shù)分享、指導(dǎo)文檔等資料,歡迎大家關(guān)注并一起建設(shè)OpenHarmony驅(qū)動(dòng)生態(tài)。

想了解更多內(nèi)容,請(qǐng)?jiān)L問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

 

責(zé)任編輯:jianghua 來源: 鴻蒙社區(qū)
相關(guān)推薦

2021-11-03 17:08:22

鴻蒙HarmonyOS應(yīng)用

2021-11-26 10:05:06

鴻蒙HarmonyOS應(yīng)用

2021-10-28 14:53:27

鴻蒙HarmonyOS應(yīng)用

2021-10-29 10:14:42

鴻蒙HarmonyOS應(yīng)用

2021-11-02 14:52:17

鴻蒙HarmonyOS應(yīng)用

2021-10-29 15:34:45

鴻蒙HarmonyOS應(yīng)用

2021-10-28 10:11:17

鴻蒙HarmonyOS應(yīng)用

2021-11-08 10:20:48

鴻蒙HarmonyOS應(yīng)用

2021-11-03 17:03:31

鴻蒙HarmonyOS應(yīng)用

2022-04-01 15:18:04

HarmonyHDF 驅(qū)動(dòng)鴻蒙

2021-09-07 15:48:28

鴻蒙HarmonyOS應(yīng)用

2021-11-15 10:15:37

鴻蒙HarmonyOS應(yīng)用

2022-04-21 11:26:31

鴻蒙操作系統(tǒng)

2023-03-08 15:55:53

Linux驅(qū)動(dòng)鴻蒙

2016-01-21 17:47:24

AWS技術(shù)峰會(huì)AWS Summit2
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)