日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

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

鴻蒙HDF架構(gòu):DeviceManager如何生成所有的host配套設施

鴻蒙系統(tǒng)HarmonyOS ? 來源:oschina ? 作者:悠然紅茶侯亮 ? 2020-10-14 14:01 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

我們闡述了在啟動DeviceManager這個核心服務時,是如何生成所有的host配套設施的,下面我們來進一步剖析細節(jié)。

我們已經(jīng)知道,一個Host對應一個DevHostServiceClnt和一個DevHostService,很明顯主要行為都包含在后者內(nèi)部。當后者啟動時,會執(zhí)行到DriverInstallerStartDeviceHost(),該函數(shù)又會調(diào)用DevHostServiceStartServie(),這些內(nèi)容在前一篇文章里都說過。

我們不用去想太多調(diào)用細節(jié),反正說起來就是要讓一個DevHostServiceClnt和一個DevHostService“掛接”(attach)起來,掛接的動作里會進一步在DevHostService里安裝設備驅(qū)動。這個掛接動作具體對應的函數(shù)就是DevmgrServiceClntAttachDeviceHost()。在上一篇文章里,我們沒有展開講這個函數(shù),現(xiàn)在就從它說起。為了便于閱讀,我將掛接動作的調(diào)用順序先繪制出來,如下圖所示:

1.掛接device Host

我用黃色框表達了DevmgrServiceClntAttachDeviceHost()一步,該函數(shù)代碼截選如下:

【drivers/hdf/frameworks/core/host/src/Devmgr_service_clnt.c】

int DevmgrServiceClntAttachDeviceHost(uint16_t hostId, struct IDevHostService *hostService)

{

struct IDevmgrService *devMgrSvcIf = NULL;

。 . 。 . 。 .

devMgrSvcIf = inst-》devMgrSvcIf;

。 . 。 . 。 .

// 實際調(diào)用的是DevmgrServiceAttachDeviceHost()

return devMgrSvcIf-》AttachDeviceHost(devMgrSvcIf, hostId, hostService);

}

最后一句實際調(diào)用的是DevmgrServiceAttachDeviceHost(),代碼截選如下:

【drivers/hdf/frameworks/core/manager/src/Devmgr_service.c】

static int DevmgrServiceAttachDeviceHost(

struct IDevmgrService *inst, uint16_t hostId, struct IDevHostService *hostService)

{

struct DevHostServiceClnt *hostClnt = DevmgrServiceFindDeviceHost(inst, hostId);

。 . 。 . 。 .

hostClnt-》deviceInfos = HdfAttributeManagerGetDeviceList(hostClnt-》hostId, hostClnt-》hostName);

。 . 。 . 。 .

hostClnt-》hostService = hostService;

return DevHostServiceClntInstallDriver(hostClnt);

}

首先,遍歷DevmgrService的hosts列表,根據(jù)hostId找到對應的DevHostServiceClnt對象,并給該DevHostServiceClnt對象的deviceInfos域和hostService域賦值,然后調(diào)用重頭戲DevHostServiceClntInstallDriver()。

在獲取這個host范疇的所有device信息時,也是去查詢上一篇文章提到的配置樹,樹節(jié)點的類型為DeviceResourceNode,只不過上一次系統(tǒng)是去查找具有“hdf_manager”屬性的節(jié)點,而此次是查找名字為hostName的節(jié)點,這個節(jié)點里包含著若干設備的信息,現(xiàn)在這些設備信息會被組織成一個HdfDeviceInfo鏈表。最終形成下面圖中的結(jié)構(gòu):

1.1安裝host范疇內(nèi)的設備驅(qū)動

1.1.1在每個host的DevHostService里添加設備

Attach動作的最后一步就是安裝驅(qū)動啦,我們看一下這個DevHostServiceClntInstallDriver()函數(shù):

【drivers/hdf/frameworks/core/manager/src/Devhost_service_clnt.c】

int DevHostServiceClntInstallDriver(struct DevHostServiceClnt *hostClnt)

