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

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

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

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

以xc7z010 SOPC為例的DRM-KMS方案分析

電子設(shè)計(jì) ? 來源:Nick ? 作者:Nick ? 2020-12-04 12:04 ? 次閱讀

作者:Nick

在上一小節(jié)Linux GUI加速(1)_GUI系統(tǒng)概述》中,我們從應(yīng)用層到kernel層大致分析了linux中的圖形界面的構(gòu)成,并在最后給出了kernel中DRM+KMS的軟件顯示框架以及accelerate logic+framebuffer+displayport的硬件結(jié)構(gòu)。在這一子篇會(huì)將這兩塊內(nèi)容詳細(xì)展開。

本篇主要以Xilinx的xc7z010 的SOPC(zybo的開發(fā)板)為硬件平臺(tái),在以下幾方面介紹:

① 以zynq 7000的邏輯資源(PL)搭建CRTC/Encoder/Connector硬件模塊,以HDMI輸出接口為例,介紹各個(gè)模塊的接口特性(Framebuffer對(duì)應(yīng)著物理的DDR部分);

② 會(huì)先給出DRM+KMS驅(qū)動(dòng)框架下的主要模塊,并針對(duì)上述硬件子模塊分析對(duì)應(yīng)的內(nèi)核驅(qū)動(dòng)部分;

DRI在片上系統(tǒng)的硬件構(gòu)成

在各類SOC上,CRTC+Endode+Connector一般是集成在一個(gè)外設(shè)模塊掛在系統(tǒng)總線上,以ARM為例,CRTC/Endoder等需要配置的外設(shè)模塊,配置接口掛在APB總線,數(shù)據(jù)接口直接在AHB總線上,實(shí)現(xiàn)和Framebuffer的高速通信

我們按照connector-->encoder-->crtc-->framebuffer的順序倒過來介紹吧。

Connector

Connector其實(shí)就是和顯示器連接的物理接口,常見的有VGA/HDMI/DVI/DP等。以HDMI為例,HDMI的接口信號(hào)主要由以下幾組信號(hào)組成:

① 1組TMDS clock:差分時(shí)鐘用于同步信號(hào)驅(qū)動(dòng);
② 3組TMDS data:查分?jǐn)?shù)據(jù)傳輸視頻信號(hào);
③ 1組I2C:用于EDID的獲取;
④ 1組音頻總線;

(注:EDID全稱是Extended Display Identification Data(擴(kuò)展顯示標(biāo)識(shí)數(shù)據(jù)),目的是讓視頻信號(hào)輸出設(shè)備輸出前獲取到存儲(chǔ)在顯示器內(nèi)部的相關(guān)參數(shù),如支持的分辨率、幀率、圖像格式:RGB等,因此,整個(gè)輸出的控制參數(shù)是由以下幾個(gè)部分綜合決定的:

①通過connector讀出的顯示器支持的參數(shù);
② 內(nèi)核靜態(tài)配置或devicetree傳入的參數(shù);
③ 用戶空間輸入的參數(shù))

HDMI類型的connector的任務(wù)就是輸出顯示器解碼芯片所需的信號(hào)時(shí)序(主要是TMDS clock以及TMDS data)。

Encoder

Encoder比較好理解,在此處其實(shí)就是將一定格式的圖像信號(hào)(如RGB、YUV等)編碼成connector需要輸出的信號(hào)。以HDMI為例,幀/行同步/顯示內(nèi)容都是通過TMDS data的串行總線輸出的,那么并行的時(shí)序按照HDMI的標(biāo)準(zhǔn)編碼為串行順序則是Encoder的任務(wù);

在本片中的XC7Z010 SOPC中Encoder+Connector如下:


CRTC

CRTC的任務(wù)是從Framebuffer中讀出待顯示的圖像,并按照相應(yīng)的格式輸出給Encoder(本處的CRTC功能受限,相關(guān)格式配置只能通過配置硬件IP參數(shù)來改變,而不能通過內(nèi)核)。在本例中,CRTC的硬件構(gòu)成如下:

