精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

HDF驅動框架中USB DDK的解析與開發指導

電子發燒友開源社區 ? 來源:HarmonyOS官方合作社區 ? 作者:HarmonyOS官方合作社 ? 2022-03-30 10:16 ? 次閱讀

HDF(Hardware Driver Foundation)驅動框架是HarmonyOS硬件生態開放的基礎,為開發者提供了驅動加載、驅動服務管理和驅動消息機制等驅動能力,讓開發者能精準且高效的開發驅動程序。本期,我們將為大家帶來HDF驅動框架中USB DDK的解析與指導。

一、USB DDK介紹

USB(Universal Serial Bus)通用串行總線,用于規范電腦與外部設備的連接和通訊,包含了主機端(Host)和設備端(Device)。其中,主機端負責USB總線中的數據傳輸及端口管理,設備端則可以連接各種外設,所以USB驅動開發又分為主機端驅動開發和設備端驅動開發。

由于基于內核態開發的USB驅動功能擴展性較差,目前開發者通常選擇Libusb庫進行USB驅動開發。該庫是一種跨平臺的用戶態開源USB通信庫,可以滿足開發者基于用戶態開發功能驅動的需求。但是,由于Libusb庫是完全按照USB協議來封裝接口的,所以需要開發者對USB協議要有較深的了解才能很好的使用,對開發者的要求相對較高,讓很多比較初級的開發者望而卻步。為了讓更多的開發者都能進行基于用戶態的USB驅動開發,HDF引入了USB DDK開發套件。
USB DDK(USB DriverDevelop Kit)是HDF驅動框架為開發者提供的USB驅動程序開發套件,包括USB Host DDK及USB Device DDK兩部分,支持基于用戶態開發USB設備驅動的同時,還提供了豐富的USB驅動開發能力,讓廣大開發者能精準且高效的開發USB驅動程序。下面,我們將一一道來。

1USB Host DDK

USB Host DDK給開發者提供了主機端USB驅動開發能力,按照功能分類三大類,分別是DDK初始化類、interface對象操作類及request對象操作類。并為開發者提供了普通模式和專家模式兩種開發模式。

普通模式下,開發者可通過USBDDK API直接完成相關USB數據讀寫操作,不需要過多關注底層傳輸細節。

專家模式下,開發者通過USB RAW API直接訪問OS平臺USB通道的接口,自定義實現更加復雜的功能。目的是給驅動層留有更靈活,更強大的擴展方案,同時也能夠兼容現有驅動,便于移植。

USBHost DDK架構如圖1所示:

HDF驅動框架中USB DDK的解析與開發指導

圖1 USB Host DDK架構

(1)USB Interface Pool

負責USBInterface管理。提供USB Interface申請和回收,USB Interface記錄設備端口信息以及資源。USB Interface Pool按照USB Port對USB Interface進行分類管理。同時,此模塊還提供了USB DDK API,方便開發者USB數據讀寫操作。

(2)USB Protocol Layer

提供USB協議封裝,根據USB協議對設備IO/控制命令的“翻譯/解析”,同時負責設備描述符的管理,根據USB Device上報的枚舉信息,匹配對應的描述符,并構建對應的USB Interface,并加入到USB Interface Pool中管理。

(3)Device IO Manager

負責USBIO請求管理,提供了同步IO和異步IO管理機制,對于異步IO,IO Manager負責將該請求記錄下來,然后通過Raw API Library提供的接口依次處理待發送的IO請求;當收到USB控制器應答的處理結果后,IO接收線程負責解析并上報處理結果給上層調用者。

(4)Raw API Library

抽象了底層OS能力,定義了統一的OS能力接口,對外提供了USB RAW API,讓開發者自定義實現更加復雜的驅動功能。

(5)OS Adapter

