色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

OpenHarmony HDF 驅(qū)動框架概述及加載過程分析

HarmonyOS開發(fā)者 ? 來源:OpenAtom OpenHarmony ? 作者:OpenAtom OpenHarmony ? 2021-09-03 09:32 ? 次閱讀

OpenHarmony系統(tǒng)

HDF驅(qū)動框架概述

OpenAtom OpenHarmony(以下簡稱“OpenHarmony”)系統(tǒng) HDF 驅(qū)動框架采用 C 語言面向?qū)ο?a target="_blank">編程模型構(gòu)建,通過平臺解耦、內(nèi)核解耦,來達(dá)到兼容不同內(nèi)核,統(tǒng)一平臺底座的目的,從而幫助開發(fā)者實現(xiàn)驅(qū)動一次開發(fā),多系統(tǒng)部署的效果。

為了達(dá)成這個目標(biāo), OpenHarmony 系統(tǒng) HDF 驅(qū)動框架提供了:

操作系統(tǒng)適配層(OSAL,Operating System Abstraction Layer):對內(nèi)核操作相關(guān)接口進(jìn)行統(tǒng)一封裝,屏蔽不同系統(tǒng)操作接口。

平臺驅(qū)動接口:提供 Board 部分驅(qū)動(例如,I2C/SPI/UART 總線等平臺資源)支持,同時對 Board 硬件操作進(jìn)行統(tǒng)一的適配接口抽象,方便開發(fā)者只需開發(fā)新硬件抽象接口,即可獲得新增 Board 部分驅(qū)動支持。

驅(qū)動模型:面向器件驅(qū)動,提供常見的驅(qū)動抽象模型,主要達(dá)成兩個目的。

1)提供標(biāo)準(zhǔn)化的器件驅(qū)動模型,開發(fā)者無需獨(dú)立開發(fā),通過配置即可完成驅(qū)動部署。

2)提供驅(qū)動模型抽象,屏蔽驅(qū)動與不同系統(tǒng)組件間的交互,使得驅(qū)動更具備通用型。

為了進(jìn)一步簡化 OpenHarmony 系統(tǒng)驅(qū)動開發(fā),OpenHarmony 系統(tǒng) HDF 驅(qū)動框架支持多種驅(qū)動加載方式:

支持驅(qū)動動態(tài)加載和靜態(tài)加載,解除驅(qū)動代碼和框架間的直接代碼依賴,使得驅(qū)動程序可以獨(dú)立編譯和部署;

支持按需動態(tài)加載方式,避免設(shè)備驅(qū)動全量加載,可有效降低系統(tǒng)資源的占用。

本文主要分析 OpenHarmony 系統(tǒng)驅(qū)動加載過程,在正式介紹之前,首先了解 OpenHarmony 系統(tǒng)驅(qū)動架構(gòu)的組成、工作原理和機(jī)制,從而了解驅(qū)動加載的細(xì)節(jié)。

OpenHarmony系統(tǒng)

HDF驅(qū)動框架介紹

OpenHarmony 系統(tǒng) HDF 驅(qū)動框架組成

OpenHarmony 系統(tǒng) HDF 驅(qū)動框架主要由驅(qū)動基礎(chǔ)框架、驅(qū)動程序、驅(qū)動配置文件和驅(qū)動接口這四個部分組成。

1) HDF 驅(qū)動基礎(chǔ)框架提供統(tǒng)一的硬件資源管理,驅(qū)動加載管理以及設(shè)備節(jié)點(diǎn)管理等功能。驅(qū)動框架采用的是主從模式設(shè)計,由 Device Manager 和 Device Host 組成。

Device Manager 提供了統(tǒng)一的驅(qū)動管理,Device Manager 啟動時根據(jù) Device Information 提供驅(qū)動設(shè)備信息加載相應(yīng)的驅(qū)動 Device Host,并控制 Host 完成驅(qū)動的加載。

Device Host 提供驅(qū)動運(yùn)行的環(huán)境,同時預(yù)置 Host Framework 與 Device Manager 進(jìn)行協(xié)同,完成驅(qū)動加載和調(diào)用。根據(jù)業(yè)務(wù)的需求 Device Host 可以有多個實例。

