日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Linux DRM (一) Display Server · Rockchip

 老匹夫 2019-09-26

Linux DRM(一)Display Server 歷史

一、Display Server

X Windows 和 X Server

The X Window System (X11, or shortened to simply X) is a windowing system for bitmap displays, common on UNIX-like computer operating systems. X provides the basic framework for a GUI environment: drawing and moving windows on the display device and interacting with a mouse and keyboard. X does not mandate the user interface – this is handled by individual programs. As such, the visual styling of X-based environments varies greatly; different programs may present radically different interfaces

+

X Windows 是用于位圖顯示的窗口系統(tǒng),常用于 UNIX 系的操作系統(tǒng)上。它為 GUI 環(huán)境提供了基本框架:在顯示設(shè)備上繪制和移動窗口,并與鼠標和鍵盤進行交互。 它在設(shè)計之初,便秉承“提供機制,而非策略”的理念。(是的,和 Unix 設(shè)計哲學相同)所以它對用戶接口不作要求,比如它提供了生成窗口(window)的方法,卻對窗口呈現(xiàn)方式不作任何要求。 另一個設(shè)計特點是它是基于 Client/Server 網(wǎng)絡(luò)模型。不論本地還是遠程應(yīng)用程序,都統(tǒng)一通過 C/S 模型來運作。

+

我們看一下 X Windows 的架構(gòu)圖(圖來自 作者TualatriX):

+

拿一個簡單的應(yīng)用場景舉例。點擊按鈕引發(fā)按鈕更新動作。

+
  1. 內(nèi)核捕獲鼠標點擊事件并發(fā)送給X server。
  2. X Server 會計算該把這一事件發(fā)送給哪個窗口(事實上,窗口位置是由 Compositor 控制的,X Server 并不能夠正確的計算 Compositor 做過特效變化之后的按鈕的正確位置)。
  3. 應(yīng)用程序?qū)Υ耸录M行處理(將引發(fā)按鈕更新動作)。但是,在此之前它得向X Server 發(fā)送繪制請求。
  4. X Server 接收到這條繪制請求,然后把它發(fā)給視頻驅(qū)動來渲染。X 還計算了更新區(qū)域,并且這條“垃圾信息”發(fā)送給了Compositor。
  5. 這時,Compositor 知道它必須要重新合成屏幕上的一塊區(qū)域。當然,這還是要向X Server發(fā)送繪制請求的。
  6. 開始繪制。但是 X Server 還會去做一些不必要的本職工作(窗口重疊計算、窗口剪裁計算等)。

我們通過一個實例理解了上面的架構(gòu)圖。 它呈現(xiàn)出了一個缺點: X Client -- X Server -- Compositor 三者的交互比較耗時,不是很高效。除了交互方面的問題,其實 X Server 還會做一些重復(fù)無意義的工作,這里不再贅述。 有痛點就有解決方案,新一代的 Display Server 呼之欲出。 接下來 Wayland 誕生了。

+

Wayland

Wayland is A Simple Display Server。 它在誕生之初的使命是用于改善 X Server 的不足并取代它。 但是現(xiàn)在看來它所作的不僅僅是替代 X Window 下的 X Server,也不僅僅是要取代 X Widnow。而是要顛覆 Linux 桌面上的 X Server/X Client 的概念。 以 Compositor/Client 的結(jié)構(gòu)取而代之。 同時它復(fù)用了所有 Linux 內(nèi)核圖形和 I/O 技術(shù):KMS、GEM、DRM、evdev。

+

其架構(gòu)圖如下(圖來自 作者TualatriX):

+

同樣是上面那個實例,其流程如下:

+
  1. 內(nèi)核捕獲鼠標點擊事件并發(fā)送給Wayland Compositor。
  2. 由于是直接發(fā)給Wayland Compositor的,所以Wayland Compositor會正確地計算出按鈕的位置。同時它會把這一事件發(fā)送給按鈕所在的應(yīng)用程序來處理。
  3. 應(yīng)用程序直接渲染,無需向Wayland Compositor請求。只需在繪制完成之后向Wayland Compositor發(fā)送一條信息表明這塊區(qū)域被更新了。
  4. Wayland Compositor收到這條信息后,立即重新合成整個桌面。