{

。 . 。 . 。 .

struct HdfSListIterator it;

struct HdfDeviceInfo *deviceInfo = NULL;

struct IDevHostService *devHostSvcIf = NULL;

。 . 。 . 。 .

devHostSvcIf = (struct IDevHostService *)hostClnt-》hostService;

。 . 。 . 。 .

HdfSListIteratorInit(&it, hostClnt-》deviceInfos);

while (HdfSListIteratorHasNext(&it)) {

deviceInfo = (struct HdfDeviceInfo *)HdfSListIteratorNext(&it);

if ((deviceInfo == NULL) || (deviceInfo-》preload != DEVICE_PRELOAD_ENABLE)) {

continue;

}

// 實際調(diào)用的是 DevHostServiceAddDevice()

ret = devHostSvcIf-》AddDevice(devHostSvcIf, deviceInfo);

。 . 。 . 。 .

}

return HDF_SUCCESS;

}

其實就是遍歷一下該host范疇內(nèi)的所有HdfDeviceInfo節(jié)點,如果節(jié)點的preload是“使能”的,就執(zhí)行對應的AddDevice操作,即DevHostServiceAddDevice()函數(shù),其代碼截選如下:

【drivers/hdf/frameworks/core/host/src/Devhost_service.c】

static int DevHostServiceAddDevice(struct IDevHostService *inst,

const struct HdfDeviceInfo *deviceInfo)

{

int ret = HDF_FAILURE;

struct HdfDevice *device = NULL;

struct HdfDeviceNode *devNode = NULL;

struct DevHostService *hostService = (struct DevHostService *)inst;

struct IDriverLoader *driverLoader = HdfDriverLoaderGetInstance();

。 . 。 . 。 .

device = DevHostServiceGetDevice(hostService, deviceInfo-》deviceId);

。 . 。 . 。 .

// 實際調(diào)用的是 HdfDriverLoaderLoadNode()

devNode = driverLoader-》LoadNode(driverLoader, deviceInfo);

。 . 。 . 。 .

devNode-》hostService = hostService;

// 實際調(diào)用的是 HdfDeviceAttach()

ret = device-》super.Attach(&device-》super, devNode);

。 . 。 . 。 .

return HDF_SUCCESS;

。 . 。 . 。 .

}

在這個函數(shù)里,先調(diào)用DevHostServiceGetDevice()嘗試從DevHostService的devices列表里查找與deviceId匹配的節(jié)點,如果找不到就創(chuàng)建一個新HdfDevice節(jié)點,并插入該列表。

當然,一開始devices列表是個空列表,此時只會創(chuàng)建新節(jié)點。反正經(jīng)此一步,我們一般可以拿到一個可用的HdfDevice對象。接著利用驅(qū)動加載器加載一個和deviceInfo匹配的HdfDeviceNode節(jié)點。最后還需把得到的HdfDevice和HdfDeviceNode掛接起來。

1.1.1.1加載HdfDeviceNode

加載HdfDeviceNode的動作實際上是HdfDriverLoaderLoadNode(),代碼截選如下:

【drivers/hdf/frameworks/core/host/src/Hdf_driver_loader.c】

static struct HdfDeviceNode *HdfDriverLoaderLoadNode(

struct IDriverLoader *loader, const struct HdfDeviceInfo *deviceInfo)

{

struct HdfDriverEntry *driverEntry = NULL;

struct HdfDeviceNode *devNode = NULL;

。 . 。 . 。 .

// 實際調(diào)用的是 HdfDriverLoaderGetDriverEntry()

driverEntry = loader-》GetDriverEntry(deviceInfo);

。 . 。 . 。 .

devNode = HdfDeviceNodeNewInstance();

。 . 。 . 。 .

devNode-》driverEntry = driverEntry;

devNode-》deviceInfo = deviceInfo;

devNode-》deviceObject.property = HcsGetNodeByMatchAttr(HcsGetRootNode(),

deviceInfo-》deviceMatchAttr);

。 . 。 . 。 .

if ((deviceInfo-》policy == SERVICE_POLICY_PUBLIC) || (deviceInfo-》policy == SERVICE_POLICY_CAPACITY)) {

。 . 。 . 。 .

if (driverEntry-》Bind(&devNode-》deviceObject) != 0) {

HDF_LOGE(“bind driver failed”);

HdfDeviceNodeFreeInstance(devNode);

return NULL;

}

}

return devNode;

}

HdfDeviceNode的定義如下:

【drivers/hdf/frameworks/core/host/include/Hdf_device_node.h】

struct HdfDeviceNode {

struct IDeviceNode super;

struct HdfSListNode entry;

struct PowerStateToken *powerToken;

struct DevHostService *hostService;

struct HdfDeviceObject deviceObject;

struct IHdfDeviceToken *token;

struct HdfDriverEntry *driverEntry;

const struct HdfDeviceInfo *deviceInfo;

};