說明Device Host 顧名思義就是驅(qū)動宿主,提供驅(qū)動運(yùn)行的環(huán)境。當(dāng)驅(qū)動部署在用戶態(tài)時,Device Host 可以由獨(dú)立的進(jìn)程進(jìn)行承載,當(dāng)驅(qū)動在部署在內(nèi)核態(tài)時,Device Host 僅表示邏輯隔離。Device Host 的劃分原則:Device Host 屬于一類設(shè)備聚合,如 Camera,Audio,Display 等。驅(qū)動程序是部署在一個 Device Host 還是部署在不同的 Device Host,主要考慮驅(qū)動程序之間是否存的業(yè)務(wù)耦合性,如果兩個驅(qū)動程序之間存在依賴,可以考慮將這部分驅(qū)動程序部署在統(tǒng)一 Host。

2) 驅(qū)動程序?qū)崿F(xiàn)驅(qū)動具體的功能,每個驅(qū)動由一個或者多個驅(qū)動程序組成,每個驅(qū)動程序都對應(yīng)著一個 Driver Entry。Driver Entry 主要完成驅(qū)動的初始化和驅(qū)動接口綁定功能。

3) 驅(qū)動配置文件.hcs 主要由設(shè)備信息(Device Information)和設(shè)備資源(Device Resource)組成。Device Information 完成設(shè)備信息的配置。如配置接口發(fā)布策略,驅(qū)動加載的方式等。Device Resource 完成設(shè)備資源的配置。如 GPIO 管腳、寄存器等資源信息的配置。4) 驅(qū)動接口 HDI(Hardware Driver Interface )提供標(biāo)準(zhǔn)化的接口定義和實現(xiàn),驅(qū)動框架提供 IO Service 和 IO Dispatcher 機(jī)制,使得不同部署形態(tài)下驅(qū)動接口趨于形式一致。驅(qū)動接口主要存在以下幾種實現(xiàn):

當(dāng)驅(qū)動以內(nèi)核組件部署時,客戶端程序訪問驅(qū)動程序需要通過 system call 方式調(diào)用,驅(qū)動接口通過 IO Service 請求將消息通過 system call 方式調(diào)用到內(nèi)核,并將消息分發(fā)到 IO Dispatcher 處理。

當(dāng)驅(qū)動以用戶態(tài)服務(wù)形式部署時,客戶端進(jìn)程訪問驅(qū)動進(jìn)程需要通過 IPC 方式通信,IO Service 完成 IPC 通信的客戶端消息請求封裝,IO Dispatcher 完成驅(qū)動服務(wù)端消息請求封裝,客戶端消息通過 IPC 通信到達(dá)服務(wù)端并分發(fā)給 IO Dispatcher 處理。

當(dāng)驅(qū)動部署在 RTOS(Real-Time Operating System)輕量化操作系統(tǒng)時,驅(qū)動接口和驅(qū)動程序之間采用的是 Function Call 方式調(diào)用,因此驅(qū)動接口僅提供定義,驅(qū)動接口實現(xiàn)由驅(qū)動程序提供。

HDF 驅(qū)動框架工作原理

e414a998-0c1b-11ec-8fb8-12bb97331649.png

圖2 驅(qū)動框架工作原理

Device Manager 提供了統(tǒng)一的驅(qū)動加載管理機(jī)制和驅(qū)動接口發(fā)布機(jī)制。

當(dāng) Device Host 環(huán)境加載完成時,Device Manager 根據(jù) Device Information 信息,請求 Host 加載相應(yīng)的驅(qū)動程序,Device Host 在收到請求時,進(jìn)行以下操作:

1.根據(jù)請求加載設(shè)備信息,查找并加載指定路徑下驅(qū)動鏡像或從指定段地址(section)查找驅(qū)動程序入口。

2.查找驅(qū)動設(shè)備描述符,匹配對應(yīng)的設(shè)備驅(qū)動。

