嵌入式linux中文站發現很多linux初學者在學習linux圖形方面的知識時會遇到一些概念,如:x、x11、 xfree86、wm、kde、gnome、qt、qt/e、qtopia、directfb、framebuffer、顯示卡加速驅動等等。理解它們之間 是什麼關係,對我們學習來說是非常重要的。寫這篇文章的目的,就是想讓大家明晰這些概念及它們之間的關係。
一、linux作業系統和圖形的關係
linux本身沒有影象介面,linux現在的影象介面的實現只是linux下的應用程式實現的。影象介面並不是linux的一部分,linux只是個基於命令列的作業系統。linux核心為linux系統中的圖形介面提供了顯示裝置驅動。
二、x的概念
x 是協議,就像http協議,ip協議。這個概念很多初學者甚至學習linux有一定時間的人都混淆,乙個基於x的應用程式需要執行並顯示內容時,他就聯接 到x伺服器,開始用x協議和伺服器交談。比如乙個x應用程式(x client)要在螢幕上輸出乙個圓,那麼他就用x協議對x伺服器說:喂!我需要在螢幕上畫乙個圓。x應用程式只負責告訴x伺服器在螢幕的什麼地方用什麼 顏色畫乙個多大的圓,而具體的"畫"的動作,比如這個圓怎樣生成,用什麼顯示卡的驅動程式去指揮顯示卡完成等等工作是由x伺服器來完成的。x伺服器還負責捕獲 鍵盤和滑鼠的動作。假設x伺服器捕獲到滑鼠的左鍵被按下了,他就告訴x應用程式:親愛的應用程式先生,我發現滑鼠被按下了,您有什麼指示嗎?假如x應用程 序被設計成當按下滑鼠左健後再在螢幕上畫乙個正方形的話,x應用程式就對x伺服器說:請再畫乙個正方形,當然他會告訴伺服器在什麼地方用什麼顏色畫多大的 正方形,但不關心具體怎麼畫--那是伺服器的事情。
三、x11、x11r6的概念
x11表示x協議的第11版。x11r6是x協議第11版第六次發行。
四、xfree86是什麼?
xfree86 是x windows server的x11r6執行程式。有了協議就需要具體的軟體來實現這個協議。xfree86是按照x協議的規定來完成x應用程式提交的在螢幕上顯示的任 務。實現x協議的軟體也並不只有xfree86, xfree86只是實現x協議的乙個免費x伺服器軟體。有些甚至能夠在windows上有x伺服器執行,這樣您能夠在linux系統上執行乙個x應用程式 然後在另一台windows系統上顯示。只是在linux上最常用的是xfree86。不過現在的linux發行版大多用xorg了。
xfree86內容包括x伺服器,字型, 乙個x下的終端程式(xterm),乙個簡單的視窗管理器(twm),很多有用的小工具, 顯示輸出驅動和包括鍵盤滑鼠在內的許多輸入模組。
五、wm(window manager 視窗管理器)
在紅帽系統中,可以設定啟動級別3,進入命令列終端,然後執行:
#startx
起**像介面,您看到的是個和平時使用相同的完整的影象介面操作環境。能夠最大化,最小化,移動,關閉視窗等。 按ctrl+alt+backspace反回字元介面 。輸入:
#xinit
再次啟**像介面,您看到了什麼,您看到乙個xterm(乙個執行於x下的終端程式)。而且不能移動。但是您能夠在這個xterm中輸入命令開啟x應用程式,假如輸入:
#mozill
開啟瀏覽器,您看到的瀏覽器和平時有什麼不同嗎?他在螢幕中間,不能移動,不能最小化,不能最大化,沒有邊框。
為什麼同樣乙個x應用程式會有這樣的不同呢?因為我們用startx起**像介面的時候同時也啟動了乙個wm(即視窗管理器),假如您用kde就起動了 kde,假如您用gnome就起動了gnome。但是您用xinit起**像介面的時候卻沒有起動wm 。
視窗管理器的作用就是最大化、最小化、移動、關閉視窗等。而這些不是x伺服器來負責完成的。假如您用xinit起**像介面並在xterm中輸入twm,看看會有什麼?
xterm被加上了乙個邊框,您能夠通過這個邊框移動、最大化、最小化這個xterm。twm就是xfree86中自帶的視窗管理器,是個比較簡陋的最簡單的視窗管理器,但是他具備視窗管理器的全部特徵。
六、kde和gnome
kde 和gnome是linux裡最常用的影象介面操作環境,他們不但僅是個視窗管理器那麼簡單, kde是k desktop environment 的縮寫,他不但是個視窗管理器,更有很多配套的應用軟體和方便使用的桌面環境,比如工作列,開始選單,桌面圖示等等。gnome是gnu network object model environment 的縮寫,和kde相同,也是個功能強大的綜合環境。
七、qt、qt/e、qtopia
trolltec(奇趣)的qt產品有很多,如:qt、qt/e、qtopia等。目前為諾基亞所有。
qt 泛指qt的所有桌面版本,如:qt/x11,qt windows,qt mac等。由於qt最早是在linux中隨kde流行而來,所有通常認為qt都是基於linux下的qt/x11。qt是乙個完整的c++應用程式開發框 架。它包含乙個類庫,和用於跨平台開發及國際化的工具。qt api在所有支援的平台上都是相同的,qt工具在這些平台上的使用方式也一致, 因而qt應用的開發和部署與平台無關。在桌面系統中,qt程式通常是符合x協議的應用程式,它需要x伺服器的支援。
qt/e 是用於嵌入式linux系統的qt版本。qt/e中去掉了x lib的依賴而直接工作於frame buffer上,因而應用程式處理過程效率比較高。它的執行只要有framebuffer裝置就可以了,不需要x伺服器的支援。但其本身執行也是有伺服器 和客戶端的概念。在伺服器沒有啟動前執行qt/e程式,需要在加「-qws」來啟動伺服器。如:
#./hello –qws
在qt4以後,qt/e改名位qtopia core了,並且整合到qtopia成品中去了。
qt/e 是frame buffer裝置執行的。具有簡潔、高效等特點。但是了解frame buffer裝置的工程師會發現,frame buffer裝置無法實現硬體加速功能。這也限制了基於framebuffer裝置的圖形解決方案的發展。事實上桌面上的xfree86預設情況下是不支 持framebuffer裝置的,xfree86直接操作顯示卡,充分利用顯示卡加速功能(下個主題將介紹顯示卡加速方面的內容)。xserver相容最多型別 的顯示卡,一般來講,現在市面上80%以上的顯示卡都能夠被這個server支援。但有時也會有一些顯示卡不能不正確設別,這時可以採用frame buffer模式來支援顯示器。主要是用到了xfree86的 frame buffer server(xf86_fbdev)。需要修改xfree86的配置檔案/etc/x11/xf86config,及在/etc/grub.conf中 加入vga=***功能。
qtopia是乙個面向嵌入式linux的全方位應用程式開發平台,同時也是用於基於linux的pda(個人數字助理),智慧型**(smartphone)以及其他移動裝置的使用者介面。
八、directfb、顯示卡加速驅動
首先directfb類似於桌面中的xfree86。桌面中的xfree86不需要frame buffer裝置,而directfb需要。
顯示卡加速 在嵌入式gui中需要實現多圖形功能,包括圖形繪製以及拷貝等。其中的許多功能需要進行大量的資料傳遞(如圖形拷貝),或者需要進行大量的數值運算(如畫 樣條曲線)。如果這些功能都由純軟體實現的話,會占用大量的cpu時間並且需要傳遞大量的資料,從而影響了圖形效能。許多顯示卡晶元帶有圖形處理器,能夠從 硬體上實現一部分圖形功能。支援硬體加速的圖形庫可以通過圖形處理器實現這些圖形功能,從而減輕了cpu的負擔並減少了資料在匯流排上的傳輸時間,提高了圖 形效能。
directfb專案是由德國convergence公司推動的open source計畫的一部分,它是專門為滿足嵌入式裝置要求而開發的小巧、強大、靈活和易於使用的圖形系統,並且試圖成為乙個建構於linux framebuffer device之上的新圖形標準。它在framebuffer的基礎上提供了圖形加速、輸入裝置處理提取、透明視窗和多重顯示層的功能,能夠對嵌入式系統 gui有較好的支援。與那些通用的嵌入式gui系統相比,它具有非常簡潔、高效的體系結構和硬體圖形加速功能。
directfb依賴已有的核心介面即幀緩衝裝置(/dev/fb)訪問圖形處理器,也就是說direetfb需要乙個 正在工作的幀緩衝驅動。linux核心有專門的幀緩衝驅動支援某些圖形處理器。對於不支援的圖形處理器,核心提供ve—sa幀緩衝(這種幀緩衝有一些限 制)。directfb利用幀緩衝裝置做如下工作:
◆ 設定顯示卡工作模式(解析度,顏色深度,時序)
◆ 對映視訊記憶體
如果某種顯示卡被direcfb支援並且在linux核心中也有這種圖形處理器的幀緩衝驅動,directfb利用幀緩衝裝置做如下額外的工作:
◆ 對映視訊記憶體io埠(如果加速驅動在使用者空間實現,需要這步。如果在核心空間實現,則不需要對映,但需要有相應的驅動介面。也可以重新寫乙個驅動程式來專門實現加速功能)
◆ 關閉幀緩衝驅動中自帶的加速功能
針對具體的圖形操作(例如拷貝、區域填充、區域拷貝、畫線、圖形拉伸等),directfb加速驅動(對對映到使用者 空間的控制暫存器訪問)訪問視訊記憶體對映的圖形處理器i/o埠向圖形處理器提交命令,由顯示卡來實現相應的命令。也就是說真正的硬體加速完全是在使用者空間實 現。這樣directfb就可以對它支援的圖形處理器提供最大限度的硬體圖形加速。這些加速功能需要顯示卡控制器的支援。一些嵌入式的顯示控制器中並沒有相 應的功能。需要外接顯示卡來實現。
上層apl支援directfb的有:xdirectfb、directfbgl、gtk+、dfbterm、dfbsee、dfbpoint、mythtv、qt on directfb、sdl等。
directfb也需要視窗管理器。directfb採用模組化設計,它並不依賴於某種具體的視窗管理器,只要具體的窗 口管理器實現介面directfb中的corewmfuncs中定義的函式,就可以掛到directfb中執行。directfb自帶有兩個視窗管理 器:default和unique,可以在配置檔案中用wm=***來選擇用哪乙個作為當前的視窗管理器。
通過上面8個方面,介紹了x、x11、xfree86、wm、kde、gnome、qt、qt/e、qtopia、directfb、framebuffer、顯示卡加速驅動等概念及它們的一些關係。
Linux X客戶端 伺服器 視窗管理器的關係
嵌入式linux中文站發現很多linux初學者在學習linux圖形方面的知識時會遇到一些概念,如 x x11 xfree86 wm kde gnome qt qt e qtopia directfb framebuffer 顯示卡加速驅動等等。理解它們之間 是什麼關係,對我們學習來說是非常重要的。寫...
伺服器與客戶端
建立socket操作,建立流式套接字,返回套接字型大小socksrv socket socket int af,int type,int protocol 第乙個引數,指定位址簇 tcp ip只能是af inet,也可寫成pf inet socket socksrv socket af inet,s...
UDP 客戶端伺服器
udp 客戶端 include include include include include define size 100 define ip 127.0.0.1 define port 10086 int main struct sockaddr in addr 建立socket udp so...