可以看到,驅(qū)動加載器在創(chuàng)建HdfDeviceNode節(jié)點時,還是有一些工作要做的:

1)得加載相應設備的驅(qū)動程序入口,最終體現(xiàn)為HdfDriverEntry;

2)創(chuàng)建一個HdfDeviceNode對象,經(jīng)過研究,我們可以看到最終創(chuàng)建的其實是HdfDeviceNode的派生類(DeviceNodeExt)對象;

3)把HdfDeviceNode節(jié)點和設備驅(qū)動程序綁定起來;

1.1.1.1.1獲取驅(qū)動入口

驅(qū)動加載器獲取HdfDriverEntry的實際動作是HdfDriverLoaderGetDriverEntry():

【drivers/hdf/lite/manager/src/Lite_driver_loader.c】

struct HdfDriverEntry *HdfDriverLoaderGetDriverEntry(

const struct HdfDeviceInfo *deviceInfo)

{

int count = (int) (((uint8_t *)(HDF_DRIVER_END()) - (uint8_t *)(HDF_DRIVER_BEGIN())) / sizeof(size_t));

size_t *addrBegin = (size_t*)(HDF_DRIVER_BEGIN());

if ((deviceInfo == NULL) || (deviceInfo-》moduleName == NULL) || (deviceInfo-》svcName == NULL)) {

HDF_LOGE(“Hdf get device entry failed, input deviceInfo is NULL!”);

return NULL;

}

for (int i = 0; i 《 count; i++) {

struct HdfDriverEntry *driverEntry = (struct HdfDriverEntry *)(*addrBegin);

if (strcmp(deviceInfo-》moduleName, driverEntry-》moduleName) == 0) {

return driverEntry;

}

addrBegin++;

}

HDF_LOGE(“Hdf get %s device entry failed!”, deviceInfo-》svcName);

return NULL;

}

其中,HdfDriverEntry的定義如下:

【drivers/hdf/frameworks/include/core/Hdf_device_desc.h】

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);

};

現(xiàn)在我們來解釋一下,HdfDriverLoaderGetDriverEntry()到底在干什么。我們設想,HDF會先加載需要的所有驅(qū)動程序,每個驅(qū)動程序內(nèi)部都會構(gòu)造一個HdfDriverEntry對象,而且會填好那個Bind域,這其實就是在填寫一個回調(diào)函數(shù)指針,當然,也只有驅(qū)動程序自己知道該填寫哪個函數(shù)指針。

HDF會把加載的所有驅(qū)動的HdfDriverEntry對象的起始地址匯總起來,形成一個類似地址數(shù)組的東西,這個數(shù)組的第一項的地址對應上面代碼中的HDF_DRIVER_BEGIN(),最后一項的地址對應HDF_DRIVER_END()(最后一項不填內(nèi)容)。示意圖如下:

獲取驅(qū)動入口時,就是在遍歷這個指針數(shù)組,查詢與moduleName匹配的節(jié)點。

1.1.1.1.2 創(chuàng)建HdfDeviceNode對象

接著嘗試創(chuàng)建HdfDeviceNode對象,此時調(diào)用的HdfDeviceNodeNewInstance()函數(shù)如下:

【drivers/hdf/frameworks/core/host/src/Hdf_device_node.c】

struct HdfDeviceNode *HdfDeviceNodeNewInstance()

{

return (struct HdfDeviceNode *)HdfObjectManagerGetObject(HDF_OBJECT_ID_DEVICE_SERVICE);

}

又需要去查我們熟悉的對象創(chuàng)建表(g_liteObjectCreators),最終查到會調(diào)用DeviceNodeExtCreate():

【drivers/hdf/lite/manager/src/Hdf_device_node_ext.c】

struct HdfObject *DeviceNodeExtCreate()

{

struct DeviceNodeExt *instance =

(struct DeviceNodeExt *)OsalMemCalloc(sizeof(struct DeviceNodeExt));

if (instance != NULL) {

DeviceNodeExtConstruct(instance);

instance-》ioService = NULL;

}

return (struct HdfObject *)instance;

}

可以看到,實際創(chuàng)建的是一個DeviceNodeExt對象。DeviceNodeExt繼承于HdfDeviceNode,定義如下:

【drivers/hdf/lite/include/manager/Hdf_device_node_ext.h】

