在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

HDF Display驅動模型的整體架構加載及運行流程

電子工程師 ? 來源:OpenAtom OpenHarmony ? 作者:翟海鵬 ? 2021-09-05 10:51 ? 次閱讀

Display 驅動概述

隨著電子產業迅速發展,帶屏類的設備種類日益增多,各種各樣的顯示屏也隨之出現。

最常見的顯示屏有 LCD(Liquid Crystal Display)屏、LEDOrganicLight-Emitting Diode)點陣屏、OLED(Organic Light-EmittingDiode)屏等,根據其各自特點,用于不同的顯示場景。顯示屏的硬件接口主要有 MIPI、HDMI、SPI、I2C、RGB、MCU 等,現在用于手機的高分辨率顯示屏,主要用的是 MIPI 接口,HDMI 接口主要用于顯示器或 TV,RGB 和 MCU 接口為并口,主要用于功能機之上。

以 LCD 為例,其驅動主要完成三部分工作:

1、對 LCD Driver IC 及模組相關的硬件資源進行初始化,包括配置 MIPI 參數,操作 GPIO 管腳,設置上下電時序,下發屏端初始化參數序列等;

2、器件驅動操作接口對注冊或者對接到標準的顯示框架上,例如 DRM 架構或者 FB 顯示架構,保證在設備亮滅屏狀態切換時,顯示架構可以通過 panel 驅動注冊的接口操控 LCD;

3、背光參數配置及等級設置等。

Display驅動模型介紹

驅動模型背景

當前操作系統和 SOC 種類繁多,各廠商的顯示屏器件也各有不同,隨之針對器件的驅動代碼也不盡相同,往往是某一款器件驅動,只適用于某單一內核系統或 SOC,如果要遷移到其他內核或者 SOC,可能會有不小的移植工作量。而且,不同驅動 IC 的驅動代碼差異較大,產品更換驅動 IC,則又需要重新開發對應的器件驅動,造成重復工作。因此,我們嘗試基于 HDF 驅動框架,編寫一套較通用的 Display 器件驅動模型,盡可能降低驅動開發者的開發或移植工作量,簡化器件驅動開發,提升開發效率。

190266be-0da6-11ec-8fb8-12bb97331649.png

圖1 HDF Display驅動模型層次關系

以顯示模塊為例,上層為圖形服務;中間層為 HDI 層(Hardware Display Interface),對圖形服務提供驅動能力接口,方便其操作具體的外設器件;顯示驅動模型當前部署在內核態,向上對接到 Display HDI 的實現,同時在內核對接到標準的顯示框架上(如DRM、FB);向下對接不同的 panel 驅動,從而自上而下打通顯示通路,驅動屏幕點亮。

驅動模型通過逐步兼容不同的顯示框架(DRM、FB)及差異化的 SOC,開發者可基于其快速開發顯示屏器件驅動。

驅動模型解析

顯示驅動模型基于 HDF 驅動框架、Platform 接口及 OSAL 接口開發,可以屏蔽不同內核形態(LiteOS、Linux)差異,適用于不同芯片平臺(Hi35xx、Hi38xx、V3S等),為顯示屏器件提供統一的驅動平臺。

當前驅動模型主要部署在內核態中,向上對接到 Display 公共 hal 層,輔助 HDI 的實現。顯示驅動通過 Display-HDI 層對圖形服務暴露顯示屏驅動能力;向下對接顯示屏 panel 器件,驅動屏幕正常工作,自上而下打通顯示全流程通路。

模型各層設計說明

Display 驅動模型基于 HDF 驅動框架、Platform 接口及 OSAL 接口開發,可以做到不區分OS(LiteOS、Linux)和芯片平臺(Hi35xx、Hi38xx、V3S等),為 LCD 器件提供統一的驅動模型。

如圖 2 所示,當前 HDF Display 驅動模型主要分為四層:標準架構適配層(DRM Panel Adapter Driver)、顯示公共驅動層(DisplayCommon Driver)、芯片平臺適配層(SoC Adapter Driver)、器件驅動層(Display Panel Driver)。

