Linux DRM(一)Display Server 歷史一、Display ServerX Windows 和 X Server
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ā)按鈕更新動作。 +
我們通過一個實例理解了上面的架構(gòu)圖。 它呈現(xiàn)出了一個缺點: X Client -- X Server -- Compositor 三者的交互比較耗時,不是很高效。除了交互方面的問題,其實 X Server 還會做一些重復(fù)無意義的工作,這里不再贅述。 有痛點就有解決方案,新一代的 Display Server 呼之欲出。 接下來 Wayland 誕生了。 + WaylandWayland 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): + 同樣是上面那個實例,其流程如下: +
所以基于 Wayland 的整個任務(wù)流程非常簡單: +
簡單的說,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
DRM,英文全稱 Direct Rendering Manager, 即 直接渲染管理器。 它是為了解決多個程序?qū)?Video Card 資源的協(xié)同使用問題而產(chǎn)生的。它向用戶空間提供了一組 API,用以訪問操縱 GPU。 + fbdevLinux 早在很久以前就已經(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 資源時,就會崩潰。 + DRMDRM 的誕生就是用來處理多個程序?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 |
|