嵌入式Linux自學階段性總結(1)


嵌入式Linux自學階段性總結


Leo Chang QQ:278475286 MSN:[email protected]

歡迎從事嵌入式linux圖形及設備驅動開發的朋友交流!


最近自學嵌入式linuxqt/e qtopia和設備驅動開發,短短的幾個月,遇到了一大堆問題,查找資料然後思考,消耗了大量的腦細胞,不過還是有收穫的,最終把路終於走通了就好。最終還沒有來得及實現s3c24xx-uda1341-iis-L3alsa驅動,但是內核和設備驅動的概念也慢慢清晰了,希望有大蝦幫助我,加快自己的進度。致謝!

下面把自己一些新的簡要的說說,希望對也和我一樣的新手有所幫助,別向我一樣繞了大圈子才找到路。

qt/eqtopia移植及編譯


  1. qt/x11, qt/eqtopia coreqtopia的關係


一般意義上的qt指的是依賴x11庫,不依賴於framebuffer,直接運行在x86等主機上的qt版本,我下載使用的是qt-x11-opensource-src-4.4.3.tar.gz qt/e,qt for embedded linux版本,是不依賴x11庫,運行在支持framebuffer的嵌入式系統上的版本,底層直接在framebuffer上繪製圖像,同時可以根據硬件環境定製是否支持窗口UI部件、圖形、圖片等功能,或者他們的顯示樣式,這樣來減小qt/e體積,提高運行效率。這些feature可以在src/corelib/global/目錄中,仿照qfeatures.h中的宏定義來配置,還可以使用qt/x11源碼下tools/qconfig/下工程編譯出來的qt/x11可執行程序qconfig來圖形化配置qt/e的特徵。

qtopiaqt/e的關係,類似於微軟的Visual C++Win32 APIVC開發的應用可以在在Windows窗口環境運行,而基礎是Win32 API,VC是開發SDK或者IDEQtopia是一個運行在主機上用於開發嵌入式圖形環境下應用程序的開發環境,而這個嵌入式圖形環境,就是交叉編譯Qtopia時編譯出來的可執行文件qpeqpe 是嵌入式系統上的圖像外殼,包含了許多現成的工具,比如文件管理、記事本、播放器等,採用qt/e開發。它的核心是qtopia core,也就是qt/e。不過對於手機和PDA等嵌入式產品,這個qt/e中,相比較qt/x11,刪減了很多複雜的UI部件和顯示樣式。最終qtopia交叉編譯後,生成了可執行程序qpe(qt phone edition, qtopia4之前有pdaphone兩個版本,現在只有phone版本的qpe,典型的就是greenphone).

我們可以基於qt/e開發應用,脫離qtopia直接運行在嵌入式linuxframebuffer上,x需要linux內核支持framebuffer.這個在linux內核中make menuconfig圖形化配置的時候,需要在graphic display中選擇上。普通的qte應用程序和qpe, 不同的是運行命令不同,運行基於qt/e的程序,ourapp -qws, 而運行qtopia /qtopiadir/bin/qpe -qws,當然運行前要設置庫等環境變量。qt/e包含qt/e交叉編譯的庫,qtopia需要包含qtopia交叉編譯的庫。這下就能理解qt core/qte開發的程序怎麼樣在開發板的linux上跑了,和運行qpe是類似的。當然,也可以開發運行在qtopia上跑的應用,比如運行在greenphone上的,這種程序的界面就不如普通的qte開發的豐富,顯而易見,手機界面沒有那麼多按鍵.

在主機上開發qt/eqtopia應用,交叉編譯的方法命令也不一樣,qt/e用:

qmake

make

qtopia應用開發:

qtopiamake

make

make install

最後一個make install,可以直接把你的qtopia應用安裝到編譯出來的嵌入式圖形環境中,使得在Applications窗口下,可以出現你的程序圖標,雙擊運行。注意,這些命令make的時候,都不需要指定交叉編譯起連接器,例如:make CC_FOR_BUILD="arm-linux-gcc" CC="arm-linux-gcc" LD="arm-linux-ld" CPP="arm-linux-g++ -E" AR="arm-linux-ar rc",應爲這個選項已經應編碼到了qmakeqopiamake中,在其生成的Makefile中已經自己設置好了。


下載相關原代碼地址:

ftp://ftp.trolltech.com/qt/source/

qt-x11-opensource-src-4.4.3.tar.gz

qt-embedded-linux-opensource-src-4.4.3.tar.gz

qtopia-opensource-src-4.3.2..tar.gz


  1. -prefix -image -sdk三個路徑理解


在配置qtopia-4.3.2時,理解configure -image /opt/qtopia/target -prefix /opt/qtopia/target -sdk /opt/qtopia/sdk/4.3.2/qq2440三個路徑非常重要。查看源碼doc/下的文檔,-image指定了在交叉編譯的主機上存放將來要nfs掛載或者燒到開發板上去所有文件的目錄,-prefix指定了qtopia編譯出來的qpe在運行目錄,也就是要把-image目錄下的所有東西掛載或者考到開發板上的-prefix目錄才能正常運行,注意,這個-prefix已經硬編碼到了程序中,不可以改變。另一個-SDK目錄,指定了主機上用於開發qtopia應用所必須的工具鏈和庫的一個基準路徑,就是說,指定了這個目錄,運行-SDK下的qmake或者qtopiamake,就不用自己設置系統的環境變量中包含其他的庫了。如果只設置了-prefix目錄,那麼默認的-image也是,-SDK默認的是編譯build的目錄。此build目錄不能爲源碼目錄,應該在其他新建的目錄中運行源碼包中的configure配置腳本。


  1. 交叉編譯器和主機編譯器的問題

嵌入式開發中,要時刻注意編譯器的版本問題,否則一連串莫名其妙的問題會使人崩潰。仔細看看qtopia或者qt/e的文檔,選擇推薦的編譯器版本。ubuntu8.10自帶的GCC4.3.2版本太高,對於代碼的錯誤處理過於嚴格。於是重新安裝qtopia4.3.2推薦的GCC3.4/GCC4.1(uses symbol visibility):

apt-get install g++-4.1

rm /usr/bin/gcc

ln -s /usr/bin/gcc-4.1 /usr/bin/gcc

rm /usr/bin/g++

ln -s /usr/bin/g++-4.1 /usr/bin/g++


注意:如果只把gcc版本換掉,還使用原有的g++,也會出現問題,可以直接安裝g++-4.1,附帶着就安裝了相同版本的gcc.然後把/usr/bin/gccg++的軟連接從原來的gcc4.3.2換到新的上。交叉編譯器,我採用當下流行的arm-linux-gcc-3.41版本,沒有出大問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章