基于GTK+和X-window的GUI在嵌入式Linux中的應(yīng)用
整體尺寸大小
經(jīng)過一系列的改進后,我們就得到了一個穩(wěn)定的,功能和性能都能滿足嵌入系統(tǒng)要求的GUI了。在ARM系統(tǒng)下,得到的尺寸大小為:
其中 GTK+ 里面仍然還有不需要的代碼,可以將其再去除。如果再簡化一下的話,GTK+ 可以做到850KB,總體大小可以到 2.8M。
運行性能
將修改過的 GUI 運行在一個 ARM7 的系統(tǒng)上,CPU 為 100MHZ,運行時的效果還不錯,窗口響應(yīng)用戶操作的速度很迅速,新的畫面創(chuàng)建與顯示的速度都能接受。
但是,啟動時的時間卻有些問題,比較慢。在這個 CPU 上,應(yīng)用程序畫面加載與顯示的時間需要 2.4秒,其中 1.5 秒是花在了建立與顯示 UI 上。
在較慢的 CPU 上,這樣的啟動速度是 GTK+ 運行在 X,X 再寫到 framebuffer 上導(dǎo)致的。我們需要分析具體的瓶頸在什么地方。在深入的調(diào)試中,當(dāng)使用PC機來運行我們的應(yīng)用,而在ARM設(shè)備上顯示時,初始化和顯示的時間幾乎可以忽略不計。同樣,將應(yīng)用運行在ARM設(shè)備上,而在PC機上顯示時,性能也很好。所以數(shù)據(jù)包的傳輸,framebuffer上的顯示及GTK+的運算速度都不是問題所在。速度慢的原因可能是這幾個因素的先后順序引起的。而且內(nèi)存的占用上也存在問題。在初始階段,GTK+構(gòu)造了大量的對象,GTK+和X是使用共享內(nèi)存來通訊的,X寫到framebuffer,framebuffer也是不變地寫到顯存上。這些都是發(fā)生在一個較窄總線上相同的內(nèi)存空間里,這個就會引起速度慢。
現(xiàn)在知道了X在啟動時比較花費時間。在客戶模式下的GTK+的應(yīng)用,需要連接到X server,通過了認證,得到位深及其他資源。當(dāng)然,使用X系統(tǒng)的好處要遠大于它的不足。X系統(tǒng)提供了一個靈活的client/server模型,這樣更有利于應(yīng)用的靈活加入。你可以在同一時間顯示不用的應(yīng)用窗口,而像GTK+/Fb等其他的GUI方式無法做到這一點,當(dāng)然QPE是個例外。
2.4秒的延時,也并不能完全否定一切。在一個700MHZ的windows系統(tǒng)的PC上,Microsoft Word, Excel and IE幾乎都需要2秒的時間來啟動。KEdit, 一個KDE的應(yīng)用程序,在500MHZ的PIII上,加載的時間也需要1.37秒。
對于啟動時間,需要采用其他的辦法來加以改善。一個策略就是在用戶等待的時候,顯示一些東西來表示系統(tǒng)正在工作,這樣會使用戶忽略掉啟動時間的緩慢。另一個策略就是可以預(yù)先在背后啟動一些通用的程序,來有效減少集中啟動的時間。這也是通常嵌入系統(tǒng)所慣用的做法。
優(yōu)化
在ARM7的系統(tǒng)上,由于沒有浮點運算FPU,所以GTK+中的浮點運算部分最好是去掉,否則會大大影響性能。GTK+使用到的浮點變量只分布在少數(shù)的幾個窗口中,并且去掉它們會帶來3%到12%的性能提高。
高像素的應(yīng)用會導(dǎo)致速度較慢,這大多是由于GTK+與X中對高像素的效率低下的處理有關(guān)。如涉及到的XPM,XPM (X pixmap)格式是被設(shè)計來做到較好的兼容性,而不是更加快速。X系統(tǒng)是一個像素一個像素地畫到server的pixmap的。GTK+的像素處理也很低效,它是使用fgetc()來讀取XPM文件的,這就會帶來大量的上下文切換開銷。
X窗口系統(tǒng)的結(jié)構(gòu)也導(dǎo)致了像素的加載變慢。GTK+客戶端需要加載,分析XPM文件,將像素值通過傳輸協(xié)議發(fā)送給server,然后server才將像素值放入framebuffer。如果客戶端直接將數(shù)據(jù)寫到framebuffer server那將會有效很多。
處理的GTK+像素的辦法就是,寫一個臨時的中間過程,取得render過的像素,使用這個原始數(shù)據(jù)來替換XPM數(shù)據(jù),這個原始數(shù)據(jù)就可以直接強制寫到X server上。從結(jié)構(gòu)上來看,這雖然不是一個很好的處理辦法,但在效率上卻要比使用XPM要快上80%。
總結(jié)
現(xiàn)在的消費電子大多需要一個美觀,實用的圖形界面系統(tǒng)GUI。在嵌入系統(tǒng)linux下,有很多種GUI可供選擇。使用開放代碼的GUI的優(yōu)點就是你可以將其裁剪得滿足你的各種各樣的特殊需求。GTK+就是一個很好的選擇,而X-window系統(tǒng)提供了一個穩(wěn)定可靠的client/server模型。當(dāng)你得到一個只有2.9M大小的定制過的GUI時,對大多數(shù)的嵌入系統(tǒng)還是很有參考價值的。
關(guān)于作者
余濤,高級軟件工程師,現(xiàn)從事 linux 嵌入式系統(tǒng)的開發(fā)工作,主要研究方向嵌入系統(tǒng),UPNP 多媒體播放系統(tǒng)。您可以通過電子郵件 yut616@21cn.com 和他聯(lián)系。希望能與更多的朋友交流關(guān)于 Linux 方面的知識。
評論