一、說明
以X Server為中心,簡要地分為四層,如圖所示
二、X方式與Framebuffer方式的差異
1. X方式
1) 什麼是X
我們常說的X Window,X,X11(指X協議的11版本)一般指X協議,或指是基於X協議的X服務端程序(X Server)
2) X Server與X Client
a) X協議指X Server及X Client組成的c/s架構,及其通訊協議的實現
b) X Server有主事件循環,由它來處理用戶輸入、顯示及與X Client通訊
c) X Client即X桌面上運行的普通應用程序
應用程序如果想顯示數據,需要利用X Lib庫建立X窗口(X Client),它通過X協議與X Server通訊,讓X Server完成顯示;X Server會把接到鍵盤鼠標事件,傳給焦點所在的X Client處理
2. Framebuffer方式
Framebuffer方式相對簡單,它由內核直接支持,通常用於嵌入式系統。應用程序可以得到屏幕顯示區域的指針,然後對其寫數據來進行顯示,其中窗口的概念不強,它自身不帶窗口管理,需要應用軟件自己管理窗口。比如qtopia基本於framebuffer顯示時,qtopia自身實現了窗口管理功能
3. 應用程序的顯示方式
很多應用程序同時支持X和Framebuffer兩種模式顯示,如gtk,qt等,以下我們只討論它基本於X實現的部分
三、分層
1. 應用層(Application)
指X Window上運行所有帶圖形界面的應用程序,每個窗口都是一個X Client
1) X Lib app
直接使用X函數的應用程序,這種程序一般界面簡單,比較底層,比如很多窗口管理器直接寫在這層
2) Gtk app
gtk又分為gtk和gdk兩層,
gtk為控件及主循環的實現
gdk相對底層,控制底層繪圖部分,它支持framebuffer、X11、DirectFb等
應用程序可調用gtk函數,也可直接調用gdk函數
gtk常和cairo一起實現二維特效
3) Qt app
Qt也通過調用X Lib實現圖形界面
Qt的優勢在於它是C++實現的,使用起來程序結構更好,也有較成熟的嵌入式版本
4) SDL app
SDL也通過調用X Lib實現圖形界面
SDL更底層,代碼少,沒有控件,但做特殊效果很好用
2. 窗口管理器層(Window manager簡稱wm)
Window manager是特殊的X Client,也通過X Lib庫與X Server交互,與一般應用不同的是:它負責控制各個窗口的動作,及操作主窗口
WM的功能分為管理(manager)和工具(tools),
1) Manager
負責各個窗口的建立銷毀/顯示隱藏/最大最小化/移動縮放,管理窗口隊列,設置焦點窗口,窗口切換效果等
2) Tools
實現桌面工具條,桌面菜單等基本界面及小工具
3) 具體實現
實現通常有兩種方式:一種是manager和tools在一個程序中實現,一種是分開兩個程序實現,使用時可以隨意組合
a) qvwm, blackbox等較早期的wm,都是manager和tools在一個程序中實現的
b) xfce、metacity等是分開的,例如:xfce包含tools和manager,但不在一個程序中實現,它的manager是xfwm,我們可在使用xfce時把xfwm替成metacity(metacity是一個manager,不帶tools)
3. X服務器層(X Server)
主循環控制顯示,讀取設備數據,與X Client通訊,事件循環,並把事件送給焦點窗口
1) 普通X Server
功能完整的X Server,代碼量大,支持全,常見的如XFree86,Xorg等
2) Tiny X Server
一般用於嵌入式系統,資源佔用小,代碼少,功能及邏輯相對簡單,如KDrive(Xvesa/Xchips/Xfbdev/Xi810……)
4. 系統底層(System)
1) Kernel
與硬件交互,獲得輸入設備的數據,向顯示設備輸出
2) Dev
文件系統中的設備文件,程序通過對它的讀寫和操作與kernel交互,控制硬件
3) 中間層
在程序和Dev層之間,有時還需要庫或程序處理設備數據,比如觸摸屏就使用libts去除噪點,過濾出更有效的數據
沒有留言:
張貼留言