這里主要是記錄了自己在搭建嵌入式開發環境時閱讀的一些有價值的參考文檔,文檔主要來自於網絡,由於是從文庫中下載,所以也不知道 文檔的出在哪?因為個人覺得總結的比較好,我暫且拿過來記錄下,當然在此基礎上也會加上我自己的理解!這篇文章主要是以問答的形式來組織。
QT嵌入式開發環境是本文所要介紹的內容,我們先看看Qt的各個版本簡介:
1.什么是QT
Qt是一個完整的C++應用程序開發框架。它包含一個類庫,和用於跨平台開發及國際化的工具。Qt API在所有支持的平台上都是相同的,Qt工具在這些平台上的使用方式也一致, 因而Qt應用的開發和部署與平台無關。
2.什么是Qtopia
Qtopia 是一個面向嵌入式Linux的全方位應用程序開發平台,同時也是用於基於Linux的PDA(個人數字助理),智能電話(Smartphone)以及其他移動設備的用戶界面。簡單地說,Qtopia實質上是一組關於PDA和智能電話的應用程序結合,如果需要開發這類產品可以在這組程序的基礎上迅速構建出 PDA或者智能電話。Qtopia實質上依賴Qt/Embedded。
3.什么是Qt/Embedded
Qt/Embedded 是一個完整的自包含GUI和基於Linux的嵌入式平台開發工具。這個開發工具的名字好像最容易混淆,當然Qt/Embedded是最熟悉的名字,好像 Qtopia Core說的也是它。最近,奇趣公司又改名字了,它的新名字叫做qt-embedded-linux-xxxx,看來這個Qt/Embedded的馬甲還很多哈。
下面就是搭建Qt開發平台了,我的平台是Fedora 15,需要的Qt版本有兩個:
qt-x11-opensource-src-4.3.2.tar.gz qt-embedded-linux-opensource-src-4.4.0-rc1.tar.bz2
qt-x11版本可以產生Qt開發工具,如designer等等,最重要的是可以得到qvfb,嵌入式的開發有了qvfb,就可以不需要實際的開發板,也可以開發Qt應程序。qt-embedded版本就是專門用於嵌入式方面的版本。下面是安裝步驟:
1.解壓這兩個qt包
tar –jxvf qt-x11-opensource-src-4.3.2.tar.gz tar –jxvf qt-embedded-linux-opensource-src-4.4.0-rc1.tar.bz2 cp qt-embedded-linux-opensource-src-4.4.0-rc1 qt-embedded-linux-opensource-src-4.4.0-rc1-x86 mv qt-embedded-linux-opensource-src-4.4.0-rc1 qt-embedded-linux-opensource-src-4.4.0-rc1-arm
這里,qt-embedded有兩個復制:qt-embedded-linux-opensource-src-4.4.0-rc1-x86 和qt-embedded-linux-opensource-src-4.4.0-rc1-arm,根據他們的名字可以知道前者是適合x架構的,后者適合arm架構為什么需要兩個呢?如果有開發板的話,可以只編譯qt-embedded版本成arm架構的就可以了,但是很多時候用qvfb的話,開發會方便很多,所以多編譯一個x86架構的也不錯。
這里是否有些疑問,qt-x11也是適合x86結構的,這不是和qt-embedded重復了嗎?答案是這樣的,qt-embedded版本只能在嵌入式板子上面運行,編譯成x86架構的程序也只能在x86的嵌入式板子上跑。前面說過,我們需要qvfb來開發,但是qvfb只能執行x86架構的應用程序,所以需要讓qt-embedded生成關於x86的庫和其他文件。
而將qt-embedded編譯成arm,又是為什么呢?道理很簡單,我最終的qt應用程序需要在arm架構上面運行,當然需要這方面的庫,所以編譯成arm也就順理成章了。好了,現在簡單的總結一下,首先,使用qt-x11提供的庫和開發工具開發出qt應用程序,然后使用qt-embedded關於x86庫和工具再次編譯我們開發qt應用程序,這是所得到的可執行文件就可以在qvfb上運行了,最后,使用qt-embeddedd的arm庫再次編譯就可以得到在arm上能運行的可執行程序。
很明顯,如果有開發板,第二步是可要可不要的(最好是要),如果沒有開發板的話,第三步也就沒必要了,這樣就不需要將qt-embedded編譯成適合arm 架構的。
具體步驟與說明:
1. 下載源碼包
qt-x11-opensource-src-4.5.0.tar.bz2 qt-embedded-linux-opensource-src-4.5.0.tar.bz2
下載地址:ftp://ftp.qtsoftware.com/qt/source/
2.編譯及安裝qt-x11-opensource-src-4.5.0
qt-x11版本可以產生Qt開發工具,如designer等等,最重要的是可以得到qvfb,嵌入式的開發有了qvfb,就可以不需要實際的開發板,也可以開發Qt應程序。qt-embedded版本就是專門用於嵌入式方面的版本。
tar xjvf qt-x11-opensource-src-4.5.0.tar.bz2 cd qt-x11-opensource-src-4.5.0 ./configure make make install
歷經漫長的編譯過程,約一個半小時,默認安裝在/usr/local/Trolltech/Qt-4.5.0下.編譯完成后源程序不要刪除,還有用
3.編譯及安裝qt-embedded-linux-opensource-src-4.5.0
在用戶目錄下建立一個src目錄,用於存放編譯源文件qt-embedded-linux-opensource-src- 4.5.0.tar.bz2。將其解壓得到qt-embedded-linux-opensource-src-4.5.0,重命名為qt- embedded-linux-opensource-src-4.5.0-x86. 再次解壓qt-embedded-linux-opensource-src-4.5.0.tar.bz2,並重命令為qt-embedded- linux-opensource-src-4.5.0-arm.為什么有兩個復制呢?我們可以從他們的名字上就不難看出前者是適合x架構的,后者適合 arm架構的,如果有開發板的話,可以只編譯qt-embedded版本成arm架構的就可以了,但是很多時候用qvfb的話,開發會方便很多,所以多編譯一個x86架構的也不錯.
mkdir ~/src mv qt-embedded-linux-opensource-src-4.5.0.tar.bz2 ~/src tar xjvf qt-embedded-linux-opensource-src-4.5.0.tar.bz2 mv qt-embedded-linux-opensource-src-4.5.0 qt-embedded-linux-opensource-src-4.5.0-x86 tar xjvf qt-embedded-linux-opensource-src-4.5.0.tar.bz2 mv qt-embedded-linux-opensource-src-4.5.0 qt-embedded-linux-opensource-src-4.5.0-arm cd qt-embedded-linux-opensource-src-4.5.0-x86 ./configure -prefix /usr/local/Trolltech/QtEmbedded-4.5.0-x86 -embedded x86 -qvfb make make install
OK! qt-embedded-x86被安裝在/usr/local/Trolltech/QtEmbedded-4.5.0-x86下!!!!
cd qt-embedded-linux-opensource-src-4.5.0-arm ./configure -prefix /usr/local/Trolltech/QtEmbedded-4.5.0-arm -embedded arm make make install
OK!qt-embedded-arm被安裝在/usr/local/Trolltech/QtEmbedded-4.5.0-arm下!!!
4.至此我們已經安裝好了qt-x11版,即在PC機上運行的QT,qt-embedded-x86版(x86體系的嵌入式板子上運行的QT)和qt-embedded-arm(arm板子上運行的QT).下一步:設置環境變量
4.1 qt-x11:
vi setenv.sh
添加如下內容:
PATH=/usr/local/Trolltech/Qt-4.5.0/bin:$PATH LD_LIBRARY_PATH=/usr/local/Trolltech/Qt-4.5.0/lib:$LD_LIBRARY_PATH
保存退出.移到/usr/local/Trolltech/Qt-4.5.0中
4.2 qt-embedded-x86:
vi setenv.sh
添加如下內容:
QTEDIR=/usr/local/Trolltech/QtEmbedded-4.5.0-x86 PATH=/usr/local/Trolltech/QtEmbedded-4.5.0-x86/bin:$PATH LD_LIBRARY_PATH=/usr/local/Trolltech/QtEmbedded-4.5.0-x86/lib:$LD_LIBRARY_PATH
保存退出.移到/usr/local/Trolltech/QtEmbedded-4.5.0-x86中
4.3 qt-embedded-arm:
vi setenv.sh
添加如下內容:
QTEDIR=/usr/local/Trolltech/QtEmbedded-4.5.0-arm PATH=/usr/local/Trolltech/QtEmbedded-4.5.0-arm/bin:$PATH LD_LIBRARY_PATH=/usr/local/Trolltech/QtEmbedded-4.5.0-arm/lib:$LD_LIBRARY_PATH
保存退出.移到/usr/local/Trolltech/QtEmbedded-4.5.0-arm中
我們在運行的時候分別運行對應的腳本即可,比如我們要用qt-x11:
cd /usr/local/Trolltech/Qt-4.5.0 source setenv.sh
然后就可以用qmake designer等工具了
5.做到這一步還有qvfb沒有編譯,到qt-x11-opensource-src-4.5.0中重新編譯qvfb即可
cd qt-x11-opensource-src-4.5.0 cd /tools/qvfb
make --會在qt-x11-opensource-src-4.5.0/bin下生成qvfb,我們將它copy至/usr/local/Trolltech/QtEmbedded-4.5.0-x86/bin下
cp ../..bin/qvfb /usr/local/Trolltech/QtEmbedded-4.5.0-x86/bin
6.做一個測試
cd /usr/local/Trolltech/QtEmbedded-4.5.0-x86 source setenv.sh cd /usr/local/Trolltech/QtEmbedded-4.5.0-x86/demos/books qvfb -width 640 -height 480 & ./books -qws
出錯信息一般為
Error opening buffer device /dev/fb0QScreenLinuxFb::connect: No such file or directory
這種情況發生最多的是編譯Qt-Embedded的x86版本,希望在qvfb上運行應用時
使用者在
第一步運行qvfb后
第二步運行./myapp -qws
出現以上的提示錯誤
原因是Qt-Embedded在查找系統的顯示設備時,默認去尋找LinuxFb,也即Linux的/dev/fb0設備,但是如果Qt- Embedded安裝了其它顯示設備,比如qvfb,則可以在qvfb上顯示,但是需要一個插件(或者說驅動,可能會和設備驅動混淆),使Qt- Embedded能使用qvfb。 為了作到這一點,需要在編譯Qt-Embedded時的configure命令加上如下選項
./configure -plugin-gfx-qvfb -plugin-kbd-qvfb -plugin-mouse-qvfb 或./configure -qt-gfx-qvfb -qt-kbd-qvfb -qt-mouse-qvfb
如果,你不想重新編譯Qt-Embedded,也可以單獨編譯qvfb的gfxdrivers,命令如下:
cd qt-embedded-linux-opensource-src-4.5.1/src/plugins/gfxdrivers/qvfb/$/usr/local/Trolltech/QtEmbedded-4.5.1/bin/qmake$ sudo make install
對應所在的路徑,在大家的機器上可能不盡相同,領會意思就行
小結:關於QT嵌入式開發環境搭建的內容介紹完了,希望本文對你有所幫助!