吴忠躺衫网络科技有限公司

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

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

3天內不再提示

了解DRM架構的形成、功能流程實現

Linux閱碼場 ? 來源:內核工匠 ? 作者:Allen Zhang ? 2022-11-28 09:25 ? 次閱讀

1、 DRM簡介(Direct Rendering Manager)

傳統linux顯示設備驅動開發時,通常使用FB驅動架構,隨著顯卡性能升級:顯示覆蓋(菜單層級)、GPU加速、硬件光標,傳統FB架構無法很好支持,此外,對于多應用的訪問沖突也無法很好控制。在這樣的背景下,DRM應用而生。

DRM是linux內核中負責與顯卡交互的管理架構,用戶空間很方便的利用DRM提供的API,實現3D渲染、視頻解碼和GPU計算等工作。

1.1 DRM發展歷史

1999年,Precision Insight公司首次為 XFree86 4.0 Server 開發 DRI 顯示框架,用于更好的適配 3DFX 公司顯卡,初版DRM代碼產出后,接下來的幾年時間里,DRM 所支持的顯卡列表不斷被擴充。

2008年10月,Linux kernel 2.6.27 進行了一次重大的源碼重組:DRM 的整套源碼被放到了/drivers/gpu/drm/目錄下,不同的GPU廠商代碼也被放到了各自子目錄下。

2014年6月,Atomic API 被添加到Linux 3.16,許多驅動也都轉而使用這些新的 API。

2018年,又有10個基于 atomic 框架的 DRM 新增驅動被添加到Linux kernel。

1.2 DRM架構對比FB架構優勢

DRM是目前Linux的主流圖形顯示框架,相比于傳統FB架構,DRM允許多個程序同時使用視頻硬件資源,管理多個程序的資源請求、訪問,綜上所述DRM更能適應日益更新的顯示硬件,DRM優勢主要體現:

DRM原生支持多圖層合成,FB原生不支持多層合成。

FB不支持VSYNC、DMA-BUF、異步更新和fence機制,但DRM原生都支持。

DRM統一管理GPU和Display驅動,讓軟件升級、維護和管理更加方便。

10e71bfa-6eb2-11ed-8abf-dac502259ad0.png

1.3 DRM圖形顯示框架

DRM檢測到的每個GPU都作為DRM設備,并為之創建一個設備文件/dev/dri/cardX與之連接,從整體架構上來看主要分為3個主要部分:

libdrm (接口庫)

對底層接口進行封裝,向上層提供通用的API接口,主要是對各種IOCTL接口進行封裝,便于重用與代碼共享。

KMS (Kernel Mode Setting)

正常工作時,需要設置顯卡或者圖形適配器的模式,主要體現在以下兩個方面:

更新畫面:顯示buffer的切換,多圖層的合成方式控制,以及每個圖層的顯示位置。

設置顯示參數:包括分辨率、刷新率、電源狀態(休眠喚醒)等。

GEM (Graphics Execution Manager)

提供內存管理方法,主要負責顯示buffer的分配和釋放。

10fa189a-6eb2-11ed-8abf-dac502259ad0.png

圖1.1 DRM圖形顯示框架總覽

1.4 DRM圖形顯示框架涉及元素

本章節介紹DRM框架中的一些重點模塊的功能與在顯示鏈路中的作用,下圖為APP調用DRM到屏幕顯示的流程框圖。

110cbc5c-6eb2-11ed-8abf-dac502259ad0.png

圖1.2 DRM圖形顯示框架框圖

下表對DRM中KMS和GEM兩個模型的不同組件進行概述性說明,輔以高通平臺代碼層級的對應關系說明,以加深架構與流程之間的對應聯系。

112339aa-6eb2-11ed-8abf-dac502259ad0.png

2 、DRM驅動框架

2.1 DRM驅動對象介紹

DRM內部的Objects是組成DRM框架的核心,下圖中藍色部分為物理硬件的抽象,棕色部分則為軟件的抽象,其中GEM結構體為:drm_gem_object,其余部分位于結構體drm_mode_object中.

PS:drm_panel不屬于object范疇,只是為了降低LCD驅動與encoder驅動間的耦合,是一堆回調函數集合。

113469c8-6eb2-11ed-8abf-dac502259ad0.png

圖2.1 DRM核心組件介紹

2.2 DRM抽象硬件如何關聯DRM Object

DRM的objects并不難理解,重要的是如何將實際的硬件與這些object進行關聯,下面會以MIPI DSI接口為例進行介紹軟件架構與DRM object的對應關系。

114ae324-6eb2-11ed-8abf-dac502259ad0.png

圖2.2 典型MIPI DSI接口硬件連接圖

1159d8f2-6eb2-11ed-8abf-dac502259ad0.png

圖2.3 硬件與DRM Objects對應圖

其中組件說明:

1168b0c0-6eb2-11ed-8abf-dac502259ad0.png

3 、DRM簡單示例

DRM代碼非常龐大,顯卡邏輯也非常復雜,在學習DRM架構時,需要通過實踐對DRM的流程進行理解,以達到事半功倍的效果。

