精通嵌入式Linux編程

出版時(shí)間:2010-5  出版社:北京航空航天大學(xué)出版社  作者:李玉東,李玉萍 編著  頁數(shù):209  
Tag標(biāo)簽:無  

前言

第一個(gè)問題,為什么要寫這本書?現(xiàn)在很多面向嵌入式Linux編程的書籍理論性很強(qiáng),但并不針對某一領(lǐng)域,對于解決某一領(lǐng)域的特定問題指導(dǎo)性較弱。利用嵌入式Linux來構(gòu)建系統(tǒng),應(yīng)用于便攜式終端產(chǎn)品的居多,就軟件方面而言,這類產(chǎn)品主要有兩個(gè)環(huán)節(jié)需要把握:一是Linux內(nèi)核(包括驅(qū)動(dòng))的移植;二是GUI(Graphical User Interface,即圖形用戶界面)層與應(yīng)用層軟件的設(shè)計(jì)。本書就是基于后一個(gè)環(huán)節(jié)展開的。有人說,嵌入式Linux的最大問題是其GUI沒有統(tǒng)一標(biāo)準(zhǔn)。但不知道這是它的缺點(diǎn)還是優(yōu)點(diǎn),是否應(yīng)該由如Microsoft或Nokia這種級別的公司在這個(gè)操作系統(tǒng)平臺(tái)上構(gòu)建一個(gè)全世界都一樣的用戶界面,然后大家都用它的API來開發(fā)應(yīng)用程序呢?這個(gè)問題暫且不討論。嵌入式產(chǎn)品對于界面的需要千差萬別,MP3、MP4、導(dǎo)航儀、電視機(jī)頂盒、手機(jī)等五花八門。如果所有的界面都從“開始”菜單開始,操作起來不一定都很方便,另外,操作方式是用手指、遙控器、鼠標(biāo)還是別的什么東西是可以選擇的,因此,對于嵌入式產(chǎn)品,作者認(rèn)為個(gè)性化用戶界面才是合適的,任何一個(gè)GUI都不可能有如此好的適應(yīng)性和可配置性,把一個(gè)PDA風(fēng)格的GUI系統(tǒng)移植到機(jī)頂盒上,或把一個(gè)手機(jī)風(fēng)格的GUI移植到工控機(jī)里都是沒有意義的。解決問題的最好辦法,就是自己構(gòu)建一個(gè)小型的GUI環(huán)境,只針對具體應(yīng)用,與其他系統(tǒng)無關(guān)。那么,可能有人會(huì)說,量體裁衣,開發(fā)一個(gè)適合于自有項(xiàng)目的GUI環(huán)境固然很好,但這會(huì)不會(huì)很復(fù)雜,是不是會(huì)使項(xiàng)目周期拉長呢?本書可以告訴你,開發(fā)一個(gè)小型的嵌入式GUI系統(tǒng)其實(shí)很容易!何況網(wǎng)絡(luò)上有如此之多的開源代碼可供參考。當(dāng)然,無償復(fù)制開源軟件用于商業(yè)目的是不允許的。但人們的思想是自由的,這一點(diǎn)誰也否認(rèn)不了。另外,現(xiàn)在已經(jīng)開發(fā)完并開源的面向嵌入式Linux的GUI系統(tǒng)固然很多,而且還有一些人又在開發(fā)這個(gè)“柜”、那個(gè)“柜”的,但沒有人仔細(xì)討論到底一個(gè)嵌入式Linux GUI系統(tǒng)的體系結(jié)構(gòu)如何能讓使用者從全局把握系統(tǒng),從而開發(fā)出自己的GUI環(huán)境,作者認(rèn)為這是“授之以魚”還是“授之以漁”的問題。所以,作者寫了這本書,通過嵌入式Linux特定環(huán)節(jié)的應(yīng)用實(shí)例,即中間件層的GUI軟件,來闡釋Linux開發(fā),同時(shí)使讀者對于消息驅(qū)動(dòng)的、輕量級窗口系統(tǒng)的實(shí)現(xiàn)有較為徹底的理解。第二個(gè)問題,這本書有什么特點(diǎn)?本書只針對GUI這個(gè)環(huán)節(jié)討論技術(shù)問題,討論其如何在嵌入式Linux上實(shí)現(xiàn),并用到了Linux開發(fā)的技術(shù)細(xì)節(jié),所以本書第一個(gè)特點(diǎn)是針對性強(qiáng)。另外,作者不想把這本書搞成一個(gè)Linux編程的百科全書,講清楚一個(gè)問題是最重要的,所以本書第二個(gè)特點(diǎn)是精煉。本書出版之前,其早期版本作者一直放在網(wǎng)站上,有很多人下載并在網(wǎng)絡(luò)上傳播。這樣做的目的不為賺錢,只希望對大家都有所幫助。由于時(shí)間有限,書中可能還存在一些錯(cuò)誤。另外,嵌入式Linux以及GUI技術(shù)的飛速發(fā)展,使得書中提到的一些概念有可能不再新穎,或者其中提到的GUI的實(shí)現(xiàn)方法不見得適用于任何項(xiàng)目。但通過本書,可以了解到作者對于一個(gè)小型窗口系統(tǒng)的實(shí)現(xiàn)思路。如果書中提到的概念或用于示例的LGUI實(shí)現(xiàn)代碼有任何錯(cuò)誤,歡迎讀者批評指正。本書能夠順利完成并出版,得到了很多老師與朋友的幫助,首先要感謝我的導(dǎo)師——北京大學(xué)人機(jī)交互與多媒體實(shí)驗(yàn)室的王衡副教授,她給了我大量的指導(dǎo)與幫助。另外,奚小君、秦藝丹、李夏、李文陽、王文翩、劉彥軍、夏華、劉成功、王成、鄭浩、張明、張小鈴、李志華、趙處一、王成明、李自忠、秦仕軍、范佳新、王小良等朋友也給予了大力支持,在此向他們表示感謝!