所以基于 Wayland 的整個任務(wù)流程非常簡單:

+
  1. 基于Wayland協(xié)議,處理evdev的信息;
  2. 通知Client(即應(yīng)用程序)對相關(guān)事件做出反應(yīng)(至于應(yīng)用程序想怎么反應(yīng),Compositor不需要過問);
  3. 收到Client的狀態(tài)更新,重新合成圖形或管理新的圖形布局。

簡單的說,Waylannd 就是一個去除 X Window 中不必要的設(shè)計、充分利用現(xiàn)代 Linux 內(nèi)核圖形技術(shù)(DRM 子系統(tǒng)中的 KMS、GEM、DRM)的一個顯示機制,它的出現(xiàn)是自然而然的,它的使命不是為了消滅X Window,而是將Linux的圖形技術(shù)發(fā)揮至更高的一個境界。傳統(tǒng)的X Window(即經(jīng)典X應(yīng)用、Gtk 1.x/2.x等舊應(yīng)用),也會在相當長一段時間內(nèi)得到繼續(xù)支持,通過Wayland Client的形式跑在Wayland Compositor上,直到最終升級、取代或被淘汰。

+

有了以上背景,接下來我們便能更好的理解 DRM Subsystem 了。

+

二、DRM Subsystem

In computing, the Direct Rendering Manager (DRM), a subsystem of the Linux kernel, interfaces with the GPUs of modern video cards. DRM exposes an API that user-space programs can use to send commands and data to the GPU, and to perform operations such as configuring the mode setting of the display. DRM was first developed as the kernel space component of the X Server's Direct Rendering Infrastructure,[1] but since then it has been used by other graphic stack alternatives such as Wayland. User-space programs can use the DRM API to command the GPU to do hardware-accelerated 3D rendering and video decoding as well as GPGPU computing. 摘自 wipipedia

+

DRM,英文全稱 Direct Rendering Manager, 即 直接渲染管理器。 它是為了解決多個程序?qū)?Video Card 資源的協(xié)同使用問題而產(chǎn)生的。它向用戶空間提供了一組 API,用以訪問操縱 GPU。

+

fbdev

Linux 早在很久以前就已經(jīng)有一個名為 fbdev 的 API ,用于管理顯卡的 framebuffer,但是它不能用于處理 基于視頻卡的 GPU 的 3D 加速的需求。 這些 Video Card 常常需要設(shè)置或者管理 卡內(nèi)存(Video RAM)中的一些命令隊列。將命令分配給 GPU,還需要管理 Video RAM 本身的 Buffer 和 Free Space。

+

在最初的用戶空間的程序(比如 X Server)可以直接管理這些資源,但這些程序通常表現(xiàn)的就仿佛他們是唯一去獲取這些資源的一樣。當有多個程序試圖去以自己的方式同時控制 Video Card 資源時,就會崩潰。

+

DRM

DRM 的誕生就是用來處理多個程序?qū)?Video Card 資源的協(xié)同使用問題。 DRM 獲得對 Video Card 的獨占訪問權(quán)限,它負責初始化和維護命令隊列、Video RAM 以及其他相關(guān)的硬件資源。

+

要使用 GPU 的程序?qū)⒄埱蟀l(fā)送給 DRM,由 DRM 作為仲裁來避免沖突。 DRM 到現(xiàn)在已經(jīng)涵蓋了以前由用戶空間程序處理的很多功能,比如 幀緩存區(qū)的管理和模式設(shè)置,內(nèi)存共享對象和內(nèi)存同步。其中一些拓展具有特定的名稱,比如圖形執(zhí)行管理器 GEM 或者內(nèi)核模式設(shè)置 KMS,這些都是屬于 DRM 子系統(tǒng)。 DRM 同時也負責處理 GPUs 切換的問題。

+

在下一章,我們會開始介紹 Linux 源碼中 DRM 的軟件架構(gòu)。

+

參考文章: https://en./wiki/X_Window_System http://zqdevres./data/20101106130912/index.html https:///archives/1573.html https:///archives/1574.html https://en./wiki/Direct_Rendering_Manager

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多