1、標準架構適配層

194972fc-0da6-11ec-8fb8-12bb97331649.png

圖3. 標準架構適配層組件

如圖 3 所示,本層主要完成對接標準的顯示驅動架構,如 DRM(Direct Rending Manager)或 FB(Framebuffer),以 DRM 為例,將 panel 側驅動接口對接到標準框架中,保證在 DRM 框架中實現對 Panel 驅動的操作接口,當前注冊的接口如下。

static struct drm_panel_funcs g_hdfDrmPanelFuncs = { .get_modes = HdfDrmPanelGetModes, .enable = HdfDrmPanelEnable, .disable = HdfDrmPanelDisable, .prepare = HdfDrmPanelPrepare, .unprepare = HdfDrmPanelUnprepare,};

2、顯示公共驅動層

1963f730-0da6-11ec-8fb8-12bb97331649.png

圖4. 顯示公共驅動層組件

如圖 4 所示,此部分屬于整個驅動模型的中樞,所有的屏端接口注冊、Panel 信息管理、屏幕狀態控制、用戶態 HDI 接口命令處理、以及通用的基礎顯示特性,目前都是通過這部分實現。

在本層通過結構體 DispManager 管理所有的顯示信息,其成員 PanelManager 用于記錄與顯示屏相關的接口及參數信息。同時接收并處理 HDI 層直接對 panel 操作相關的指令(主要用于 L0-L1 等輕量級系統),如 Panel 器件信息的獲取、休眠喚醒、背光設置等指令。此外,本層還負責實現一些基礎顯示特性的業務框架,如 ESD 檢查機制,力求將顯示相關的共有邏輯集中到本層實現,以簡化 Panel 器件驅動的實現,避免 panel 驅動中相同功能的重復實現,便于統一管理和維護。

3、芯片平臺適配層

196d125c-0da6-11ec-8fb8-12bb97331649.png

圖5. 芯片平臺適配層組件

如圖 5 所示,借助此 SoC 適配層,實現 Display 器件驅動和 SoC 側硬件資源的解耦,主要完成芯片平臺強相關的參數配置,如 mipi 速率計算及設置、管腳復用配置,以及其他和 SoC 強相關的差異化配置及初始化等。

4、器件驅動層

198c77a0-0da6-11ec-8fb8-12bb97331649.png

圖6. 器件驅動層組件

如圖 6 所示,器件驅動層主要實現和器件自身強相關的驅動適配接口,例如發送初始化序列、休眠喚醒流程、背光設置、ESD 檢測等,同時完成 panel 信息的解析,并將 panel 向上注冊到公共驅動層進行管理。

基于 Display 驅動模型開發 LCD 器件驅動,可以借助平臺提供的各種能力及接口,較大程度的降低器件驅動的開發難度和周期,提升開發效率。

說明

以上驅動模型中的各層,需要根據產品自身情況來選擇,其中“顯示公共驅動層”和“器件驅動層”為必選項,“標準架構適配層”和“芯片平臺適配層”則為可選項。對于L0-L1這種輕量級SoC,一般都會有與SoC強相關的硬件配置需要在“芯片平臺適配層”中完成,而對于L2及其以上的SoC,通常都會采用標準的顯示框架,此時“標準架構適配層”則必不可少。

驅動加載及運行

HDF 的驅動的加載方式,在之前的 HDF 框架介紹章節中已經做過說明,框架通過解析設備描述的 hcs 配置文件,獲取到各設備的配置信息,根據 moduleName 來匹配對應設備的驅動文件入口,按照配置的加載優先級,依次加載驅動,詳細說明會在下一節的“具體開發步驟”中進行描述。

如圖 7 所示,簡要概括了驅動模型的加載及運行流程,對模型內部組件及關聯組件之間的關系做了劃分,整體加載流程分為 9 步,分別說明如下:

“顯示公共驅動層”和“器件驅動層”為必選項,“標準架構適配層”和“芯片平臺適配層”

1、HDF Device Manager 解析設備描述;

2、HDF 優先加載器件驅動層,構建 Panel 設備;

3、將 panel 信息及操作接口注冊到公共驅動層;

4、HDF 其次加載芯片平臺適配層,進行 SoC 相關硬件資源初始化;

5、HDF 再次加載公共驅動層,對共有特性進行初始化;

6、HDF 最后加載標準架構適配層;

7、從公共驅動層中獲取到 PanelManager,;

8、將對應 panel 注冊到 DRM 框架中;

9、在系統運行起來后,DRM 會調用 panel ops 進行顯示屏控制。

對于采用像 LiteOS 這種輕量內核的系統,并不會像 Linux 內核那樣提供標準的顯示框架,驅動模型也無法與其對接,因而上層圖形系統可以通過 HDI 接口,來直接操控顯示屏。

Display驅動開發指導

驅動開發說明

基于 HDF Display 驅動模型,開發一款器件驅動,開發者主要需要完成兩部分工作:HCS 配置文件、器件驅動層適配。

對于輕量級設備(L0-L1),以海思 Hi35xx 芯片為例,除了上述兩部分工作外,還需要在芯片平臺適配層中,完成 SoC 有關顯示屏的硬件資源配置。

對于標準設備(≥L2),還需要關注與 DRM 對接的標準架構適配層,此部分在模型中已經添加,開發者只需聚焦器件驅動層的實現即可。

具體開發步驟

此處我們以潤和開發板(Hi3516 SoC)為例,說明適配一款 LCD 屏需要完成的工作。

添加 Display 配置信息

(1)設備描述配置

配置文件目錄:

vendor/hisilicon/hispark_taurus/config/device_info/device_info.hcs

基礎的設備描述信息,在 HDF 的配置章節有作說明,此處不再重復描述。在配置文件中添加 LCD 設備描述信息如下:

device_lcd :: device { device0 :: deviceNode { policy = 0; // 設備發布策略為0,即只對內核態發布服務 priority = 100; // 設備對應驅動加載優先級,值越小越早加載 preload = 0; // 0代表正常加載,1代表不加載 permission = 0660; // 設備對應節點的權限// 模塊名很關鍵,需和對應驅動的中的moduleName保持一致 moduleName = “LCD_XXX”; serviceName = “hdf_lcdxxx_service”; // 當前設備對應的服務 deviceMatchAttr = “ hdf_lcdxxx_driver”; // 設備對應私有配置屬性名 }}

(2)器件私有配置

參考的配置文件目錄:

vendor/hisilicon/hispark_taurus/config/lcd/lcd_config.hcs

檢查配置宏

驅動模型的編譯入口:drivers/adapter/khdf/liteos/model/display/Makefile

根據編譯控制內容可知,需增加 panel 對應的編譯控制宏:

ifeq ($(LOSCFG_DRIVERS_HDF_LCD_XXX), y)LOCAL_SRCS += $(LITEOSTOPDIR)/。。/。。/drivers/framework/model/display/driver/panel/mipi_xxx.cendif

配置編譯宏的路徑:

kernel/liteos_a/tools/build/config/hispark_taurus_clang_release.config

LOSCFG_DRIVERS_HDF_DISP=yLOSCFG_DRIVERS_HDF_LCD_XXX=y

適配器件驅動

Display 驅動模型路徑:drivers/framework/model/display/driver

對應的器件驅動路徑:drivers/framework/model/display/driver/panel

驅動入口模板如下:

struct HdfDriverEntry g_ xxxDevEntry = { .moduleVersion = 1, .moduleName = “LCD_XXX”, // 要求和device_info.hcs中配置的模塊名一致 .Init = xxxEntryInit, // 驅動入口};HDF_INIT(g_xxxDevEntry); // HDF驅動入口解析模板

LCD 器件驅動需要適配的基礎接口包括 init、on、off、setBacklight 等,并將器件信息掛接到 panle 的 info 成員上。

static void xxxPanelInit(struct PanelData *panel){ panel-》info = &g_panelInfo; panel-》status.powerStatus = POWER_STATUS_OFF; panel-》status.currLevel = MIN_LEVEL; panel-》esd = &g_panelEsd; panel-》init = xxxInit; panel-》on = xxxOn; panel-》off = xxxOff; panel-》setBacklight = xxxSetBacklight;}

Display開發實例

當前潤和開源板(Hi3516 SoC)上搭載的是眾盛捷的 5.5 寸屏,對應的 Driver IC 型號為集創北方 ICN9700,顯示屏的物理接口為 MIPI DSI,以此屏為例進行開發示例說明。

添加配置

配置路徑:

vendor/hisilicon/hispark_taurus/config/device_info/device_info.hcs

/* Display驅動相關的設備描述配置 */display :: host { hostName = “display_host”; /* Display平臺驅動設備描述 */ device_hdf_disp :: device { device0 :: deviceNode { policy = 2; priority = 200; permission = 0660; moduleName = “HDF_DISP”; serviceName = “hdf_disp”; } } /* SOC適配層驅動設備描述 */ device_hi35xx_disp :: device { device0 :: deviceNode { policy = 0; priority = 199; moduleName = “HI351XX_DISP”;

} } /* LCD器件驅動設備描述 */ device_lcd :: device { device0 :: deviceNode { policy = 0; priority = 100; preload = 0; moduleName = “LCD_ ICN9700”; } }}

通過如上配置中的器件驅動的 moduleName 為 “LCD_ICN9700”,HDF 遍歷對應的驅動入口并加載匹配的驅動。

適配編譯

編譯入口:drivers/adapter/khdf/liteos/model/display/Makefile

ifeq ($(LOSCFG_DRIVERS_HDF_LCD_ICN9700), y)LOCAL_SRCS += $(LITEOSTOPDIR)/。。/。。/drivers/framework/model/display/driver/panel/mipi_icn9700.cendif

配置編譯宏的路徑:

kernel/liteos_a/tools/build/config/hispark_taurus_clang_release.config

LOSCFG_DRIVERS_HDF_LCD_ICN9700 =y

添加器件驅動

驅動路徑:drivers/framework/model/display/driver/panel/mipi_icn9700.c

器件驅動加載入口:

struct HdfDriverEntry g_icn9700DevEntry = { .moduleVersion = 1, .moduleName = “LCD_ICN9700”, .Init = Icn9700EntryInit,};

器件驅動初始化及 Panel 注冊:

int32_t Icn9700EntryInit(struct HdfDeviceObject *object){ struct Icn9700Dev *icn9700 = NULL; if (object == NULL) { HDF_LOGE(“%s: object is null”, __func__); return HDF_FAILURE; } icn9700 = (struct Icn9700Dev *)OsalMemCalloc(sizeof(struct Icn9700Dev)); if (icn9700 == NULL) { HDF_LOGE(“%s icn9700 malloc fail”, __func__); return HDF_FAILURE; } Icn9700PanelInit(&icn9700-》panel);

icn9700-》panel.object = object; icn9700-》reset_gpio = RESET_GPIO; icn9700-》reset_delay = 20; // delay 20ms object-》priv = (void *)icn9700; if (RegisterPanel(&icn9700-》panel) != HDF_SUCCESS) { HDF_LOGE(“%s: RegisterPanel failed”, __func__); return HDF_FAILURE; } HDF_LOGI(“%s: exit succ”, __func__); return HDF_SUCCESS;}

Panel Info 初始化:

static struct PanelInfo g_panelInfo = { .width = WIDTH, /* width */ .height = HEIGHT, /* height */ .hbp = HORIZONTAL_BACK_PORCH,

/* horizontal back porch */ .hfp = HORIZONTAL_FRONT_PORCH, /* horizontal front porch */ .hsw = HORIZONTAL_SYNC_WIDTH, /* horizontal sync width */ .vbp = VERTICAL_BACK_PORCH, /* vertical back porch */ .vfp = VERTICAL_FRONT_PORCH, /* vertical front porch */ .vsw = VERTICAL_SYNC_WIDTH, /* vertical sync width */ .frameRate = FRAME_RATE, /* frame rate */ .intfType = MIPI_DSI, /* panel interface type */ .intfSync = OUTPUT_USER,

/* output timing type */ /* mipi config info */ .mipi = { DSI_2_LANES, DSI_VIDEO_MODE, VIDEO_BURST_MODE, FORMAT_RGB_24_BIT }, /* backlight config info */ .blk = { BLK_PWM, MIN_LEVEL, MAX_LEVEL, DEFAULT_LEVEL }, .pwm = { BLK_PWM1, PWM_MAX_PERIOD },};

填充 Panel 信息并掛接回調接口:

static struct PanelEsd g_panelEsd = { .support = false, .checkFunc = Icn9700EsdCheckFunc,};static void Icn9700PanelInit(struct PanelData *panel){ panel-》info = &g_panelInfo; panel-》status.powerStatus = POWER_STATUS_OFF; panel-》status.currLevel = MIN_LEVEL; panel-》esd = &g_panelEsd; panel-》init = Icn9700Init; panel-》on = Icn9700On; panel-》off = Icn9700Off; panel-》setBacklight = Icn9700SetBacklight;}

Panel 亮屏接口實現:

static int32_t Icn9700On(struct PanelData *panel){ int32_t ret; struct Icn9700Dev *icn9700 = NULL; icn9700 = PanelToIcn9700Dev(panel); if (icn9700 == NULL) { HDF_LOGE(“%s: icn9700 is null”, __func__); return HDF_FAILURE; } /* lcd reset power on */ ret = LcdResetOn(icn9700); if (ret != HDF_SUCCESS) { HDF_LOGE(“%s: LcdResetOn failed”, __func__);

return HDF_FAILURE; } if (icn9700-》mipiHandle == NULL) { HDF_LOGE(“%s: mipiHandle is null”, __func__); return HDF_FAILURE;

} /* send mipi init code */ int32_t count = sizeof(g_OnCmd) / sizeof(g_OnCmd[0]); int32_t i; for (i = 0; i 《 count; i++) { ret = MipiDsiTx(icn9700-》mipiHandle, &(g_OnCmd[i])); if (ret != HDF_SUCCESS) { HDF_LOGE(“%s: MipiDsiTx failed”, __func__); return HDF_FAILURE; } } panel-》status.powerStatus = POWER_STATUS_ON; /* set mipi to hs mode */ MipiDsiSetHsMode(icn9700-》mipiHandle);

添加芯片適配驅動

驅動路徑:

drivers/framework/model/display/driver/adapter_soc/hi35xx_disp.c

部分代碼示例如下,mipi 參數配置:

static int32_t MipiDsiInit(struct PanelInfo *info){ int32_t ret; struct DevHandle *mipiHandle = NULL; struct MipiCfg cfg; mipiHandle = MipiDsiOpen(0); if (mipiHandle == NULL) { HDF_LOGE(“%s: MipiDsiOpen failed”, __func__); return HDF_FAILURE; } cfg.lane = info-》mipi.lane; cfg.mode = info-》mipi.mode;

cfg.format = info-》mipi.format; cfg.burstMode = info-》mipi.burstMode; cfg.timing.xPixels = info-》width;cfg.timing.hsaPixels = info-》hsw; cfg.timing.hbpPixels = info-》hbp; cfg.timing.hlinePixels = info-》width + info-》hbp + info-》hfp + info-》hsw; cfg.timing.vsaLines = info-》vsw; cfg.timing.vbpLines = info-》vbp;cfg.timing.vfpLines = info-》vfp; cfg.timing.ylines = info-》height; cfg.timing.edpiCmdSize = 0;cfg.pixelClk = CalcPixelClk(info);

cfg.phyDataRate = CalcDataRate(info); /* config mipi device */ ret = MipiDsiSetCfg(mipiHandle, &cfg); if (ret != HDF_SUCCESS) { HDF_LOGE(“%s:MipiDsiSetCfg failed”, __func__); } MipiDsiClose(mipiHandle); return ret;}

總結

本文簡要說明了 HDF Display 驅動模型的整體架構、加載及運行流程、以及開發者基于此模型開發一款 LCD 驅動需要完成的基礎適配工作。當前模型更多的是聚焦對各顯示框架和差異化 SOC 的兼容適配,優先滿足不同開發板的基本顯示功能需求,驅動模型還在不斷演進完善,歡迎持續關注。

責任編輯:haq

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

    關注

    12

    文章

    1851

    瀏覽量

    85648
  • 模型
    +關注

    關注

    1

    文章

    3313

    瀏覽量

    49231
  • HarmonyOS
    +關注

    關注

    79

    文章

    1982

    瀏覽量

    30579

原文標題:OpenHarmony HDF Display驅動模型解析及移植指導

文章出處:【微信號:gh_e4f28cfa3159,微信公眾號:OpenAtom OpenHarmony】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    迅為RK3568開發板篇OpenHarmony實操HDF驅動控制LED-編寫應用APP

    HdfIoServiceBind 綁定 LED燈的 HDF 服務,獲取 HDF 空間緩存區,并向該緩沖區寫入控制數據。然后,通過 LED_WRITE 命令將數據發送到 HDF 驅動,
    發表于 02-06 10:27

    【「鴻蒙操作系統設計原理與架構」閱讀體驗】- 第5章閱讀有感

    Ch5 驅動子系統原理解析 書中對 HarmonyOS 中的 HDF 驅動架構所畫的這張圖非常清晰的描述了 HDF 的設計思想。書中的描述
    發表于 02-02 00:34

    迅為RK3568開發板篇OpenHarmony實操HDF驅動控制LED-添加內核編譯

    編譯內核時將該 HDF 驅動編譯到鏡像中,接下來編寫驅動編譯腳本 Makefile,代碼如下所示: 加入編譯體系,填加模塊目錄到 drivers/hdf_core/adapter/kh
    發表于 01-22 10:35

    迅為RK3568開發板篇OpenHarmony實操HDF驅動控制LED-編寫內核 LED HDF 驅動程序

    接下來編譯 LED 驅動,該驅動用于在基于華為設備框架(HDF)的系統中控制 LED 燈的開關,完整代碼如下所示: 更多內容可以關注:迅為RK3568開發板篇OpenHarmony
    發表于 01-17 15:13

    迅為RK3568開發板篇OpenHarmony配置HDF驅動控制LED-新增 topeet子系統

    hdf_led:子組件目錄 app:led 應用層目錄 ├── BUILD.gn:應用 APP 的 GN 文件 └── led_test.c:應用層 LED 測試程序 driver:內核 HDF 驅動
    發表于 01-13 15:59

    迅為RK3568開發板篇OpenHarmony配置HDF驅動控制LED-配置創建私有配置文件

    私有配置文件,用來填寫一些驅動的默認配置信息。HDF 框架在加載驅動時,會獲取相應的配置信息并將其保存在 HdfDeviceObject 的 property 中。這些配置信息通過 B
    發表于 01-10 11:13

    迅為RK3568開發板篇OpenHarmony配置HDF驅動控制LED-修改HCS硬件配置

    驅動的設備描述修改/vendor/hihope/rk3568/hdf_config/khdf/device_info/device_info.hcs 文件,添加如下代碼,如下所示: 接下來解釋一下
    發表于 01-08 15:25

    車載以太網的整體架構解析

    OSI模型整體架構。其架構共包含Layer 1~7共7層架構,分別是物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層和應用層。
    的頭像 發表于 10-22 16:42 ?704次閱讀
    車載以太網的<b class='flag-5'>整體</b><b class='flag-5'>架構</b>解析

    【「大模型時代的基礎架構」閱讀體驗】+ 未知領域的感受

    國慶前就收到《大模型時代的基礎架構》一書,感謝電子發燒友論壇。歡度國慶之余,今天才靜下心來體驗此書,書不厚,200余頁,彩色圖例,印刷精美! 當初申請此書,主要是看到副標題“大模型算力中心建設指南
    發表于 10-08 10:40

    TiNa里能不能加載HCNR的模型???

    我在用TI的運放配合HCNR201做一個隔離方案,想仿真一下,用的是Multisim,但是Multisim里的運放沒有輸出幅值對電源的限制,從TI網站上下載了一個擴展名是MOD的模型,在Multisim里無法加載,只能用.cir的文件。想問一下怎講解決啊,或者TiNa里
    發表于 09-14 07:39

    AWR2243引導加載程序流程

    電子發燒友網站提供《AWR2243引導加載程序流程.pdf》資料免費下載
    發表于 09-06 11:27 ?0次下載
    AWR2243引導<b class='flag-5'>加載</b>程序<b class='flag-5'>流程</b>

    linux驅動程序如何加載進內核

    ,需要了解Linux內核的基本概念和API。以下是一些關鍵概念: 1.1 內核模塊:Linux內核模塊是一種動態加載和卸載的代碼,可以在不重新啟動系統的情況下加載和卸載。驅動程序通常以內核模塊的形式實現。 1.2 設備
    的頭像 發表于 08-30 15:02 ?592次閱讀

    如何使用Tensorflow保存或加載模型

    TensorFlow是一個廣泛使用的開源機器學習庫,它提供了豐富的API來構建和訓練各種深度學習模型。在模型訓練完成后,保存模型以便將來使用或部署是一項常見的需求。同樣,加載已保存的
    的頭像 發表于 07-04 13:07 ?1718次閱讀

    人臉識別模型訓練流程

    人臉識別模型訓練流程是計算機視覺領域中的一項重要技術。本文將詳細介紹人臉識別模型的訓練流程,包括數據準備、模型選擇、
    的頭像 發表于 07-04 09:19 ?1129次閱讀

    maixcam如何無腦運行運行別人的模型(以安全帽模型為例)

    maixcam如何無腦運行運行別人的模型(以安全帽模型為例) 本文章主要講如何部署上傳的模型文件,以及如果你要把你模型按照該
    發表于 04-25 14:51
    主站蜘蛛池模板: 欧美一区二区三区男人的天堂 | tube 69sex 第一次| 三级理论片 | 天堂在线中文字幕 | 欧美激情综合亚洲五月蜜桃 | 天天做天天爱天天干 | 99精品热女视频专线 | 人人看人人玩 | 免费人成年短视频在线观看免费网站 | 国产精品大片天天看片 | 国产精品欧美精品国产主播 | 欧洲性freefree大白屁股 | 天堂在线www | 美女被免网站在线视频 | 特级毛片免费视频观看 | 久久天天躁狠狠躁夜夜呲 | 欧美精品一区二区三区在线播放 | 亚洲邪恶天堂影院在线观看 | 日本黄色免费在线 | 在线免费看高清视频大全 | 国模精品视频一区二区三区 | 国产精品1区2区3区在线播放 | 久久视频精品线视频在线网站 | 免费高清在线观看a网站 | 一本高清在线 | 在线视频亚洲欧美 | 天天射视频 | 美女被免费网站在线视频九色 | 免费网站看av片 | 在线免费国产 | 狠狠色噜噜狠狠狠狠888奇米 | 亚洲乱亚洲乱妇13p 亚洲免费mv | 99精品国产高清自在线看超 | 国产看片视频 | 欧美日本一道免费一区三区 | 欧美不卡1卡2卡三卡老狼 | 伊人精品成人久久综合欧美 | 一级特级aaaa毛片免费观看 | 国产精品黄网站免费观看 | 色综合久久综合欧美综合网 | 被暗卫肉高h |