內(nèi)容概要

  本書針對使用Linux構(gòu)建嵌入式系統(tǒng)的一個(gè)關(guān)鍵環(huán)節(jié)——圖形用戶界面(GUI),首先講述了Linux編程的高級技巧,包括多進(jìn)程、多線程等技術(shù);然后通過實(shí)例重點(diǎn)講述了窗口系統(tǒng)的基本知識與實(shí)現(xiàn)技巧,為讀者開發(fā)自己的面向嵌入式Linux的GUI環(huán)境提供了一個(gè)參考實(shí)現(xiàn)范例。重點(diǎn)包括:LGUI多窗口的設(shè)計(jì)與實(shí)現(xiàn)、LGUI的消息管理、窗口與無效區(qū)的管理、設(shè)備上下文與圖形設(shè)備接口的設(shè)計(jì)與實(shí)現(xiàn)等?! ”緯m用于使用Linux構(gòu)建嵌入式系統(tǒng)的軟件工程師以及希望深入了解窗口系統(tǒng)實(shí)現(xiàn)原理的讀者。

書籍目錄

第1章 概論 1.1 嵌入式系統(tǒng)的基本概念 1.2 嵌入式系統(tǒng)的特征 1.3 選擇Linux構(gòu)建嵌入式系統(tǒng) 1.4 GUI在嵌入式Linux系統(tǒng)中的地位及要求 1.5 用戶界面概況  1.5.1 用戶界面的歷史  1.5.2 圖形用戶界面的特征  1.5.3 圖形用戶界面系統(tǒng)的結(jié)構(gòu)模型  1.5.4 用戶界面的發(fā)展:GUI+新人機(jī)交互技術(shù) 1.6 Linux圖形環(huán)境及桌面平臺(tái)簡介  1.7 各種嵌入式 Linux上的圖形庫與GUI系統(tǒng)介紹  1.7.1 Qt/Embedded  1.7.2 MicroWindows/NanoX  1.7.3 MiniGUI  1.7.4 OpenGUI  1.7.5 GTK+ 1.8 Linux系統(tǒng)中的多語言問題 1.9 一個(gè)嵌入式LinuxGUI系統(tǒng)開發(fā)的實(shí)例  1.9.1 開發(fā)GUI系統(tǒng)主要考慮的問題  1.9.2 后續(xù)講解的實(shí)例第2章 Linux基本編程知識 2.1 編譯器的使用 2.2 函數(shù)庫的使用 2.3 Makefile 2.4 GDB 2.5 建立交叉編譯環(huán)境  2.5.1 什么是交叉編譯環(huán)境  2.5.2 交叉編譯的基本概念  2.5.3 建立arm_linux交叉編譯環(huán)境 2.6 Linux下常見的圖形庫編程簡介  2.6.1 Qt  2.6.2 GTK+第3章 Linux高級程序設(shè)計(jì)簡介 3.1 Linux IPC介紹  3.1.1 信號  3.1.2 管道  3.1.3 消息隊(duì)列  3.1.4 信號量  3.1.5 共享內(nèi)存  3.1.6 Domain Socket 3.2 Linux多線程編程介紹  3.2.1 創(chuàng)建線程  3.2.2 線程的退出與取消  3.2.3 線程退出時(shí)的同步問題  3.2.4 線程清理函數(shù)  3.2.5 線程取消狀態(tài)  3.2.6 線程同步  3.2.7 第三方函數(shù)庫  3.3 FrameBuffer編程簡介第4章 基本體系結(jié)構(gòu) 4.1 基礎(chǔ)知識  4.1.1 嵌入式Linux的GUI到底有什么用  4.1.2 如何定義基本體系結(jié)構(gòu)  4.1.3 為什么用客戶機(jī)/服務(wù)器結(jié)構(gòu)  4.1.4 為什么要多進(jìn)程  4.1.5 為什么要多線程 4.2 體系結(jié)構(gòu)綜述  4.2.1 客戶機(jī)與服務(wù)器之間的通信通道  4.2.2 客戶機(jī)需要與服務(wù)器交換什么信息  4.2.3 服務(wù)器對客戶機(jī)進(jìn)程的管理 4.3 進(jìn)程創(chuàng)建與進(jìn)程的管理第5章 多窗口的設(shè)計(jì)與實(shí)現(xiàn)第6章 GUI中的消息管理第7章 窗口輸出及無效區(qū)的管理第8章 DC與GDI的設(shè)計(jì)與實(shí)現(xiàn)第9章 控件實(shí)現(xiàn)第10章 定制GUI對圖像的支持第11章 字庫及輸入法的實(shí)現(xiàn)第12章 GUI的移植第13章 LGUI應(yīng)用開發(fā)模式第14章 GUI系統(tǒng)的效率問題后記——LGUI開發(fā)的一些體會(huì)參考文獻(xiàn)

