最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網 會員登陸 & 注冊

深入講解DRM架構介紹(一)

2022-11-30 20:42 作者:補給站Linux內核  | 我要投稿


1、 DRM簡介(Direct Rendering Manager)

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

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

1.1 DRM發(fā)展歷史

  • 1999年,Precision Insight公司首次為 XFree86 4.0 Server 開發(fā) 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架構優(yōu)勢

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

  • DRM原生支持多圖層合成,F(xiàn)B原生不支持多層合成。

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

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

1.3 DRM圖形顯示框架

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

  • libdrm (接口庫)

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

  • KMS (Kernel Mode Setting)

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

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

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

  • GEM (Graphics Execution Manager)

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

圖1.1 DRM圖形顯示框架總覽


【文章福利】小編推薦自己的Linux內核技術交流群:【749907784】整理了一些個人覺得比較好的學習書籍、視頻資料共享在群文件里面,有需要的可以自行添加哦?。。。ê曨l教程、電子書、實戰(zhàn)項目及代碼)? ??


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

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

圖1.2 DRM圖形顯示框架框圖

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

2 、DRM驅動框架

2.1 DRM驅動對象介紹

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

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

2.2 DRM抽象硬件如何關聯(lián)DRM Object

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


其中組件說明:

3 、DRM簡單示例

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

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

圖3.1 DRM Modeset流程總覽

3.1 打開DRM設備文件

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

3.2 獲取顯卡資源句柄

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

3.3 獲取connectorId

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

3.4 創(chuàng)建FrameBuffer

創(chuàng)建FrameBuffer后,然后映射一片內存,對這塊內存進行像素數(shù)據(jù)填充。

3.5 設置Crtc模式

FB創(chuàng)建成功并進行清0操作,可以在里面填充任何數(shù)據(jù),然后設置CRTC后,F(xiàn)B的內容就可以顯示在屏幕。

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

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

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

本章小結

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

此外,DRM架構符合功能日益強大的現(xiàn)代顯示設備,但仍有很多老的設備以及軟件需要FB支持,在目前DRM框架中,會存在模擬FB設備的代碼,參見drivers/gpu/drm/xxx/drv.c文件,會在設備目錄下出現(xiàn):/dev/fb0 。

原文作者:內核工匠


深入講解DRM架構介紹(一)的評論 (共 條)

分享到微博請遵守國家法律
成安县| 鸡泽县| 莱阳市| 六安市| 自贡市| 北碚区| 宝应县| 韶关市| 桂平市| 天镇县| 云林县| 阿城市| 丰县| 应用必备| 泽库县| 凤山市| 五河县| 通许县| 安国市| 云林县| 伊金霍洛旗| 临颍县| 手游| 桓台县| 盐城市| 南汇区| 北安市| 铁岭县| 丹寨县| 甘南县| 抚远县| 盘山县| 剑河县| 定州市| 佛学| 枝江市| 手游| 伊宁县| 东安县| 永德县| 怀柔区|