3.當(dāng)驅(qū)動匹配成功時,加載指定驅(qū)動程序鏡像。

4.Host Framework 在驅(qū)動程序鏡像加載成功后,調(diào)用驅(qū)動程序(Driver Entry)的綁定接口和初始化接口,實現(xiàn)與驅(qū)動程序的服務(wù)對象綁定,同時初始化設(shè)備驅(qū)動程序。

5.當(dāng) Device Information 配置中的服務(wù)策略要求對外暴露驅(qū)動接口時,驅(qū)動框架就將驅(qū)動程序的服務(wù)對象添加到對外發(fā)布的服務(wù)對象列表中,外部客戶端程序就可以通過此列表來查詢并訪問相應(yīng)的服務(wù)接口。

驅(qū)動接口工作機(jī)制

e444c402-0c1b-11ec-8fb8-12bb97331649.png

圖3 驅(qū)動接口工作機(jī)制

對于驅(qū)動接口實現(xiàn)而言:

當(dāng)驅(qū)動部署在內(nèi)核態(tài)時,驅(qū)動接口部署在用戶態(tài),驅(qū)動實現(xiàn)在內(nèi)核態(tài),驅(qū)動接口和驅(qū)動實現(xiàn)之間通過 syscall 調(diào)用方式實現(xiàn)調(diào)用交互。

當(dāng)驅(qū)動部署在用戶態(tài)時,驅(qū)動接口和驅(qū)動實現(xiàn)分別部署在兩個進(jìn)程中。驅(qū)動接口和驅(qū)動實現(xiàn)之間通過 IPC 調(diào)用方式實現(xiàn)調(diào)用交互。

為了使客戶端和服務(wù)端驅(qū)動調(diào)用方式基本一致,驅(qū)動框架提供 IO Service 和 IO Dispatcher 機(jī)制屏蔽了調(diào)用消息傳遞方式的差異。

驅(qū)動接口實現(xiàn)統(tǒng)一采用遠(yuǎn)程調(diào)用的方式實現(xiàn),客戶端驅(qū)動接口函數(shù)將請求序列化成內(nèi)存數(shù)據(jù),通過驅(qū)動框架提供的 IO Service 將消息發(fā)送到服務(wù)端處理,服務(wù)端在收到請求消息時通過 IO Dispatcher 機(jī)制將消息分發(fā)給消息處理函數(shù)處理,處理函數(shù)將反序列化內(nèi)存數(shù)據(jù)解析成相應(yīng)的請求。這樣的做到好處是,開發(fā)者只需重點(diǎn)關(guān)注接口的定義,無需過多的關(guān)注如何實現(xiàn)不同平臺上接口適配。

驅(qū)動加載過程分析

OpenHarmony 系統(tǒng)驅(qū)動根據(jù)驅(qū)動程序部署的不同方式,存在兩種驅(qū)動加載方式:

動態(tài)加載方式:采用傳統(tǒng)的 so(共享庫)加載方式,驅(qū)動程序通過指定 Symbol 方式找到驅(qū)動函數(shù)入口進(jìn)行加載。

靜態(tài)加載方式:采用將驅(qū)動程序通過 Scatter 編譯到指定的 Section,再通過訪問指定 Section 對應(yīng)的地址,找到驅(qū)動函數(shù)入口進(jìn)行加載。

下面結(jié)合一個 Sample 示例代碼,講解驅(qū)動加載過程,重點(diǎn)分析靜態(tài)加載方式下內(nèi)核態(tài)驅(qū)動加載過程。

實現(xiàn)驅(qū)動程序初始化接口在 HDF 驅(qū)動框架中,HdfDriverEntry 對象被用來描述一個驅(qū)動實現(xiàn)。

struct HdfDriverEntry { int32_t moduleVersion; const char *moduleName; int32_t (*Bind)(struct HdfDeviceObject *deviceObject); int32_t (*Init)(struct HdfDeviceObject *deviceObject); void (*Release)(struct HdfDeviceObject *deviceObject);};