章節(jié)摘錄

插圖:這時(shí)候就需要一個(gè)“技術(shù)部經(jīng)理”出來說話,他來協(xié)調(diào)每個(gè)人發(fā)言的時(shí)間,以便每個(gè)人表達(dá)的信息都能為別人所了解。那么這個(gè)協(xié)調(diào)與被協(xié)調(diào)的關(guān)系算不算是一個(gè)客戶機(jī)/服務(wù)器結(jié)構(gòu)呢?一般意義上講應(yīng)該說不算,因?yàn)樗^客戶機(jī)/服務(wù)器結(jié)構(gòu)應(yīng)該是:客戶機(jī)發(fā)出請求,服務(wù)器進(jìn)行處理,并將處理的結(jié)果返回到客戶機(jī)。技術(shù)部開會(huì)的時(shí)候并不是每個(gè)工程師發(fā)請求到技術(shù)部經(jīng)理,由技術(shù)部經(jīng)理完成處理后返回信息到工程師。在這個(gè)系統(tǒng)中,技術(shù)部經(jīng)理只是一個(gè)協(xié)調(diào)者的角色,而不是服務(wù)者的角色,所以并不是通常意義上講的客戶機(jī)/服務(wù)器結(jié)構(gòu)。但是另一方面,客戶端有胖瘦之分,客戶端要求服務(wù)器端處理的事情可能很復(fù)雜,也可能很簡單。在很復(fù)雜的情況下,客戶端很少自己做事情,大部分事情都由服務(wù)器端完成;相反,客戶端可能要求服務(wù)器做很少的事情,大部分事情由自己完成。無論何種情況,它們之間有一個(gè)請求與被請求的關(guān)系、協(xié)調(diào)與被協(xié)調(diào)的關(guān)系。所以,在這里不必過多討論這是不是嚴(yán)格意義上的客戶機(jī)/服務(wù)器結(jié)構(gòu),姑且認(rèn)為協(xié)調(diào)者的角色就是服務(wù)器,被協(xié)調(diào)者的角色就是客戶機(jī)。在多個(gè)進(jìn)程同時(shí)運(yùn)行的情況下,任何一個(gè)進(jìn)程在對屏幕進(jìn)行輸出的時(shí)候,都需要了解當(dāng)前屏幕上的哪些區(qū)域是町以輸出的,哪些區(qū)域是不可以輸出的。具體實(shí)現(xiàn)的時(shí)候,有兩種方法:一是所有的輸出都由一個(gè)服務(wù)進(jìn)程來完成,由這個(gè)服務(wù)進(jìn)程來確定當(dāng)前對于哪些屏幕區(qū)域的輸出請求是允許的,哪些是不允許的,這樣就避免了多個(gè)進(jìn)程對于屏幕區(qū)域的競爭;另一種方法就是其他進(jìn)程只從服務(wù)進(jìn)程那里請求并得到允許輸出的區(qū)域,而具體的輸出操作由自己完成。前一種方法面臨的問題是需要在進(jìn)程之間不停地傳遞大量數(shù)據(jù)。不同進(jìn)程之間除非通過IPc,否則因?yàn)椴煌倪M(jìn)程空問不允許互相訪問數(shù)據(jù),大塊的數(shù)據(jù)需要在進(jìn)程之間傳遞,這是非常耗費(fèi)資源的操作,這在嵌入式環(huán)境中更是不可取的。而后一種方法需要輸出的進(jìn)程只請求允許輸出的屏幕區(qū)域,輸出的操作由進(jìn)程自己完成,相對而言.效率會(huì)有很大提高。而LGUI就是采取了這種方式。4.1.4 為什么要多進(jìn)程從GUI的角度講,多進(jìn)程實(shí)際上是多個(gè)進(jìn)程對于屏幕的輸出管理。如果有很多進(jìn)程在同時(shí)運(yùn)行,但并沒有屏幕輸出的要求,就談不上多進(jìn)程的管理。LGUI是一個(gè)支持多進(jìn)程、多線程的客戶機(jī)/服務(wù)器系統(tǒng)。為什么要多進(jìn)程?單個(gè)進(jìn)程不是更簡單嗎?當(dāng)然,并不是所有的嵌入式環(huán)境都要求多個(gè)進(jìn)程同時(shí)運(yùn)行,或者同時(shí)要求進(jìn)行屏幕輸出。例如,一個(gè)機(jī)頂盒的GUI系統(tǒng),就不會(huì)這樣復(fù)雜。但在一些復(fù)雜的嵌入式環(huán)境中,多進(jìn)程是必需的,例如PDA等。不能要求用戶在PDA中添加一項(xiàng)功能,就重新將系統(tǒng)編譯一下。