① AXI Video Direct Memory Access IP,通過AXI4總線獲取DDR中Framebuffer數(shù)據(jù),轉(zhuǎn)為video-stream流格式的圖像信息;

② Video Timing Controller IP,根據(jù)內(nèi)核相應(yīng)配置輸出與視頻流匹配的幀、行同步信號(hào);

③ AXI4-Stream to Video Out IP,將串行視頻流轉(zhuǎn)化為指定格式(IP配置)、指定分辨率(內(nèi)核配置)的時(shí)序;

如下圖:


Planes

Plane其實(shí)就是圖層,實(shí)際輸出的圖像往往由多個(gè)圖層疊加而成(想象一下photoshop的過程),比如主圖層,顯示光標(biāo)的圖層,其中有些圖層由硬件加速模塊生成,本例中不涉及,因此所有plane的相關(guān)操作都由軟件實(shí)現(xiàn),不涉及到任何硬件結(jié)構(gòu)。

Framebuffer

Framebuffer對(duì)應(yīng)著存儲(chǔ)空間中的圖像數(shù)據(jù),此處對(duì)應(yīng)硬件為DDR。

麻雀雖小,五臟俱全,次例程中的顯示框架非常簡單,但也包含了Framebuffer、CRTC、Planes、Encoder、Connector5個(gè)組件,片內(nèi)硬件結(jié)構(gòu)如下:


(PS:Dynamic Clock Generator生成顯示子系統(tǒng)中各組件所需的驅(qū)動(dòng)時(shí)鐘,由Linux中的common clock framework統(tǒng)一管理)

DRI在Linux Kernel內(nèi)的軟件構(gòu)成

按照DRI中幾個(gè)組件分別介紹。

Framebuffer

我們知道Framebuffer是存儲(chǔ)待顯示圖像信息的空間,因此,F(xiàn)ramebuffer相關(guān)驅(qū)動(dòng)中也就是對(duì)內(nèi)存的操作,也就涉及到下面兩個(gè)部分:
① 對(duì)內(nèi)存的管理(如GEM,for Graphics Execution Manager)
② 內(nèi)存中數(shù)據(jù)的更顯方式(如DMA等)

對(duì)于第一點(diǎn),GEM主要完成的事情是:
① 對(duì)圖像內(nèi)存(顯存)的空間開辟、釋放;
② 不同硬件對(duì)同一顯存資源訪問下的管理;

在Linux Kernel下的默認(rèn)實(shí)現(xiàn)方式是CMA(Contiguous Memory Allocator)實(shí)現(xiàn)的,內(nèi)核中對(duì)應(yīng)代碼是:

drivers/gpu/drm/drm_fb_cma_helper.c

這里稍微提一下CMA,CMA是個(gè)好東西,不僅在顯存管理中有應(yīng)用,在所有軟硬件協(xié) 同處理中同樣起這重要的作用。在一般的硬件(片內(nèi)硬件加速模塊)加速方案中,一般實(shí)現(xiàn)方式如下:

① linux kernel通過device-tree傳入CMA配置所需的配置參數(shù)供CMA開辟相應(yīng)的物理內(nèi)存 空間(不被Cache到),并且相應(yīng)的信息(物理空間首地址,size等)通過/dev/device 映射到用戶空間;

② DMA可以將加速模塊預(yù)處理后的數(shù)據(jù),根據(jù)已知參數(shù)(開辟的物理地址),傳遞到共享空間中供軟件訪問;


struct drm_framebuffer{
[...]
const struct drm_format_info *format;
[...]
}

? format用于描述內(nèi)存空間的組成,使用FOURCC(four-character code)制式,結(jié)構(gòu)體中的pitch、offset 4個(gè)元素分別用于計(jì)算FOURCC4個(gè)圖層中的內(nèi)存長寬參數(shù);(width和height用于描述顯示的長寬參數(shù));