下面會以模式設置案例,對DRM架構的流程進行解析。modeset主要流程如下:

1189c012-6eb2-11ed-8abf-dac502259ad0.png

圖3.1 DRM Modeset流程總覽

3.1 打開DRM設備文件

DRM框架成功加載后,會創建一個設備文件/dev/dri/card0,上層用戶應用可以通過該文件節點,獲取顯卡的各種操作。

119f06ac-6eb2-11ed-8abf-dac502259ad0.png

3.2 獲取顯卡資源句柄

打開DRM設備文件后,通過以下函數獲取顯卡的資源句柄,進而進行顯卡資源的操作。

11a93668-6eb2-11ed-8abf-dac502259ad0.png

3.3 獲取connectorId

獲取了drmModeRes后,獲取它的連接對象。

11b545ca-6eb2-11ed-8abf-dac502259ad0.png

3.4 創建FrameBuffer

創建FrameBuffer后,然后映射一片內存,對這塊內存進行像素數據填充。

11c13d8a-6eb2-11ed-8abf-dac502259ad0.png

3.5 設置Crtc模式

FB創建成功并進行清0操作,可以在里面填充任何數據,然后設置CRTC后,FB的內容就可以顯示在屏幕。

CRTC模式設置函數:drmModeSetCrtc(),參數為:fd、crtc句柄、FB句柄、XY坐標等。

11ce38dc-6eb2-11ed-8abf-dac502259ad0.png

3.6 資源清理工作(非必需)

顯示完成后,GUI會一直運行,一般不必實施資源清理工作。

11d5fc52-6eb2-11ed-8abf-dac502259ad0.png

本章小結

本文介紹了DRM架構的發展歷史、驅動框架以及簡單示例,旨在幫助讀者了解DRM架構的形成、功能流程實現,DRM代碼龐大且復雜,想要深入理解它的內涵,最好的辦法就是根據實際需求來進行代碼流程梳理,后續章節也會對該部分進行展開講解。

此外,DRM架構符合功能日益強大的現代顯示設備,但仍有很多老的設備以及軟件需要FB支持,在目前DRM框架中,會存在模擬FB設備的代碼。

審核編輯:郭婷

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

    關注

    87

    文章

    11345

    瀏覽量

    210398
  • API
    API
    +關注

    關注

    2

    文章

    1511

    瀏覽量

    62397
  • DRM
    DRM
    +關注

    關注

    0

    文章

    46

    瀏覽量

    15145

原文標題:DRM架構介紹(一)

