4.x版本内核中platform_device的生成
一、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 是用于位圖顯示的窗口系統,常用于 UNIX 系的操作系統上。它為 GUI 環境提供了基本框架:在顯示設備上繪制和移動窗口,并與鼠標和鍵盤進行交互。?
它在設計之初,便秉承“提供機制,而非策略”的理念。(是的,和 Unix 設計哲學相同)所以它對用戶接口不作要求,比如它提供了生成窗口(window)的方法,卻對窗口呈現方式不作任何要求。?
另一個設計特點是它是基于 Client/Server 網絡模型。不論本地還是遠程應用程序,都統一通過 C/S 模型來運作。
我們看一下 X Windows 的架構圖(圖來自 imtx.me 作者 TualatriX):
拿一個簡單的應用場景舉例。點擊按鈕引發按鈕更新動作。?
1. 內核捕獲鼠標點擊事件并發送給 X server。?
2. X Server 會計算該把這一事件發送給哪個窗口(事實上,窗口位置是由 Compositor 控制的,X Server 并不能夠正確的計算 Compositor 做過特效變化之后的按鈕的正確位置)。?
3. 應用程序對此事件進行處理(將引發按鈕更新動作)。但是,在此之前它得向X Server 發送繪制請求。?
4. X Server 接收到這條繪制請求,然后把它發給視頻驅動來渲染。X 還計算了更新區域,并且這條“垃圾信息”發送給了 Compositor。?
5. 這時,Compositor 知道它必須要重新合成屏幕上的一塊區域。當然,這還是要向X Server發送繪制請求的。?
6. 開始繪制。但是 X Server 還會去做一些不必要的本職工作(窗口重疊計算、窗口剪裁計算等)。
我們通過一個實例理解了上面的架構圖。?
它呈現出了一個缺點:?
X Client – X Server – Compositor?
三者的交互比較耗時,不是很高效。除了交互方面的問題,其實 X Server 還會做一些重復無意義的工作,這里不再贅述。?
有痛點就有解決方案,新一代的 Display Server 呼之欲出。?
接下來 Wayland 誕生了。
Wayland
Wayland is A Simple Display Server。?
它在誕生之初的使命是用于改善 X Server 的不足并取代它。?
但是現在看來它所作的不僅僅是替代 X Window 下的 X Server,也不僅僅是要取代 X Widnow。而是要顛覆 Linux 桌面上的 X Server/X Client 的概念。?
以?Compositor/Client 的結構取而代之。?
同時它復用了所有 Linux 內核圖形和 I/O 技術:KMS、GEM、DRM、evdev。
其架構圖如下(圖來自 imtx.me 作者 TualatriX):
同樣是上面那個實例,其流程如下:?
1. 內核捕獲鼠標點擊事件并發送給Wayland Compositor。?
2. 由于是直接發給Wayland Compositor的,所以Wayland Compositor會正確地計算出按鈕的位置。同時它會把這一事件發送給按鈕所在的應用程序來處理。?
3. 應用程序直接渲染,無需向Wayland Compositor請求。只需在繪制完成之后向Wayland Compositor發送一條信息表明這塊區域被更新了。?
4. Wayland Compositor收到這條信息后,立即重新合成整個桌面。
所以基于 Wayland 的整個任務流程非常簡單:?
1. 基于Wayland協議,處理evdev的信息;?
2. 通知Client(即應用程序)對相關事件做出反應(至于應用程序想怎么反應,Compositor不需要過問);?
3. 收到Client的狀態更新,重新合成圖形或管理新的圖形布局。
簡單的說,Waylannd 就是一個去除 X Window 中不必要的設計、充分利用現代 Linux 內核圖形技術(DRM 子系統中的 KMS、GEM、DRM)的一個顯示機制,它的出現是自然而然的,它的使命不是為了消滅X Window,而是將Linux的圖形技術發揮至更高的一個境界。傳統的X Window(即經典X應用、Gtk 1.x/2.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, 即 直接渲染管理器。?
它是為了解決多個程序對 Video Card 資源的協同使用問題而產生的。它向用戶空間提供了一組 API,用以訪問操縱 GPU。
fbdev
Linux 早在很久以前就已經有一個名為?fbdev?的 API ,用于管理顯卡的 framebuffer,但是它不能用于處理 基于視頻卡的 GPU 的 3D 加速的需求。?
這些 Video Card 常常需要設置或者管理 卡內存(Video RAM)中的一些命令隊列。將命令分配給 GPU,還需要管理 Video RAM 本身的 Buffer 和 Free Space。
在最初的用戶空間的程序(比如 X Server)可以直接管理這些資源,但這些程序通常表現的就仿佛他們是唯一去獲取這些資源的一樣。當有多個程序試圖去以自己的方式同時控制 Video Card 資源時,就會崩潰。
DRM
DRM 的誕生就是用來處理多個程序對 Video Card 資源的協同使用問題。?
DRM 獲得對 Video Card 的獨占訪問權限,它負責初始化和維護命令隊列、Video RAM 以及其他相關的硬件資源。
要使用 GPU 的程序將請求發送給 DRM,由 DRM 作為仲裁來避免沖突。?
DRM 到現在已經涵蓋了以前由用戶空間程序處理的很多功能,比如 幀緩存區的管理和模式設置,內存共享對象和內存同步。其中一些拓展具有特定的名稱,比如圖形執行管理器 GEM 或者內核模式設置 KMS,這些都是屬于 DRM 子系統。?
DRM 同時也負責處理 GPUs 切換的問題。
在下一章,我們會開始介紹 Linux 源碼中 DRM 的軟件架構。
總結
以上是生活随笔為你收集整理的4.x版本内核中platform_device的生成的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 查看内核中每个函数花费的时间 initc
- 下一篇: ARM嵌入式平台性能测试