? DRI中支持下面這三種格式圖像:
① RGB:R/G/B分別存于不同的圖層中;
② YUV:不同壓縮格式下的YUV存儲(chǔ)方式不一;
③ C8:通過存儲(chǔ)一塊映射到RGB的映射表來實(shí)現(xiàn)圖像信息存儲(chǔ);

framebuffer中在不同格式下所需要處理的圖層的數(shù)量不一,具體的顯存處理、格式解析主要在下列源碼表中:

(顯存管理)

drivers/gpu/drm/drm_framebuffer.c

drivers/gpu/drm/drm_gem.c

drivers/gpu/drm/drm_gem_cma_helper.c

drivers/gpu/drm/drm_fb_cma_helper.c

drivers/gpu/drm/drm_fb_framebuffer_helper.c

drivers/gpu/drm/drm_fb_fourcc.c

drivers/gpu/drm/drm_fb_cma_helper.c

drivers/gpu/drm/drm_fb_cma_helper.c

drivers/gpu/drm/drm_fb_cma_helper.c

(顯存更新驅(qū)動(dòng)接口)

drivers/gpu/drm/ati_pcigart.c

drivers/gpu/drm/ati_agpsupport.c

CRTC

CRTC雖然字面上意思為陰極射線顯像管控制器,但CRT在普通顯示設(shè)備中早已被淘汰,DRI中CRTC主要承擔(dān)的作用:
① 配置適合顯示器的分辨率(kernel)并輸出相應(yīng)時(shí)序(hardware logic);
② 掃描framebuffer送顯到一個(gè)或多個(gè)顯示設(shè)備中;
③ 更新framebuffer;

上述功能的主要通過struct drm_crtc_funcs和struct drm_crtc_helper_funcs這兩個(gè)描述符實(shí)現(xiàn):



drm_crtc_funcs中的兩個(gè)重要句柄set_config和page_flip,其中,

set_config主要任務(wù)是:
① 更新待送顯的framebuffer中數(shù)據(jù);
② 根據(jù)(之前說的EDID讀出支持的配置,device-tree對(duì)內(nèi)核的配置以及用戶空間的配置)參數(shù)配置軟件參數(shù)并控制相應(yīng)的寄存器(在本例中的VDMA及VTC的行列像素值等寄存器);
③ 將Encoder和connector的信息送給CRTC模塊。

page_flip解決的問題很簡單:

? 必須得保證CRTC在讀取framebuffer的時(shí)候,framebuffer里的幀不會(huì)被修改而產(chǎn)生竄幀的情況,采用的解決方式也是軟硬件異構(gòu)處理時(shí)常見的乒乓緩存的方式。


當(dāng)page_flip完成后,會(huì)通過event通知用戶層準(zhǔn)備好下一幀的數(shù)據(jù);

Planes

不涉及到GPU的話,planes沒有那么復(fù)雜,主要是負(fù)責(zé):
? 主圖層;
? 移動(dòng)光標(biāo)圖層;
? 覆蓋圖層;

的創(chuàng)建、更新、銷毀,其中圖層的更新(多個(gè)圖層的疊加),通過struct中的drm_plane_funcs來實(shí)現(xiàn)。


比較形象的例子如下:


Connector & Encoder

由于Connector和Encoder是SOC與外設(shè)直接打交道的地方,因此對(duì)應(yīng)著不同SOC也是驅(qū)動(dòng)適配修改最頻繁的地方。DRI中這兩塊通過適配struct drm_connector_helper_funcs和struct drm_encoder_helper_funcs來實(shí)現(xiàn)。

Linux Kernel中的DRM+KMS中涉及到的點(diǎn)太多,由于能力和時(shí)間問題,沒能遍歷一遍,只能根據(jù)自己認(rèn)為的重點(diǎn)討論一邊,但有些點(diǎn)我認(rèn)為比較重要的,但沒能深入了解,比如:

? 硬件graphic加速和DRM的交互邏輯
? CRTC的Atomic刷新機(jī)制的具體實(shí)現(xiàn)方式等,如果大家能夠交流一下自己的理解,那再好不過了。

編輯:hfy


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

    關(guān)注

    32

    文章

    1669

    瀏覽量

    151672
  • Xilinx
    +關(guān)注

    關(guān)注

    71

    文章

    2164

    瀏覽量

    121018
  • Dri
    Dri
    +關(guān)注

    關(guān)注

    0

    文章

    13

    瀏覽量

    15527
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    模擬計(jì)算板卡設(shè)計(jì)方案:429-基于XC7Z035+ADS5474的2路400Msps AD 光電脈沖采集處理卡

    模擬計(jì)算板卡 , XC7Z035板卡 , ADS5474處理板 , 光電脈沖采集處理
    的頭像 發(fā)表于 11-27 10:04 ?33次閱讀
    模擬計(jì)算板卡設(shè)計(jì)<b class='flag-5'>方案</b>:429-基于<b class='flag-5'>XC7Z</b>035+ADS5474的2路400Msps AD 光電脈沖采集處理卡

    CW32L010 新品初體驗(yàn)

    最近我們迎來了CW32L010新品的正式發(fā)布,標(biāo)志著嵌入式技術(shù)領(lǐng)域的又一次創(chuàng)新突破。今日,我們有幸進(jìn)行該新品的首次使用體驗(yàn),一塊L010核心板
    的頭像 發(fā)表于 11-14 17:45 ?221次閱讀
    CW32L<b class='flag-5'>010</b> 新品初體驗(yàn)

    基于DSP TMS320C6678+FPGA XC7V690T的6U VPX信號(hào)處理卡

    XC7V690T-2FFG1761I作為主處理器,Xilinx 的Aritex XC7A200T作為輔助處理器。XC7A200T負(fù)責(zé)管理板卡的上電時(shí)序,時(shí)鐘配置,系統(tǒng)及模塊復(fù)位,程序重配等。
    的頭像 發(fā)表于 11-08 16:38 ?257次閱讀
    基于DSP TMS320C6678+FPGA <b class='flag-5'>XC7</b>V690T的6U VPX信號(hào)處理卡

    單模與多模光纖跳線:優(yōu)劣分析—— 山澤品牌

    在現(xiàn)代網(wǎng)絡(luò)建設(shè)中,光纖跳線是不可或缺的關(guān)鍵組件。然而,面對(duì)單模光纖跳線和多模光纖跳線,你是否曾經(jīng)感到困惑?今天,我們就來詳細(xì)分析這兩種光纖跳線的優(yōu)劣,并以山澤品牌的產(chǎn)品,幫助你在選擇時(shí)不再迷茫
    的頭像 發(fā)表于 10-17 15:59 ?271次閱讀

    K8S集群中使用JDOS KMS服務(wù)對(duì)敏感數(shù)據(jù)安全加密

    基本概念 KMS,Key Management Service,即密鑰管理服務(wù),在K8S集群中,驅(qū)動(dòng)和插件的形式啟用對(duì)Secret,Configmap進(jìn)行加密。保護(hù)敏感數(shù)據(jù), 驅(qū)動(dòng)和插件需要
    的頭像 發(fā)表于 08-09 16:00 ?191次閱讀
    K8S集群中使用JDOS <b class='flag-5'>KMS</b>服務(wù)對(duì)敏感數(shù)據(jù)安全加密

    中微億芯發(fā)布ARM A9處理器SoC Z77系列FPGA核心的SIP電路

    近日,中科芯控股公司中微億芯舉辦了"融核造芯 智創(chuàng)未來"高性能可編程 SoC / SIP 系列新品發(fā)布會(huì),隆重發(fā)布了ARM A9處理器SoC Z7,及7系列FPGA核心的SIP電路
    的頭像 發(fā)表于 05-28 18:22 ?1136次閱讀

    關(guān)于XC7Z020的尾綴,CLG400的價(jià)格為何會(huì)比CLG484 要貴上將近50塊??

    關(guān)于XC7Z020的尾綴,CLG400 的價(jià)格為何會(huì)比 CLG484要貴上將近50塊??有大神可以告知下嗎?是引腳越多一般需要編輯的越麻煩嗎? 在Xilinx 7Z系列的 封裝有相同引腳數(shù)下
    發(fā)表于 05-14 09:38

    我們的“SU7”--XC3588H工控主板

    近期,小米科技發(fā)布了他們的電動(dòng)汽車SU7,無獨(dú)有偶,我們向成科技最近也開發(fā)了一款新的基于RK3588的工控主板---XC3588H。XC3588H采用的是瑞芯微新一代AIOT的旗艦芯片RK3588
    的頭像 發(fā)表于 04-04 08:15 ?488次閱讀
    我們的“SU<b class='flag-5'>7</b>”--<b class='flag-5'>XC</b>3588H工控主板

    基于ZYNQ FPGA的工業(yè)現(xiàn)場(chǎng)綜合數(shù)據(jù)采集嵌入式計(jì)算機(jī)

    ZYNQ FPGA XC7Z100核心計(jì)算處理平臺(tái),實(shí)現(xiàn)數(shù)據(jù)的接入、分析、顯示;產(chǎn)品防水加固設(shè)計(jì),觸摸屏顯示,適合常見的工業(yè)、輪船、工程車等場(chǎng)景的感知接入、
    發(fā)表于 01-09 11:26 ?352次閱讀
    基于ZYNQ FPGA的工業(yè)現(xiàn)場(chǎng)綜合數(shù)據(jù)采集嵌入式計(jì)算機(jī)

    XC7SET86 2輸入異或門產(chǎn)品數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《XC7SET86 2輸入異或門產(chǎn)品數(shù)據(jù)表.pdf》資料免費(fèi)下載
    發(fā)表于 01-03 16:40 ?0次下載
    <b class='flag-5'>XC7</b>SET86 2輸入異或門產(chǎn)品數(shù)據(jù)表

    XC7SH08 2輸入AND門產(chǎn)品數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《XC7SH08 2輸入AND門產(chǎn)品數(shù)據(jù)表.pdf》資料免費(fèi)下載
    發(fā)表于 01-03 16:33 ?0次下載
    <b class='flag-5'>XC7</b>SH08 2輸入AND門產(chǎn)品數(shù)據(jù)表

    XC7SH02 2輸入NOR門產(chǎn)品數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《XC7SH02 2輸入NOR門產(chǎn)品數(shù)據(jù)表.pdf》資料免費(fèi)下載
    發(fā)表于 01-03 16:32 ?0次下載
    <b class='flag-5'>XC7</b>SH02 2輸入NOR門產(chǎn)品數(shù)據(jù)表

    XC7SET32 2輸入或門產(chǎn)品數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《XC7SET32 2輸入或門產(chǎn)品數(shù)據(jù)表.pdf》資料免費(fèi)下載
    發(fā)表于 01-03 15:45 ?0次下載
    <b class='flag-5'>XC7</b>SET32 2輸入或門產(chǎn)品數(shù)據(jù)表

    xc7集合08 2輸入AND門產(chǎn)品數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《xc7集合08 2輸入AND門產(chǎn)品數(shù)據(jù)表.pdf》資料免費(fèi)下載
    發(fā)表于 01-03 15:03 ?0次下載
    <b class='flag-5'>xc7</b>集合08 2輸入AND門產(chǎn)品數(shù)據(jù)表

    xc7集合02 2輸入NOR門產(chǎn)品數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《xc7集合02 2輸入NOR門產(chǎn)品數(shù)據(jù)表.pdf》資料免費(fèi)下載
    發(fā)表于 01-03 14:59 ?0次下載
    <b class='flag-5'>xc7</b>集合02 2輸入NOR門產(chǎn)品數(shù)據(jù)表