編寫一個簡單的驅(qū)動,首先需要實現(xiàn)驅(qū)動程序 (Driver Entry)入口中的三個主要接口:

Bind 接口:實現(xiàn)驅(qū)動接口實例化綁定,如果需要發(fā)布驅(qū)動接口,會在驅(qū)動加載過程中被調(diào)用,實例化該接口的驅(qū)動服務(wù)并和 DeviceObject 綁定。

Init 接口:實現(xiàn)驅(qū)動的初始化,返回錯誤將中止驅(qū)動加載流程。

Release 接口:實現(xiàn)驅(qū)動的卸載,在該接口中釋放驅(qū)動實例的軟硬件資源。

int SampleDriverBind(struct HdfDeviceObject *deviceObject){ HDF_LOGE(“SampleDriverBind enter!”); static struct IDeviceIoService testService = { .Dispatch = SampleServiceDispatch, .Open = NULL, .Release = NULL, }; deviceObject-》service = &testService; return HDF_SUCCESS;}

int SampleDriverInit(struct HdfDeviceObject *deviceObject){ HDF_LOGE(“SampleDriverInit enter”); return HDF_SUCCESS;}

void SampleDriverRelease(struct HdfDeviceObject *deviceObject){ HDF_LOGE(“SampleDriverRelease enter”); return;}

struct HdfDriverEntry g_sampleDriverEntry = { .moduleVersion = 1, .moduleName = “sample_driver”, .Bind = SampleDriverBind, .Init = SampleDriverInit, .Release = SampleDriverRelease,};

HDF_INIT(g_sampleDriverEntry);

導(dǎo)出驅(qū)動程序入口符號實現(xiàn)驅(qū)動程序初始化后,需要將驅(qū)動程序入口通過驅(qū)動聲明宏導(dǎo)出,這樣驅(qū)動框架才能在啟動時識別到驅(qū)動程序的存在,驅(qū)動才能被加載:

#define HDF_INIT(module) HDF_DRIVER_INIT(module)

這里將 HDF_INIT 宏展開:

#define HDF_SECTION __attribute__((section(“.hdf.driver”)))#define HDF_DRIVER_INIT(module) const size_t USED_ATTR module##HdfEntry HDF_SECTION = (size_t)(&(module))

下面是其實現(xiàn)原理:

可以看到 HDF_INIT 宏是定義了一個“驅(qū)動模塊名+HdfEntry”的符號放到“.hdf.driver”所在 section,該符號指向的內(nèi)存地址即為驅(qū)動程序入口結(jié)構(gòu)體的地址。這個特殊的 section 將用于開機(jī)啟動時查找設(shè)備驅(qū)動。

添加設(shè)備配置

在設(shè)備對應(yīng)的 device_info.hcs 添加 sample 驅(qū)動的配置:

sample_host :: host { hostName = “sample_host”; sample_device :: device { device0 :: deviceNode { policy = 2; priority = 100; preload = 1; permission = 0664; moduleName = “sample_driver”; serviceName = “sample_service”; } }}

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

驅(qū)動啟動過程我們添加的驅(qū)動是如何被執(zhí)行的呢?簡單來說,在系統(tǒng)啟動時,驅(qū)動框架先啟動,通過解析配置文件獲取到設(shè)備列表,通過讀取“.hdf.drivers”段讀取到驅(qū)動程序(Driver Entry)列表,然后遍歷設(shè)備列表與驅(qū)動程序列表進(jìn)行匹配,并加載匹配成功的驅(qū)動。驅(qū)動框架有兩大核心管理者:

DeviceManager 負(fù)責(zé)設(shè)備的管理,包括設(shè)備加載、卸載和查詢等設(shè)備相關(guān)功能。

DeviceServiceManager 負(fù)責(zé)管理設(shè)備發(fā)布的接口服務(wù),提供接口服務(wù)的發(fā)布、查詢等功能。