文章出處:【微信號:LinuxDev,微信公眾號:Linux閱碼場】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    芯片封測架構和芯片封測流程

    在此輸入導芯片封測芯片封測是一個復雜且精細的過程,它涉及多個步驟和環節,以確保芯片的質量和性能。本文對芯片封測架構和芯片封測流程進行概述。 ? ? 1 芯片封測 芯片封測,即芯片封裝測試,是芯片制造
    的頭像 發表于 12-31 09:15 ?497次閱讀
    芯片封測<b class='flag-5'>架構</b>和芯片封測<b class='flag-5'>流程</b>

    Vivado之實現布局布線流程介紹

    一、前言 本文將介紹Vivado進行綜合,以及布局布線的內部流程,熟悉該流程后結合Settings中對應的配置選項,對于時序收斂調試將更具有針對性。 二、Implementation(實現
    的頭像 發表于 12-06 09:08 ?736次閱讀
    Vivado之<b class='flag-5'>實現</b>布局布線<b class='flag-5'>流程</b>介紹

    易控智駕正式通過汽車功能安全流程認證

    近日,易控智駕正式通過「ISO26262:2018 ASIL-D」汽車功能安全流程認證,并獲得由國際知名認證機構SGS頒發的功能安全流程認證證書。這不僅標志著易控智駕在
    的頭像 發表于 11-21 09:46 ?877次閱讀
    易控智駕正式通過汽車<b class='flag-5'>功能</b>安全<b class='flag-5'>流程</b>認證

    了解和使用GNU Radio軟件的功能并制作藍牙抓包器

    背景 在上一小節中,我們簡單介紹和使用了GNU Radio軟件的基礎功能和模塊,同時通過GNU Radio Companion(GRC)創建了簡單的流程圖,展示了信號生成、處理和輸出的流程。最后通過
    的頭像 發表于 11-15 16:10 ?727次閱讀
    <b class='flag-5'>了解</b>和使用GNU Radio軟件的<b class='flag-5'>功能</b>并制作藍牙抓包器

    AUTOSAR架構下,持續集成CI的最佳實踐

    隨著汽車電子技術的快速發展,汽車軟件的復雜性與日俱增,如何確保軟件開發的高效性與穩定性成為了一個關鍵問題。為了解決這個問題,許多汽車企業和供應商逐漸引入了AUTOSAR架構,并在此基礎上構建了持續
    的頭像 發表于 10-24 08:06 ?565次閱讀
    AUTOSAR<b class='flag-5'>架構</b>下,持續集成CI的最佳實踐

    【「嵌入式Hypervisor:架構、原理與應用」閱讀體驗】+第三四章閱讀報告

    Hypervisor如何通過特定的架構設計和算法實現,來確保多個虛擬機(VMs)在有限資源下的高效、安全運行。 關鍵收獲 : 架構設計 :了解到嵌入式Hypervisor通常采用微內核
    發表于 10-09 18:29

    【「數字IC設計入門」閱讀體驗】+ 數字IC設計流程

    設計的流程,對IC行業有個初步的認識,這樣有助于后面技術章節的學習;對于我通讀第1章后,最大的收獲就是了解了數字IC的設計流程。書中使用圖1-1總結了數字IC的設計流程: 對于IC專業
    發表于 09-25 15:51

    在Jacinot6 SOC上集成VISION SDK和PSDK之間的虛擬DRM

    電子發燒友網站提供《在Jacinot6 SOC上集成VISION SDK和PSDK之間的虛擬DRM.pdf》資料免費下載
    發表于 09-24 11:28 ?0次下載
    在Jacinot6 SOC上集成VISION SDK和PSDK之間的虛擬<b class='flag-5'>DRM</b>

    了解功能隔離

    電子發燒友網站提供《了解功能隔離.pdf》資料免費下載
    發表于 08-28 10:37 ?0次下載
    <b class='flag-5'>了解</b><b class='flag-5'>功能</b>隔離

    SDN全景:架構創新與網絡功能的未來

    軟件定義網絡(SDN)代表了一種前沿的網絡體系架構,其核心在于實現數據平面與控制平面的分離,并確保網絡的軟件可編程性。SDN的設計理念著重于技術架構的革新,推動網絡硬件與軟件的解耦,分離控制
    的頭像 發表于 07-26 14:26 ?463次閱讀

    智能工廠的架構及ERP的基本功能是什么?

    一、引言 隨著科技的飛速發展,智能制造逐漸成為制造業的主流趨勢。智能工廠作為智能制造的核心,其架構和ERP系統的基本功能對于提高生產效率、降低成本、提升產品品質具有重要意義。本文將詳細介紹智能工廠
    的頭像 發表于 06-07 15:27 ?1517次閱讀

    pcb線路板功能測試流程

    在電子制造業中,PCB(印刷電路板)是電子設備的核心組件之一。PCB線路板功能測試是確保產品質量和可靠性的關鍵環節。本文將詳細介紹PCB線路板功能測試的流程,包括測試前的準備、測試方法、測試后的處理
    的頭像 發表于 05-29 11:27 ?3591次閱讀

    fpga原型驗證流程

    FPGA原型驗證流程是確保FPGA(現場可編程門陣列)設計正確性和功能性的關鍵步驟。它涵蓋了從設計實現功能驗證的整個過程,是FPGA開發流程
    的頭像 發表于 03-15 15:05 ?1719次閱讀

    RFID血液智能流轉系統在赤峰市中心血站正式啟動

    站長周曉鵬主持的啟動會。 RFID血液智能流轉系統是將 RFID技術 與采供血作業流程進行有機嫁接,對血液采集、制備、儲存、發放的全過程全流程實時跟蹤管控,精準地追溯作業面覆蓋的各個環節,完美的
    的頭像 發表于 03-07 16:49 ?396次閱讀
    RFID血液智<b class='flag-5'>能流</b>轉系統在赤峰市中心血站正式啟動

    中心能源管控平臺架構功能

    集群。 在中心建設,強化節能降耗要求。 如何降低數據中心綠色電力供應。 數據中心能源站、冬奧村能源站、光伏系統等子系統交互,實現能源的綜合調度與運行管理;參考文獻研究智慧能源管控平臺的架構和主要功能,主要
    的頭像 發表于 02-20 15:52 ?534次閱讀
    中心能源管控平臺<b class='flag-5'>架構</b>與<b class='flag-5'>功能</b>
    大发888真人娱乐场网址官网| 鸿发| 仕达屋娱乐城| 澳门百家乐官网怎么看小路| 网上百家乐官网试玩网址| 真人百家乐出售| 大发888开户| 太阳城百家乐官网下载网址| 百家乐作弊手段| 大发888娱乐城六合彩| 百家乐官网下载游戏| 百家乐官网群到shozo网| 百家乐技术辅助软件| 博王娱乐| 速博百家乐官网的玩法技巧和规则| 七胜百家乐娱乐| k7娱乐城开户| E世博百家乐官网的玩法技巧和规则 | 永利高平台| 百家乐官网现场新全讯网| 百家乐庄家出千内幕| 大发888心水论坛| 买百家乐官网程序| 百家乐开户百家乐技巧| bet365百家乐| 电脑百家乐官网的玩法技巧和规则| 新世百家乐的玩法技巧和规则 | 德州扑克游戏下载| 百家乐官网怎么发牌| 免水百家乐的玩法技巧和规则| 泗洪县| 百家乐赌博是否违法| 皇冠投注網| 百家乐稳赚秘籍| 宝马会娱乐城返水| 玩百家乐官网掉房| 大发888官网吧| 大发888游戏平台 送1688元现金礼金领取| 百家乐官网定位膽技巧| 百家乐怎么发牌| 百家乐官网博彩通|