struct DeviceNodeExt {

struct HdfDeviceNode super;

struct HdfIoService *ioService;

};

其構(gòu)造函數(shù)如下:

【drivers/hdf/lite/manager/src/Hdf_device_node_ext.c】

static void DeviceNodeExtConstruct(struct DeviceNodeExt *inst)

{

struct IDeviceNode *nodeIf = (struct IDeviceNode *)inst;

if (nodeIf != NULL) {

HdfDeviceNodeConstruct(&inst-》super);

nodeIf-》PublishService = DeviceNodeExtPublishService;

}

}

注意,它修改了繼承來的PublishService域,將函數(shù)指針設為DeviceNodeExtPublishService了。

HdfDriverLoaderLoadNode()會給DeviceNodeExt的driverEntry域、deviceInfo域、deviceObject.property賦值,那么在進行綁定之前,DeviceNodeExt的示意圖大概是這樣的:

1.1.1.1.3 綁定驅(qū)動入口

接下來要將剛剛創(chuàng)建的DeviceNodeExt節(jié)點和驅(qū)動入口綁定起來:

driverEntry-》Bind(&devNode-》deviceObject)

前文我們已經(jīng)說了,每個程序會實現(xiàn)自己的Bind動作,而HDF只負責回調(diào)Bind。注意,回調(diào)時HDF需要傳入DeviceNodeExt節(jié)點的deviceObject部分的指針,因為需要驅(qū)動程序填寫其中的域。當然,我們從上圖中可以看到,deviceObject部分只剩下service域(IDeviceIoService*)需要填寫。那么很明顯,一個驅(qū)動程序要能被HDF使用,那么它就得包含一個IDeviceIoService對象。IDeviceIoService的定義如下:

【drivers/hdf/frameworks/include/core/Hdf_device_desc.h】

struct IDeviceIoService {

struct HdfObject object;

int32_t (*Open)(struct HdfDeviceIoClient *client);

int32_t (*Dispatch)(struct HdfDeviceIoClient *client, int cmdId, struct HdfSBuf *data,

struct HdfSBuf *reply);

void (*Release)(struct HdfDeviceIoClient *client);

};

現(xiàn)在我們可以基于前文示意圖,繪制一張DeviceNodeExt和驅(qū)動程序綁定后的示意圖了,如下圖:

1.1.1.2 掛接HdfDeviceNode

DevHostServiceAddDevice()在加載好DeviceNodeExt之后,調(diào)用了一句Attach:

ret = device-》super.Attach(&device-》super, devNode);

嘗試把HdfDevice節(jié)點和DeviceNodeExt聯(lián)系起來,這一句其實是調(diào)用HdfDeviceAttach(),相關代碼如下:

【drivers/hdf/frameworks/core/host/include/Hdf_device.h】

struct IHdfDevice {

struct HdfObject object;

int (*Attach)(struct IHdfDevice *, struct HdfDeviceNode *);

};

struct HdfDevice {

struct IHdfDevice super;

struct HdfSListNode node;

struct HdfSList services;

uint16_t deviceId;

uint16_t hostId;

};

【drivers/hdf/frameworks/core/host/src/Hdf_device.c】

static int HdfDeviceAttach(struct IHdfDevice *devInst, struct HdfDeviceNode *devNode)

{

struct HdfDevice *device = (struct HdfDevice *)devInst;

struct IDeviceNode *nodeIf = (struct IDeviceNode *)devNode;

。 . 。 . 。 .

HdfSListAdd(&device-》services, &devNode-》entry);

// 實際調(diào)用的是 HdfDeviceLaunchNode()

return nodeIf-》LaunchNode(devNode, devInst);

}

代碼里先將DeviceNodeExt添加進HdfDevice的services列表里,然后調(diào)用了HdfDeviceLaunchNode()。

我們前文已經(jīng)說過,HdfDevice節(jié)點在之前已經(jīng)添加進DevHostService的devices列表了,現(xiàn)在它又和DeviceNodeExt聯(lián)系起來了,再結(jié)合前文中的知識,我們可以畫一張大一點兒的關系示意圖了,如下:

至此,相信大家已經(jīng)基本了解掛接設備host所形成的數(shù)據(jù)結(jié)構(gòu)了,正如上圖所示,每個host都會對應上圖中紅、綠、藍三個范疇。大家不妨自己試著畫畫這張圖,看看還會發(fā)現(xiàn)什么。至于HDF的其他方面,我們可以在其他文章里再探討。
編輯:hfy

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    開源鴻蒙賦能水務智能化,觸覺智能IPC3528水務鴻蒙網(wǎng)關

    方案商,緊隨鴻蒙生態(tài)腳步,基于智慧水務領域應用需求,推進硬件產(chǎn)品配套與場景化適配。目前,旗下基于RK3568平臺的IDO-IPC3528工控機,依托公司在開源鴻蒙
    的頭像 發(fā)表于 04-21 10:42 ?438次閱讀
    開源<b class='flag-5'>鴻蒙</b>賦能水務智能化,觸覺智能IPC3528水務<b class='flag-5'>鴻蒙</b>網(wǎng)關

    支付寶FluidMarkdown鴻蒙版正式開源

    ,F(xiàn)luidMarkdown 鴻蒙版不僅顯著提升了鴻蒙 AI 應用的文本渲染體驗,也為開發(fā)者帶來了更便捷、更流暢、高度可定制的開發(fā)能力,助力構(gòu)建鴻蒙生態(tài)下的 AI 渲染基礎設施。
    的頭像 發(fā)表于 12-26 13:42 ?835次閱讀

    大模型支撐后勤保障方案生成系統(tǒng):功能特點與平臺架構(gòu)解析

    ? ? 大模型支撐后勤保障方案生成系統(tǒng):功能特點與平臺架構(gòu)解析 ? ?大模型支撐后勤保障方案生成系統(tǒng)憑借智能預測、動態(tài)調(diào)度、路徑優(yōu)化、庫存管理及可視化展示等核心能力,為后勤保障方案生成
    的頭像 發(fā)表于 12-17 15:49 ?433次閱讀

    生成式AI賦能虛擬調(diào)試——fe.screen-sim的架構(gòu)價值

    生成式AI賦能虛擬調(diào)試——fe.screen-sim的架構(gòu)價值
    的頭像 發(fā)表于 12-04 14:59 ?1234次閱讀
    <b class='flag-5'>生成</b>式AI賦能虛擬調(diào)試——fe.screen-sim的<b class='flag-5'>架構(gòu)</b>價值

    深度休眠狀態(tài)下外部所有的IO都可以喚醒MCU嗎?

    深度休眠狀態(tài)下,外部所有的IO都可以喚醒MCU嗎?
    發(fā)表于 12-04 06:00

    鴻蒙星光盛典見證生態(tài)碩果!深開鴻斬獲開源鴻蒙雙項榮譽

    ,獲評“開源鴻蒙TOP共建單位”殊榮。截至目前,深開鴻在開源鴻蒙社區(qū)主倉代碼貢獻量已突破630萬行,在除華為外的所有生態(tài)廠商中位列第一,充分彰顯了其深厚的技術積累
    的頭像 發(fā)表于 12-02 15:17 ?858次閱讀
    <b class='flag-5'>鴻蒙</b>星光盛典見證生態(tài)碩果!深開鴻斬獲開源<b class='flag-5'>鴻蒙</b>雙項榮譽

    eVTOL增程式發(fā)電配套系統(tǒng)解決方案:一種基于燃油-潤滑油耦合散熱的新型架構(gòu)

    增程式發(fā)電配套系統(tǒng)以其創(chuàng)新的技術架構(gòu),為行業(yè)開辟了一條全新的突圍路徑。該系統(tǒng)創(chuàng)造性地采用"燃油發(fā)電+電池儲能"混合架構(gòu),通過高效微型渦輪發(fā)電機或先進轉(zhuǎn)子發(fā)動機,將燃油化學能實時轉(zhuǎn)化為電能,為電池組持續(xù)"空中充電"。
    的頭像 發(fā)表于 09-19 10:34 ?1606次閱讀
    eVTOL增程式發(fā)電<b class='flag-5'>配套</b>系統(tǒng)解決方案:一種基于燃油-潤滑油耦合散熱的新型<b class='flag-5'>架構(gòu)</b>

    【HarmonyOS 5】鴻蒙mPaaS詳解

    【HarmonyOS 5】鴻蒙mPaaS詳解 ##鴻蒙開發(fā)能力 ##HarmonyOS SDK應用服務##鴻蒙金融類應用 (金融理財# 一、mPaaS是什么? mPaaS 是 Mobile
    的頭像 發(fā)表于 07-11 18:23 ?1036次閱讀
    【HarmonyOS 5】<b class='flag-5'>鴻蒙</b>mPaaS詳解

    鴻蒙NEXT-鴻蒙三層架構(gòu)搭建,嵌入HMRouter,實現(xiàn)便捷跳轉(zhuǎn),新手攻略。(1/3)

    摘要:本文詳細介紹了搭建鴻蒙三層架構(gòu)的具體步驟,包括公共能力層、基礎特性層和產(chǎn)品定制層的創(chuàng)建。首先需在AGC控制臺創(chuàng)建項目并關聯(lián)應用包名,然后在DevEcoStudio中新建項目,依次創(chuàng)建
    的頭像 發(fā)表于 06-30 22:17 ?1023次閱讀
    <b class='flag-5'>鴻蒙</b>NEXT-<b class='flag-5'>鴻蒙</b>三層<b class='flag-5'>架構(gòu)</b>搭建,嵌入HMRouter,實現(xiàn)便捷跳轉(zhuǎn),新手攻略。(1/3)

    迅為RK3568開發(fā)板實操-HDF驅(qū)動配置UART

    /hdf_config/khdf/device_info/device_info.hcs 文件, device_info.hcs 中添加以下內(nèi)容: 1、device3 :: deviceNode { 2
    的頭像 發(fā)表于 06-27 15:58 ?704次閱讀

    鴻蒙5開發(fā)寶藏案例分享---應用架構(gòu)實戰(zhàn)技巧

    大家好! 今天咱們聊聊鴻蒙開發(fā)中那些“官方文檔提了但實際開發(fā)難找”的架構(gòu)設計技巧。結(jié)合官方文檔,我會用 真實代碼案例+通俗講解 ,幫你把分層架構(gòu)和線程通信落地到項目里,告別“理論會了,代碼不會
    發(fā)表于 06-12 16:14

    Kuikly鴻蒙版正式開源 —— 揭秘卓越性能適配之旅

    端的基礎能力和設施,包括豐富的跨端組件,完善的調(diào)試、構(gòu)建、發(fā)布、監(jiān)控配套工具鏈,穩(wěn)定性監(jiān)控能力等。 Kuikly框架優(yōu)勢: 一碼五端,支持Android、iOS、鴻蒙、Web、小程序5個平臺(Web
    發(fā)表于 06-04 16:46

    迅為RK3568開發(fā)板實操-HDF驅(qū)動配置UART-修改HCS配置

    deviceMatchAttr 的值表示驅(qū)動的私有配置信息 5 serviceName 表示服務名稱,服務加載成功之后會在開發(fā)板的/dev/目錄下生成節(jié)點。例如 HDF_PLATFORM_UART_9 后面跟著的數(shù)據(jù) 9 是 UartOpen()的端口號
    發(fā)表于 05-22 11:32

    開源鴻蒙開發(fā)新體驗,開鴻Bot系列今日開啟預售!

    技術支持與配套文檔資源支持、打造開源鴻蒙開發(fā)者的“標準配置”等,這將進一步降低開發(fā)者參與開源鴻蒙生態(tài)建設的門檻。 開鴻Bot系列的推出,開啟了開源鴻蒙在桌面操作系統(tǒng)領域的新探索。作為集
    發(fā)表于 05-16 14:13

    成都匯陽投資關于華為鴻蒙PC 操作系統(tǒng)發(fā)布,相關公司迎來發(fā)展

    電腦技術與生態(tài)溝通會上正式亮相,展示了其 UI設計 、辦公特點 、系統(tǒng)生態(tài) 、設備互聯(lián) 、安全架構(gòu)和 AI 能力等 。該系統(tǒng)由鴻蒙底座 、鴻蒙生態(tài)和鴻蒙體驗三大核心板塊組成, 采用了全
    的頭像 發(fā)表于 05-12 09:39 ?1433次閱讀
    青冈县| 南平市| 宽甸| 陇西县| 句容市| 浦县| 平江县| 江西省| 绥化市| 隆化县| 桑日县| 虞城县| 扶绥县| 昌乐县| 太康县| 舒兰市| 沙湾县| 灌南县| 惠州市| 茌平县| 仁化县| 分宜县| 乐安县| 武义县| 鄄城县| 敖汉旗| 屯门区| 邵阳县| 河津市| 定陶县| 宜都市| 绥棱县| 阿拉善左旗| 谢通门县| 容城县| 萝北县| 田东县| 南平市| 冀州市| 谷城县| 且末县|