驅(qū)動加載主要由 DeviceManager 主導(dǎo),首先 DeviceManager 要解析配置文件中的 Host 列表,根據(jù) Host 列表中的信息來實例化對應(yīng)的 Host 對象。Host 解析配置文件獲取到關(guān)聯(lián)的設(shè)備列表,遍歷設(shè)備列表去獲取與之匹配的驅(qū)動程序名稱,然后基于驅(qū)動程序名稱遍歷前面提到的.hdf.driver section 獲得驅(qū)動程序地址。

下面介紹具體過程。

獲取設(shè)備列表

e4788da0-0c1b-11ec-8fb8-12bb97331649.png

圖5 設(shè)備列表結(jié)構(gòu)

配置文本編譯后會變成二進(jìn)制格式的配置文件,其中設(shè)備相關(guān)信息被存放在一個用“hdf_manager”標(biāo)記的 device_info 配置塊中,host 的內(nèi)容以塊的形式在 device_info 塊中依次排列,host 塊中記錄了 host 名稱、啟動優(yōu)先級和設(shè)備列表信息。設(shè)備信息中的 moduleName 字段將用于和驅(qū)動程序入口中的 moduleName 進(jìn)行匹配,從而為設(shè)備匹配到正確的驅(qū)動程序。

獲取驅(qū)動程序列表

HDF 驅(qū)動框架通過將驅(qū)動程序入口符號的地址集中存放到一個特殊的 section 來實現(xiàn)對驅(qū)動的索引,這個 section 的開頭和末尾插入了_hdf_drivers_start、_hdf_drivers_end 兩個特殊符號,用于標(biāo)記這個 section 的范圍,兩個特殊符號之間的數(shù)據(jù)即為驅(qū)動實現(xiàn)指針。

驅(qū)動程序加載流程

Device Manager 遍歷設(shè)備列表,當(dāng)查找到對應(yīng)驅(qū)動實現(xiàn)時,為設(shè)備創(chuàng)建 Device 對象實例,如果設(shè)備配置中的 policy 字段為需要對外發(fā)布的驅(qū)動接口(SERVICE_POLICY_CAPACITY),那么驅(qū)動的 Bind 接口將首先被調(diào)用,用于關(guān)聯(lián)設(shè)備和服務(wù)實例。然后驅(qū)動的 Init 接口將被調(diào)用,用于完成驅(qū)動的相關(guān)初始化工作。如果驅(qū)動被卸載或者因為硬件等原因 Init 接口返回失敗,Release 將被調(diào)用,用于釋放驅(qū)動申請的各類資源。

總結(jié)

本次和大家分享了 OpenHarmony 系統(tǒng)驅(qū)動的主要設(shè)計思想,重點(diǎn)分析了內(nèi)核態(tài)驅(qū)動加載的過程,關(guān)于 OpenHarmony 系統(tǒng)驅(qū)動其他內(nèi)容,后續(xù)會有更多技術(shù)文章向大家持續(xù)分享,敬請期待。

編輯:jq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • uart
    +關(guān)注

    關(guān)注

    22

    文章

    1235

    瀏覽量

    101354
  • OSAL
    +關(guān)注

    關(guān)注

    0

    文章

    5

    瀏覽量

    8769
  • HDF框架
    +關(guān)注

    關(guān)注

    0

    文章

    9

    瀏覽量

    2764
  • OpenHarmony
    +關(guān)注

    關(guān)注

    25

    文章

    3713

    瀏覽量

    16256

原文標(biāo)題:OpenHarmony HDF 驅(qū)動框架介紹和驅(qū)動加載過程分析