用于封裝與平臺(LinuxLiteOS)相關的操作,根據不同平臺配置編譯對應平臺的封裝接口。在Linux平臺上,訪問USBFS的操作,全部都封裝在這個模塊中;而在LiteOS平臺上,基于FreeBSD USB框架的設備訪問操作,對應的也都全部封裝在這個模塊中。

(6)PNP Notify

用于動態監測USB狀態變化,當有新設備添加/移除時,變化設備信息。同時將所有USB設備信息都通過KHDF上報給UHDF側的PNPNotify Manager模塊來完成加載/卸載第三方功能驅動。

2USB Device DDK

USB Device DDK給開發者提供了設備端USB驅動開發能力。例如,USB端口動態注冊和去注冊能力,開發者可以基于能力實現USB端口的動態添加和組合;動態實例化能力,支持根據動態下發設備、配置、接口及端點描述符創建設備實例及傳輸通道;用戶態的數據發送及接收能力,支持用戶態下發送及接收數據;復合設備能力,支持一個物理設備上多個邏輯設備,實現多個邏輯設備間隔離,并支持不同邏輯設備同時被不同的應用進程訪問。

USB Device DDK架構如圖2所示:

HDF驅動框架中USB DDK的解析與開發指導

圖2 USB Device DDK架構

(1)SDK IF

負責USB設備按照設備、接口、管道進行邏輯劃分,對配置管理、設備管理、IO管理進行封裝。此模塊還向開發者提供了設備創建、獲取接口、接收Event事件、收發數據等設備測驅動開發的能力接口。

(2)Configuration Manager

負責解析HCS文件描述的USB描述符信息,得到的USB描述符信息用于設備創建,同時模塊還提供了自定義屬性的讀取、創建、刪除、修改等操作。

(3)Device Manager

負責根據配置模塊解析的USB描述符,并根據USB描述符創建設備。同時模塊還負責獲取設備、刪除設備、獲取設備狀態,獲取設備上面接口信息。

(4)IO Manager

負責數據的讀寫,包括Events事件、數據讀寫完成事件的接受,支持同步和異步模式數據讀寫。

(5)Adapter IF

主要是對復合設備配置驅動及通用功能驅動設備節點操作進行封裝,為上層提供統一的設備管理接口。

6)Adapter該模塊由復合設備配置驅動及通用功能驅動提供。

二、USB DDK開發指導

相信大家已對USB DDK已經有了一定的認識。下面,我們來看看如何使用USB DDK來開發USB Host和USB Device驅動程序吧。

1USB Host的開發

USB Host(主機端驅動)主要完成協議封裝、設備管理、驅動安裝與卸載等。通過上文的介紹,開發者可通過USB DDK API和USB RAW API來實現主機端驅動。

1. USB DDK API的使用USB DDK API主要實現主機端USB數據讀寫操作,如圖3所示,是USB DDK API提供的部分接口。

HDF驅動框架中USB DDK的解析與開發指導

圖3 USB DDK API部分接口

使用步驟如下:

(1) 配置驅動匹配表,完成主機端驅動總體信息的配置,具體如下:

struct UsbPnpMatchIdTable {//驅動模塊名,該字段的值必須和驅動入口結構的moduleName一致const char *moduleName;//驅動對外發布服務的名稱,必須唯一const char *serviceName;//驅動私有數據匹配關鍵字const char *deviceMatchAttr;//從該字段開始(包含該字段)之后數據長度,以byte為單位uint8_t length;//USB驅動匹配規則uint16_t matchFlag;//廠商編號uint16_t vendorId;//產品編號uint16_t productId;//設備出廠編號,低16位uint16_t bcdDeviceLow;//設備出廠編號,高16位uint16_t bcdDeviceHigh;  //USB分配的設備類代碼uint8_t deviceClass;//USB分配的子類代碼uint8_t deviceSubClass;//USB分配的設備協議代碼uint8_t deviceProtocol;//接口類型,根據實際需要可填寫多個uint8_t interfaceClass[USB_PNP_INFO_MAX_INTERFACES];//接口子類型,根據實際需要可填寫多個uint8_t interfaceSubClass[USB_PNP_INFO_MAX_INTERFACES];//接口所遵循的協議,根據實際需要可填寫多個uint8_t interfaceProtocol[USB_PNP_INFO_MAX_INTERFACES];//接口的編號,根據實際需要可填寫多個uint8_t interfaceNumber[USB_PNP_INFO_MAX_INTERFACES];};
(左右滑動,查看更多)

其中matchFlag表示驅動匹配規則,每個bit表示一種匹配方式,其取值如下:
enum {    USB_PNP_NOTIFY_MATCH_VENDOR = 0x0001,    USB_PNP_NOTIFY_MATCH_PRODUCT = 0x0002,    USB_PNP_NOTIFY_MATCH_DEV_LOW = 0x0004,    USB_PNP_NOTIFY_MATCH_DEV_HIGH = 0x0008,    USB_PNP_NOTIFY_MATCH_DEV_CLASS = 0x0010,    USB_PNP_NOTIFY_MATCH_DEV_SUBCLASS = 0x0020,    USB_PNP_NOTIFY_MATCH_DEV_PROTOCOL = 0x0040,    USB_PNP_NOTIFY_MATCH_INT_CLASS = 0x0080,    USB_PNP_NOTIFY_MATCH_INT_SUBCLASS = 0x0100,    USB_PNP_NOTIFY_MATCH_INT_PROTOCOL = 0x0200,    USB_PNP_NOTIFY_MATCH_INT_NUMBER = 0x0400,};
(左右滑動,查看更多)

(2) USB主機端驅動開發工具包初始化,使用如下接口:
int32_t UsbInitHostSdk(struct UsbSession **session)
(左右滑動,查看更多)

(3) 待步驟2初始化完后獲取UsbInterface對象,使用如下接口:
const struct UsbInterface *UsbClaimInterface(const struct UsbSession *session, uint8_t busNum, uint8_t usbAddr, uint8_t interfaceIndex);
(左右滑動,查看更多)

(4) 打開步驟3獲取到的UsbInterface接口對象,獲取對應接口的UsbInterfaceHandle對象,使用如下接口:
UsbInterfaceHandle *UsbOpenInterface(const struct UsbInterface *interfaceObj);
(左右滑動,查看更多)

(5) 根據步驟4獲取到的UsbInterfaceHandle對象,獲取指定索引為pinpeIndex的pipeInfo信息,使用如下接口:
int32_t UsbGetPipeInfo(const UsbInterfaceHandle *interfaceHandle, uint8_t settingIndex, uint8_t pipeId, struct UsbPipeInfo *pipeInfo);
(左右滑動,查看更多)

(6) 為步驟4獲取到的UsbInterfaceHandle預先分配待發送的IO Request對象,使用如下接口:
struct UsbRequest *UsbAllocRequest(const UsbInterfaceHandle *interfaceHandle, int isoPackets, int length);
(左右滑動,查看更多)

(7) 根據輸入參數params填充步驟6預先分配的IO Request,使用如下接口:
int32_t UsbFillRequest(const struct UsbRequest *request, const UsbInterfaceHandle *interfaceHandle, const struct UsbRequestParams *params);
(左右滑動,查看更多)

(8) 提交IO Request對象,可以選擇同步或異步兩種模式,使用如下接口:
int32_t UsbSubmitRequestSync(const struct UsbRequest *request);//發送同步IO請求int32_t UsbSubmitRequestAsync(const struct UsbRequest *request);//發送異步IO請求
(左右滑動,查看更多)

2. USB RAW API 的使用

USB RAW API主要實現USB更加復雜的功能,如獲取描述符信息、獲取設備指針、復位設備、提交傳輸請求等,如圖4所示,是USB RAW API提供的部分接口。

HDF驅動框架中USB DDK的解析與開發指導

圖4 USB RAW API

使用步驟如下:

(1) 同USB DDK API的步驟1一樣,需先進行驅動匹配表配置。

(2) 初始化Host RAW,使用如下接口:
int32_t UsbRawInit(struct UsbSession **session);
(左右滑動,查看更多)

(3) 待步驟2完成后打開USB設備,使用如下接口:
UsbRawHandle *UsbRawOpenDevice(const struct UsbSession *session, uint8_t busNum, uint8_t usbAddr);
(左右滑動,查看更多)

(4) 待步驟3完成后獲取描述符,通過描述符獲取接口、端點信息,使用如下接口:
int32_t UsbRawGetConfigDescriptor(const UsbRawDevice *rawDev, uint8_t configIndex, struct UsbRawConfigDescriptor **config);
(左右滑動,查看更多)

(5) 分配Request,并根據不同的傳輸類型使用相應的接口對Request進行填充:
int32_t UsbRawFillBulkRequest(const struct UsbRawRequest *request, const UsbRawHandle *devHandle, const struct UsbRawFillRequestData *fillData);// 填充用于批量傳輸的請求int32_t UsbRawFillControlSetup(const unsigned char *setup, const struct UsbControlRequestData *requestData);int32_t UsbRawFillControlRequest(const struct UsbRawRequest *request, const UsbRawHandle *devHandle, const struct UsbRawFillRequestData *fillData);// 填充用于控制傳輸的請求int32_t UsbRawFillInterruptRequest(const struct UsbRawRequest *request, const UsbRawHandle *devHandle, const struct UsbRawFillRequestData *fillData);// 填充用于中斷傳輸的請求int32_t UsbRawFillIsoRequest(const struct UsbRawRequest *request, const UsbRawHandle *devHandle, const struct UsbRawFillRequestData *fillData);// 填充用于同步傳輸的請求
(左右滑動,查看更多)

(6) 提交IO Request對象,可以選擇同步或異步兩種模式,分別使用如下接口:
int32_t UsbRawSendControlRequest(const struct UsbRawRequest *request, const UsbRawHandle *devHandle, const struct UsbControlRequestData *requestData);//發送同步USB控制傳輸請求int32_t UsbRawSendBulkRequest(const struct UsbRawRequest *request, const UsbRawHandle *devHandle, const struct UsbRequestData *requestData);//發送同步USB批量傳輸請求int32_t UsbRawSendInterruptRequest(const struct UsbRawRequest *request, const UsbRawHandle *devHandle, const struct UsbRequestData *requestData);//發送同步執行USB中斷傳輸請求int32_t UsbRawSubmitRequest(const struct UsbRawRequest *request);//提交異步IO請求
(左右滑動,查看更多)

感興趣的小伙伴可點擊下方鏈接查看完整的USB Host開發代碼:https://gitee.com/openharmony/drivers_peripheral/tree/master/usb/serial/src

2USB Device的開發

USB Device(設備端驅動)主要實現設備管理、配置管理、IO管理、數據通信等。USB Deivce DDK給開發者提供了設備創建、獲取接口、接收Event事件、收發數據等驅動能力接口,如圖5所示:

HDF驅動框架中USB DDK的解析與開發指導

圖5 USB Device DDK開放的API

下面,我們將根據USB Deivce DDK提供的驅動能力接口來開發設備端驅動。

1. 構造描述符

首先,需構造描述符來說明設備的總體信息。開發者可以通過設備功能代碼及設備私有數據HCS兩種途徑進行配置,下面將分別介紹。

(1) 在設備功能代碼中配置描述符,配置代碼如下:
static struct UsbFnFunction g_acmFunction = {//功能描述符    .enable         = true,    .funcName       = "f_generic.a",    .strings        = g_acmStrings,    .fsDescriptors  = g_acmFsFunction,    .hsDescriptors  = g_acmHsFunction,    .ssDescriptors  = g_acmSsFunction,.sspDescriptors = NULL,};struct UsbFnFunction *g_functions[] = {#ifdef CDC_ECM    &g_ecmFunction,#endif#ifdef CDC_ACM    &g_acmFunction,#endifNULL};static struct UsbFnConfiguration g_masterConfig = {//配置描述符    .configurationValue = 1,    .iConfiguration     = USB_FUNC_CONFIG_IDX,    .attributes         = USB_CFG_BUS_POWERED,    .maxPower           = POWER,    .functions          = g_functions,};static struct UsbFnConfiguration *g_configs[] = {    &g_masterConfig,    NULL,};static struct UsbDeviceDescriptor g_cdcMasterDeviceDesc = {//設備描述符    .bLength            = sizeof(g_cdcMasterDeviceDesc),    .bDescriptorType    = USB_DDK_DT_DEVICE,    .bcdUSB             = CpuToLe16(BCD_USB),    .bDeviceClass       = 0,    .bDeviceSubClass    = 0,    .bDeviceProtocol    = 0,    .bMaxPacketSize0    = USB_MAX_PACKET_SIZE,    .idVendor           = CpuToLe16(DEVICE_VENDOR_ID),    .idProduct          = CpuToLe16(DEVICE_PRODUCT_ID),    .bcdDevice          = CpuToLe16(DEVICE_VERSION),    .iManufacturer      = USB_FUNC_MANUFACTURER_IDX,    .iProduct           = USB_FUNC_PRODUCT_IDX,    .iSerialNumber      = USB_FUNC_SERIAL_IDX,    .bNumConfigurations = 1,};static struct UsbFnDeviceDesc g_masterFuncDevice = {//描述符入口    .deviceDesc    = &g_cdcMasterDeviceDesc,    .deviceStrings = g_devStrings,    .configs       = g_configs,};
(左右滑動,查看更多)

(2) 在設備私有數據HCS中配置,配置代碼如下:
root {    module = "master";master_config {        match_attr         = "usbfn_master_driver";//該字段與device中deviceMatchAttr                                                             保持一致,否則無法找到的這個節點的信息。    use_hcs            = 1;                         //用戶可以用該值決定是否使用hcs配置信息    udc_name           = "100e0000.hidwc3_0";   //UDC的名字        usb_dev_desc       = "UsbDeviceDescriptor";//設備描述符的節點UsbDeviceDescriptor        usb_dev_string     = "UsbDeviceStrings";   //設備字符串的節點為UsbDeviceStrings        usb_configuration = "UsbConfigs";           //配置描述符的節點為UsbConfigs        ...   }}
(左右滑動,查看更多)

設備描述符的節點為UsbDeviceDescriptor,配置如下:
UsbDeviceDescriptor {            bLength            = 18;            bDescriptorType  = 0x01;            bcdUSB             = 0x0200;            bDeviceClass      = 0;            bDeviceSubClass  = 0;            bDeviceProtocol  = 0;            bMaxPacketSize0  = 0x40;            idVendor           = 0x0525;            idProduct          = 0xA4A7;            bcdDevice          = 0x0100;            manufacturer       = 0;            product             = 1;            serialnumber       = 2;            numConfigurations = 1;  }
(左右滑動,查看更多)

2. 創建設備

描述符構造完成后,使用UsbFnDeviceCreate函數創建一個USB設備,并傳入UDC控制器名和UsbFnDescriptorData結構體。實現代碼如下:

 if (useHcs == 0) {//使用代碼編寫的描述符        descData.type        = USBFN_DESC_DATA_TYPE_DESC;        descData.descriptor = &g_acmFuncDevice;    } else {             //使用hcs編寫的描述符        descData.type         = USBFN_DESC_DATA_TYPE_PROP;        descData.property    = acm->device->property;}   //創建設備    fnDev = (struct UsbFnDevice *) UsbFnCreateDevice(acm->udcName, &descData);
(左右滑動,查看更多)

3.獲取接口


設備創建后,使用UsbFnDeviceGetInterface函數獲取UsbInterface接口對象,并通過UsbFnGetInterfacePipeInfo函數獲取USB管道信息,實現代碼如下:

//獲取接口fnIface = (struct UsbFnInterface *)UsbFnGetInterface(fnDev, i);//獲取Pipe信息UsbFnGetInterfacePipeInfo(fnIface, i, &pipeInfo);//獲取Handlehandle = UsbFnOpenInterface(fnIface);//獲取控制(EP0)Requestreq = UsbFnAllocCtrlRequest(acm->ctrlIface.handle,            sizeof(struct UsbCdcLineCoding) + sizeof(struct UsbCdcLineCoding));//獲取Requestreq = UsbFnAllocCtrlRequest(acm->ctrlIface.handle,            sizeof(struct UsbCdcLineCoding) + sizeof(struct UsbCdcLineCoding));
(左右滑動,查看更多)

4. 接收Event事件

通過UsbFnStartRecvInterfaceEvent函數接收Event事件,并通過UsbFnEventCallback回調函數對Event事件做出響應,實現代碼如下:

//開始接收Event事件ret = UsbFnStartRecvInterfaceEvent(acm->ctrlIface.fn, 0xff, UsbAcmEventCallback, acm);//Event處理回調函數static void UsbAcmEventCallback(struct UsbFnEvent *event){struct UsbAcmDevice *acm = NULL;

    if (event == NULL || event->context == NULL) {        HDF_LOGE("%s: event is null", __func__);        return;    }

    acm = (struct UsbAcmDevice *)event->context;    switch (event->type) {        case USBFN_STATE_BIND:            HDF_LOGI("%s: receive bind event", __func__);            break;        case USBFN_STATE_UNBIND:            HDF_LOGI("%s: receive unbind event", __func__);            break;        case USBFN_STATE_ENABLE:            HDF_LOGI("%s: receive enable event", __func__);            AcmEnable(acm);            break;        case USBFN_STATE_DISABLE:            HDF_LOGI("%s: receive disable event", __func__);            AcmDisable(acm);            acm->enableEvtCnt = 0;            break;        case USBFN_STATE_SETUP:            HDF_LOGI("%s: receive setup event", __func__);            if (event->setup != NULL) {                AcmSetup(acm, event->setup);            }            break;        case USBFN_STATE_SUSPEND:            HDF_LOGI("%s: receive suspend event", __func__);            AcmSuspend(acm);            break;        case USBFN_STATE_RESUME:            HDF_LOGI("%s: receive resume event", __func__);            AcmResume(acm);            break;        default:            break;    }}
(左右滑動,查看更多)

5. 收發數據


可以選擇同步異步發送模式,實現代碼如下:

notify = (struct UsbCdcNotification *)req->buf;    ...    if (memcpy_s((void *)(notify + 1), length, data, length)  != EOK) {        return HDF_FAILURE;    }ret = UsbFnSubmitRequestAsync(req);//異步發送
(左右滑動,查看更多)

以上就是本期全部內容,通過本文的介紹相信你已經對USB DDK有了深刻的認識,期待廣大的開發者加入我們,一起豐富基于USB DDK的第三方驅動。

原文標題:USB DDK助你輕松實現USB驅動開發

文章出處:【微信公眾號:HarmonyOS官方合作社區】歡迎添加關注!文章轉載請注明出處。

審核編輯:湯梓紅


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • usb
    usb
    +關注

    關注

    60

    文章

    7903

    瀏覽量

    264046
  • DDK
    DDK
    +關注

    關注

    0

    文章

    5

    瀏覽量

    8717
  • 驅動開發
    +關注

    關注

    0

    文章

    130

    瀏覽量

    12065
  • HarmonyOS
    +關注

    關注

    79

    文章

    1967

    瀏覽量

    30033

原文標題:USB DDK助你輕松實現USB驅動開發

文章出處:【微信號:HarmonyOS_Community,微信公眾號:電子發燒友開源社區】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    USB開發指導資料

    USB開發指導資料[hide][/hide]
    發表于 04-17 00:00

    【信盈達】鴻蒙系統驅動程序--1、HDF開發指

    一次使用結束時,框架會通知驅動進行休眠操作。1.3驅動加載開發指導驅動必須基于HDF
    發表于 09-14 10:20

    HarmonyOS HDF驅動框架---驅動開發

    設備描述(必選)HDF框架加載驅動所需要的信息來源于HDF框架定義的驅動設備描述,因此基于
    發表于 09-16 17:59

    HarmonyOS HDF驅動框架---驅動服務管理

    (uint32_t inputCode){ // 驅動開發者實現業務邏輯 return 0;}驅動服務綁定到HDF框架
    發表于 09-16 18:03

    HarmonyOS HDF驅動框架---開發概述

    準、更高效的開發環境,力求做到一次開發,多系統部署。驅動加載HDF驅動加載包括按需加載和按序加載。按需加載
    發表于 09-16 18:06

    HarmonyOS HDF驅動框架---驅動消息機制管理

    :: Device { policy = 2; ...}配置驅動信息的服務設備節點權限(permission字段)是框架驅動創建設備節點的權限,默認是0666,
    發表于 09-16 18:09

    HarmonyOS HDF驅動框架---開發實例

    下面基于HDF框架,提供一個完整的樣例,包含配置文件的添加,驅動代碼的實現以及用戶狀態程序和驅動交互的流程。添加配置在HDF
    發表于 09-16 18:18

    OpenHarmony HDF 驅動框架介紹和驅動加載過程分析

    ,統一平臺底座的目的,從而幫助開發者實現驅動一次開發,多系統部署的效果。為了達成這個目標, OpenHarmony 系統 HDF 驅動
    發表于 08-31 15:51

    HDF驅動框架設計匯總分享

    1、HDF驅動框架之linux驅動開發介紹什么是驅動開發
    發表于 03-15 15:31

    HarmonyOS USB DDK助你輕松實現USB驅動開發

    驅動程序。 本期,我們將為大家帶來HDF驅動框架USB D
    發表于 03-28 19:31

    HDF驅動框架USB DDK解析指導

    驅動程序。本期,我們將為大家帶來HDF驅動框架USB DD
    發表于 03-29 09:24

    ZigBee2007視頻教程-應用開發指導

    ZigBee2007視頻教程-應用開發指導ZigBee2007視頻教程-應用開發指導ZigBee2007視頻教程-應用開發指導ZigBee2007視頻教程-應用開發指導
    發表于 12-29 10:31 ?19次下載

    OpenHarmony系統HDF驅動框架概述

    、內核解耦,來達到兼容不同內核,統一平臺底座的目的,從而幫助開發者實現驅動一次開發,多系統部署的效果。 為了達成這個目標, OpenHarmony 系統 HDF
    的頭像 發表于 09-03 09:29 ?4175次閱讀

    OpenHarmony HDF 驅動框架概述及加載過程分析

    、內核解耦,來達到兼容不同內核,統一平臺底座的目的,從而幫助開發者實現驅動一次開發,多系統部署的效果。 為了達成這個目標, OpenHarmony 系統 HDF
    的頭像 發表于 09-03 09:32 ?3629次閱讀
    OpenHarmony <b class='flag-5'>HDF</b> <b class='flag-5'>驅動</b><b class='flag-5'>框架</b>概述及加載過程分析

    USB DDK介紹與開發指導

    HDF(Hardware Driver Foundation)驅動框架是HarmonyOS硬件生態開放的基礎,為開發者提供了驅動加載、
    的頭像 發表于 04-06 11:37 ?3008次閱讀