后記

當(dāng)前,手持設(shè)備、智能終端、信息家電等嵌入式系統(tǒng)正得到蓬勃的發(fā)展。而現(xiàn)在出現(xiàn)的市場只是冰山一角。就像十多年前人們的夢想已變成活生生的現(xiàn)實(shí)一樣,一個(gè)網(wǎng)絡(luò)化、智能化的生活形態(tài)已經(jīng)越來越清晰地展現(xiàn)在人們的面前。而嵌入式系統(tǒng)的發(fā)展,正在為這個(gè)大潮起著推波助瀾的作用。與面向桌面計(jì)算的PC不同,嵌入式系統(tǒng)的最大特色是“個(gè)性化”,沒有固定模式,尤其是用戶界面。這注定了“定制”將會(huì)無處不在。這也使得嵌入式系統(tǒng)的市場將在很大程度上會(huì)“碎塊化”,沒有哪家公司可以統(tǒng)一市場,形成事實(shí)上的標(biāo)準(zhǔn)。嵌入式系統(tǒng)定制化的特點(diǎn)本身就要求系統(tǒng)是開放的,可量身定做的,這也就是為什么有很多公司從WinCE轉(zhuǎn)向Linux的原因。另外,Linux的低成本特點(diǎn),可大大降低最終嵌入式系統(tǒng)的成本。嵌入式系統(tǒng)的蓬勃發(fā)展,使得很多業(yè)內(nèi)的大公司推出了專門針對嵌入式設(shè)備的專用芯片。由于Linux開放源碼、易于移植,并且由于Linux目前在嵌人式系統(tǒng)中所占據(jù)的舉足輕重的地位,幾乎所有的芯片制造商在推出新的芯片時(shí),都會(huì)投入大量的人力、物力來移植Linux,并提供豐富的開發(fā)工具。有些公司甚至?xí)峁┌–PU、SDRAM、FLASH、LCD、TouchPanel、KeyBoard在內(nèi)的功能齊全的測試板和所有這些外部設(shè)備基于Linux的驅(qū)動(dòng)程序。這使得嵌入式Linux的GUI系統(tǒng)成為一個(gè)完整產(chǎn)品構(gòu)架中非常重要的環(huán)節(jié),如果在GUI基礎(chǔ)上進(jìn)一步構(gòu)造面向某一行業(yè)的應(yīng)用,為行業(yè)用戶提供解決方案,將為嵌入式Linux的發(fā)展起到一定的推動(dòng)作用。開發(fā)一個(gè)中等規(guī)模的系統(tǒng),首先需要有全局意識,但除此之外,對一個(gè)完全陌生的系統(tǒng),并不完全是“需求一設(shè)計(jì)一編碼一調(diào)試”的過程,而是需要不斷地反復(fù)。不斷地通過編寫代碼來證明設(shè)計(jì)是可以實(shí)現(xiàn)的,且該種實(shí)現(xiàn)方法的非功能指標(biāo)是滿足設(shè)計(jì)要求的,然后再重新調(diào)整最初的框架。這正是一個(gè)軟件工程中所講的“迭代”過程。唯一滿足工程設(shè)計(jì)標(biāo)準(zhǔn)的文檔,就是源代碼清單。對于一個(gè)需求明確、功能復(fù)雜的系統(tǒng),可以通過一些圖表展示系統(tǒng)設(shè)計(jì),但經(jīng)過驗(yàn)證的框架性的代碼也許才是最好的設(shè)計(jì)文檔。在對系統(tǒng)功能、實(shí)現(xiàn)的環(huán)境都了解有限的情況下,憑空進(jìn)行設(shè)計(jì),絕大多數(shù)情況下是沒有任何意義的。

編輯推薦

《精通嵌入式Linux編程:構(gòu)建自己的GUI環(huán)境》是由北京航空航天大學(xué)出版社出版的。

圖書封面

圖書標(biāo)簽Tags

評論、評分、閱讀與下載


    精通嵌入式Linux編程 PDF格式下載


用戶評論 (總計(jì)3條)

 
 

  •   讓我對嵌入式GUI編程有了一個(gè)新的認(rèn)識,本質(zhì)上的認(rèn)知,知其所以然
  •   適合中級水平讀者,前半部介紹需要用到的Linux知識,后半部講解GUI結(jié)構(gòu)。
  •   LGUI號稱開源,卻沒說在哪里下代碼,在網(wǎng)上搜索,連原來的個(gè)人站點(diǎn)也關(guān)閉了。
    作者確實(shí)不夠厚道,早知道這樣,還不如直接早幾年公開的電子版看看算了,新版的也沒增加什么新內(nèi)容
 

250萬本中文圖書簡介、評論、評分,PDF格式免費(fèi)下載。 第一圖書網(wǎng) 手機(jī)版

京ICP備13047387號-7