文章出處:【微信號:HarmonyOS_Dev,微信公眾號:HarmonyOS開發(fā)者】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    linux驅(qū)動程序如何加載進(jìn)內(nèi)核

    ,需要了解Linux內(nèi)核的基本概念和API。以下是一些關(guān)鍵概念: 1.1 內(nèi)核模塊:Linux內(nèi)核模塊是一種動態(tài)加載和卸載的代碼,可以在不重新啟動系統(tǒng)的情況下加載和卸載。驅(qū)動程序通常以內(nèi)核模塊的形式實現(xiàn)。 1.2 設(shè)備模型:Li
    的頭像 發(fā)表于 08-30 15:02 ?444次閱讀

    Scrum框架的模式、過程和見解

    電子發(fā)燒友網(wǎng)站提供《Scrum框架的模式、過程和見解.pdf》資料免費(fèi)下載
    發(fā)表于 08-12 09:36 ?0次下載

    鴻蒙OpenHarmony南向/北向快速開發(fā)教程-迅為RK3568開發(fā)板

    優(yōu)化開發(fā)流程-配置遠(yuǎn)程訪問環(huán)境 P8_優(yōu)化開發(fā)流程-編譯源碼和燒寫鏡像 P9_OpenHarmony源碼目錄介紹 P10_整體移植方案介紹 P11_編譯目標(biāo)分析 P12_編譯框架基本概念
    發(fā)表于 07-23 10:44

    OpenHarmony之開機(jī)優(yōu)化

    OpenHarmony已經(jīng)支持了Bootchart工具,我們可以直接使用Bootchart工具,Bootchart工具介紹如下: 概述 Bootchart是一個用于系統(tǒng)啟動過程性能分析
    發(fā)表于 07-01 16:39

    鴻蒙開發(fā):【OpenHarmony 4.0 Release指導(dǎo)】

    OpenHarmony 4.0版本如期而至,開發(fā)套件同步升級到API 10。相比3.2 Release版本,新增4000多個API,應(yīng)用開發(fā)能力更加豐富;HDF新增200多個HDI接口,硬件適配更加便捷;我們持續(xù)優(yōu)化圖形框架和方
    的頭像 發(fā)表于 05-14 09:59 ?1457次閱讀
    鴻蒙開發(fā):【<b class='flag-5'>OpenHarmony</b> 4.0 Release指導(dǎo)】

    【AWTK使用經(jīng)驗】加載和釋放外部圖片

    AWTK是基于C語言開發(fā)的跨平臺GUI框架。《AWTK使用經(jīng)驗》系列文章將介紹開發(fā)AWTK過程中一些常見問題與解決方案,例如:如何加載外部資源?如何設(shè)計自定義進(jìn)度條?這些都會在系列文章進(jìn)行解答。
    的頭像 發(fā)表于 04-26 08:25 ?471次閱讀
    【AWTK使用經(jīng)驗】<b class='flag-5'>加載</b>和釋放外部圖片

    鴻蒙開發(fā)案例:【圖像加載緩存庫ImageKnife】

    專門為OpenHarmony打造的一款圖像加載緩存庫,致力于更高效、更輕便、更簡單。
    的頭像 發(fā)表于 03-23 16:48 ?846次閱讀
    鴻蒙開發(fā)案例:【圖像<b class='flag-5'>加載</b>緩存庫ImageKnife】

    鴻蒙開發(fā)實戰(zhàn):【Hdf Framework】

    該倉主要存放OpenHarmony驅(qū)動子系統(tǒng)核心源碼信息(包括驅(qū)動框架、配置管理、配置解析、驅(qū)動通用框架
    的頭像 發(fā)表于 03-21 20:29 ?495次閱讀
    鴻蒙開發(fā)實戰(zhàn):【<b class='flag-5'>Hdf</b> Framework】

    OpenHarmony4.0源碼解析之媒體框架

    及 audio-source 插件調(diào)用音頻框架的播放及采集功能來實現(xiàn)音頻的播放與錄制;通過 surface-sink 調(diào)用圖形框架,video-decoder 調(diào)用解碼驅(qū)動
    的頭像 發(fā)表于 02-26 22:05 ?906次閱讀
    <b class='flag-5'>OpenHarmony</b>4.0源碼解析之媒體<b class='flag-5'>框架</b>

    【鴻蒙】OpenHarmony 4.0藍(lán)牙代碼結(jié)構(gòu)簡析

    OpenHarmony 4.0藍(lán)牙代碼結(jié)構(gòu)簡析前言 OpenHarmony 4.0上藍(lán)牙倉和目錄結(jié)構(gòu)進(jìn)行一次較大整改,本文基于4.0以上版本對藍(lán)牙代碼進(jìn)行分析,便于讀者快速了解和學(xué)習(xí)
    的頭像 發(fā)表于 02-26 16:08 ?1538次閱讀
    【鴻蒙】<b class='flag-5'>OpenHarmony</b> 4.0藍(lán)牙代碼結(jié)構(gòu)簡析

    光伏逆變器拓?fù)?b class='flag-5'>概述及關(guān)鍵技術(shù)

    光伏逆變器拓?fù)?b class='flag-5'>概述及關(guān)鍵技術(shù)
    的頭像 發(fā)表于 02-21 09:47 ?797次閱讀
    光伏逆變器拓?fù)?b class='flag-5'>概述及</b>關(guān)鍵技術(shù)

    OpenHarmony 之 NAPI 框架介紹

    環(huán)境中的 JS 變量與方法。 OpenHarmony 中的 NAPI OpenAtom OpenHarmony(以下簡稱 “OpenHarmony”)應(yīng)用層基于 javascript 語言開發(fā),而系統(tǒng)
    的頭像 發(fā)表于 02-01 17:34 ?692次閱讀
    <b class='flag-5'>OpenHarmony</b> 之 NAPI <b class='flag-5'>框架</b>介紹

    啟動System Init進(jìn)入OpenHarmony系統(tǒng)過程分析與適配

    1 關(guān)鍵字 啟動、Init、產(chǎn)品配置、啟動配置 2 簡要描述 本文檔主要以XX開發(fā)版為例分析OpenHarmony系統(tǒng)啟動過程、產(chǎn)品配置、啟動配置,并舉例說明如何配置。 內(nèi)核加載Ini
    發(fā)表于 01-26 10:04

    OpenHarmony社區(qū)運(yùn)營報告(2023年12月)

    17.5 萬行(未包含 Flutter)。 ? 九聯(lián)開鴻:貢獻(xiàn)芯片內(nèi)核驅(qū)動、HDF 驅(qū)動子系統(tǒng)、應(yīng)用樣例等領(lǐng)域特性,新增 13 萬行。 ? 潤開鴻:貢獻(xiàn)芯片開發(fā)板、原生應(yīng)用、ArkUI 等領(lǐng)域特性,新增
    發(fā)表于 01-10 15:44

    OpenHarmony開源GPU庫Mesa3D適配說明

    ,對下使用Gallium框架,屏蔽驅(qū)動差異。在RK3568中,panfrost對ARM GPU提供了非常好的開源驅(qū)動支持。 二、適配方法 在RK3568 GPU 開源庫mesa3D適配時,我們同時依賴
    發(fā)表于 12-25 11:38
    主站蜘蛛池模板: 回复术士勇者免费观看全集| 亚洲日韩在线观看| 冈本视频黄页正版| 日本无码毛片一区二区手机看| 北原多香子qvod| 日本乱子伦一区二区三区| 成人免费视频在| 少妇一夜未归暴露妓女身份| 国产3级在线| 午夜精品国产自在现线拍| 国产亚洲一区二区三区啪| 亚洲国产精品无码2019| 精品午夜寂寞影院在线观看| 张津瑜的9分58秒7段免费| 曼谷av女郎| CHINA末成年VIDEO学生| 日韩精品卡1卡2三卡四卡乱码 | 国产成人v视频在线观看| 色哟哟tv| 国产永久免费观看视频软件| 亚洲免费综合色视频| 久久久久嫩草影院精品| 97国产蝌蚪视频在线观看| 欧美精品专区第1页| 丰满老熟女白浆直流| 亚洲 欧美 国产 在线 日韩| 狠狠躁天天躁小说| 中文字幕一区中文亚洲| 免费国产久久啪在线| 超碰97av 在线人人操| 天天操人人射| 精子射到丝袜上图| 2020亚洲国产在线播放在线| 秋霞最新高清无码鲁丝片| 国产精品亚洲一区二区三区久久 | 狠狠躁天天躁小说| 最近中文字幕高清中文字幕MV| 青柠在线视频| 国产热久久精| 影888午夜理论不卡| 漂亮的保姆3集电影免费观看中文|