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驅動,讓軟件升級、維護和管理更加方便。
1.3 DRM圖形顯示框架
DRM檢測到的每個GPU都作為DRM設備,并為之創建一個設備文件/dev/dri/cardX與之連接,從整體架構上來看主要分為3個主要部分:
libdrm (接口庫)
對底層接口進行封裝,向上層提供通用的API接口,主要是對各種IOCTL接口進行封裝,便于重用與代碼共享。
KMS (Kernel Mode Setting)
正常工作時,需要設置顯卡或者圖形適配器的模式,主要體現在以下兩個方面:
更新畫面:顯示buffer的切換,多圖層的合成方式控制,以及每個圖層的顯示位置。
設置顯示參數:包括分辨率、刷新率、電源狀態(休眠喚醒)等。
GEM (Graphics Execution Manager)
提供內存管理方法,主要負責顯示buffer的分配和釋放。
圖1.1 DRM圖形顯示框架總覽
1.4 DRM圖形顯示框架涉及元素
本章節介紹DRM框架中的一些重點模塊的功能與在顯示鏈路中的作用,下圖為APP調用DRM到屏幕顯示的流程框圖。
圖1.2 DRM圖形顯示框架框圖
下表對DRM中KMS和GEM兩個模型的不同組件進行概述性說明,輔以高通平臺代碼層級的對應關系說明,以加深架構與流程之間的對應聯系。
2 、DRM驅動框架
2.1 DRM驅動對象介紹
DRM內部的Objects是組成DRM框架的核心,下圖中藍色部分為物理硬件的抽象,棕色部分則為軟件的抽象,其中GEM結構體為:drm_gem_object,其余部分位于結構體drm_mode_object中.
PS:drm_panel不屬于object范疇,只是為了降低LCD驅動與encoder驅動間的耦合,是一堆回調函數集合。
圖2.1 DRM核心組件介紹
2.2 DRM抽象硬件如何關聯DRM Object
DRM的objects并不難理解,重要的是如何將實際的硬件與這些object進行關聯,下面會以MIPI DSI接口為例進行介紹軟件架構與DRM object的對應關系。
圖2.2 典型MIPI DSI接口硬件連接圖
圖2.3 硬件與DRM Objects對應圖
其中組件說明:
3 、DRM簡單示例
DRM代碼非常龐大,顯卡邏輯也非常復雜,在學習DRM架構時,需要通過實踐對DRM的流程進行理解,以達到事半功倍的效果。
下面會以模式設置案例,對DRM架構的流程進行解析。modeset主要流程如下:
圖3.1 DRM Modeset流程總覽
3.1 打開DRM設備文件
DRM框架成功加載后,會創建一個設備文件/dev/dri/card0,上層用戶應用可以通過該文件節點,獲取顯卡的各種操作。
3.2 獲取顯卡資源句柄
打開DRM設備文件后,通過以下函數獲取顯卡的資源句柄,進而進行顯卡資源的操作。
3.3 獲取connectorId
獲取了drmModeRes后,獲取它的連接對象。
3.4 創建FrameBuffer
創建FrameBuffer后,然后映射一片內存,對這塊內存進行像素數據填充。
3.5 設置Crtc模式
FB創建成功并進行清0操作,可以在里面填充任何數據,然后設置CRTC后,FB的內容就可以顯示在屏幕。
CRTC模式設置函數:drmModeSetCrtc(),參數為:fd、crtc句柄、FB句柄、XY坐標等。
3.6 資源清理工作(非必需)
顯示完成后,GUI會一直運行,一般不必實施資源清理工作。
本章小結
本文介紹了DRM架構的發展歷史、驅動框架以及簡單示例,旨在幫助讀者了解DRM架構的形成、功能流程實現,DRM代碼龐大且復雜,想要深入理解它的內涵,最好的辦法就是根據實際需求來進行代碼流程梳理,后續章節也會對該部分進行展開講解。
此外,DRM架構符合功能日益強大的現代顯示設備,但仍有很多老的設備以及軟件需要FB支持,在目前DRM框架中,會存在模擬FB設備的代碼。
審核編輯:郭婷
-
Linux
+關注
關注
87文章
11345瀏覽量
210398 -
API
+關注
關注
2文章
1511瀏覽量
62397 -
DRM
+關注
關注
0文章
46瀏覽量
15145
原文標題:DRM架構介紹(一)
文章出處:【微信號:LinuxDev,微信公眾號:Linux閱碼場】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
芯片封測架構和芯片封測流程
![芯片封測<b class='flag-5'>架構</b>和芯片封測<b class='flag-5'>流程</b>](https://file1.elecfans.com/web3/M00/04/59/wKgZPGdzRo6AFnpJAAAL4HFwCYY987.jpg)
Vivado之實現布局布線流程介紹
![Vivado之<b class='flag-5'>實現</b>布局布線<b class='flag-5'>流程</b>介紹](https://file1.elecfans.com/web3/M00/01/47/wKgZO2dST6-AWdB9AAASkGD-xpc114.png)
易控智駕正式通過汽車功能安全流程認證
![易控智駕正式通過汽車<b class='flag-5'>功能</b>安全<b class='flag-5'>流程</b>認證](https://file1.elecfans.com/web2/M00/0C/13/wKgZomc-kWaASHEMAABBsBgMSes783.png)
了解和使用GNU Radio軟件的功能并制作藍牙抓包器
![<b class='flag-5'>了解</b>和使用GNU Radio軟件的<b class='flag-5'>功能</b>并制作藍牙抓包器](https://file1.elecfans.com/web1/M00/F5/2B/wKgaoWc3AqWAHYjXAAASaF5IKS4716.png)
AUTOSAR架構下,持續集成CI的最佳實踐
![AUTOSAR<b class='flag-5'>架構</b>下,持續集成CI的最佳實踐](https://file.elecfans.com/web2/M00/52/D4/pYYBAGLNkrKAeFJaAAAjXRuImx0496.png)
【「嵌入式Hypervisor:架構、原理與應用」閱讀體驗】+第三四章閱讀報告
【「數字IC設計入門」閱讀體驗】+ 數字IC設計流程
在Jacinot6 SOC上集成VISION SDK和PSDK之間的虛擬DRM
![在Jacinot6 SOC上集成VISION SDK和PSDK之間的虛擬<b class='flag-5'>DRM</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
SDN全景:架構創新與網絡功能的未來
智能工廠的架構及ERP的基本功能是什么?
pcb線路板功能測試流程
fpga原型驗證流程
RFID血液智能流轉系統在赤峰市中心血站正式啟動
![RFID血液智<b class='flag-5'>能流</b>轉系統在赤峰市中心血站正式啟動](https://file1.elecfans.com//web2/M00/C4/05/wKgaomXpf6yAarPFAAP27JjOPVw094.jpg)
中心能源管控平臺架構與功能
![中心能源管控平臺<b class='flag-5'>架構</b>與<b class='flag-5'>功能</b>](https://file1.elecfans.com//web2/M00/C0/50/wKgZomXUWjGAUcgUAAHNLXkLH3I615.png)
評論