Ubuntu下嵌入式Qt开发环境配置全攻略
本文以友善之臂的Mini6410嵌入式開(kāi)發(fā)板為目標(biāo)板,介紹ubuntu 12.04系統(tǒng)下,配置嵌入式Qt開(kāi)發(fā)工具的過(guò)程。本文中介紹的工具、大部分步驟和腳本來(lái)自開(kāi)發(fā)板附帶資料光盤(pán),但其默認(rèn)配置環(huán)境為老舊的Fedora 9.0,在ubuntu中配置過(guò)程已需要修正。
一、背景
????眾所周知Qt是一個(gè)跨平臺(tái)的開(kāi)發(fā)工具,與本文相關(guān)的分支有3個(gè),分別是Linux下的Qt桌面版(基于X Window),嵌入式桌面環(huán)境Qtopia(Qt Extended)和嵌入式基礎(chǔ)類(lèi)庫(kù)Qt Embedded。
????嵌入式桌面版擁有集成開(kāi)發(fā)工具Qt Creator,方便進(jìn)行Qt程序的設(shè)計(jì),默認(rèn)配置用于開(kāi)發(fā)桌面程序,進(jìn)行交叉編譯設(shè)置(有時(shí)間待后文詳述)后,可以直接編譯嵌入式程序。
????????Qt Embedded也稱(chēng)Qt/E,是運(yùn)行于嵌入式Linux的Qt基礎(chǔ)類(lèi)庫(kù),目前最高版本為4.8(不確定)。它的圖形界面直接工作于Frame Buffer上,繞過(guò)了窗口管理系統(tǒng),具有較高的效率,適于嵌入式環(huán)境。
????????Qtopia是一個(gè)嵌入式桌面環(huán)境,以Qt Embedded(在某些版本中稱(chēng)Qtopia Core)為基礎(chǔ),在后期改名為Qt Extended。它提擁有一個(gè)桌面,并供了手機(jī)/PDA中常用的基本功能軟件(如電話本等等),在4.4.3后官方停止開(kāi)發(fā)(或改由開(kāi)源社區(qū)維護(hù))。
????????不同的開(kāi)發(fā)目標(biāo)應(yīng)當(dāng)選擇不同的開(kāi)發(fā)工具和環(huán)境,如果讀者不開(kāi)發(fā)桌面程序,也不需要Qt Creator(自己寫(xiě)makefile),可以不用安裝桌面版,但裝上對(duì)后續(xù)配置還是有一定方便作用的。
??? 對(duì)嵌入式開(kāi)發(fā)者來(lái)說(shuō),如果僅僅開(kāi)發(fā)單獨(dú)的圖形界面程序,不需要嵌入式桌面的話,只使用Qt/E即可,沒(méi)必要使用過(guò)時(shí)的Qtopia。
????????友善之臂開(kāi)發(fā)板默認(rèn)的Qtopia環(huán)境是2.2,已經(jīng)與4.x的Qt/E庫(kù)不兼容,除了演示自帶程序外,對(duì)開(kāi)發(fā)而言幾乎不堪用。開(kāi)發(fā)板還提供了Qt Extended 4.4.3,但這個(gè)環(huán)境提供的是一個(gè)諾基亞功能機(jī)的界面,基本上也只能供學(xué)習(xí)研究使用了。所以建議讀者,如果不是有直接針對(duì)Qtopia的開(kāi)發(fā)需求,學(xué)習(xí)內(nèi)容以Qt/E為主比較好,嵌入式桌面開(kāi)發(fā),不如交給Android去做。
????????同樣是開(kāi)發(fā)圖形界面程序,Qt與Android兩種工具各有千秋。Android的優(yōu)點(diǎn)是界面比較適合手機(jī)等移動(dòng)終端的操作習(xí)慣,虛擬機(jī)對(duì)底層環(huán)境隔離比較充分,程序開(kāi)發(fā)運(yùn)行不用考慮各種不同的硬件和操作系統(tǒng)版本,不需要麻煩的配置,同時(shí)對(duì)Android原生支持的硬件(比如GPS)開(kāi)發(fā)也比較容易。對(duì)一般應(yīng)用程序開(kāi)發(fā)而言,Android省力省心。但Android體積比較龐大,對(duì)系統(tǒng)要求較高,不少低端開(kāi)發(fā)板跑起來(lái)非常吃力。Qt則正好相反,圖形界面傾向于PC風(fēng)格,與操作系統(tǒng)結(jié)合比較緊密,方便訪問(wèn)和管理眾多設(shè)備,對(duì)系統(tǒng)要求較低。比如讀寫(xiě)串口在Qt中輕而易舉,使用Android開(kāi)發(fā)就要用NDK庫(kù)輔助,配置開(kāi)發(fā)反而相當(dāng)艱深。所以可以說(shuō)Android是面向特殊的嵌入式環(huán)境——手機(jī)的專(zhuān)業(yè)快速開(kāi)發(fā)工具,而Qt則是面向一般(復(fù)雜)嵌入式環(huán)境的通用工具。如果開(kāi)發(fā)中不大與硬件打交道,可能Android更合適,反之不如選擇Qt。
????????附帶說(shuō)一句,現(xiàn)在Qt也有了for Android的版本,不過(guò)筆者以它適用于兩類(lèi)人:一類(lèi)是擁有大把Qt代碼想在Android環(huán)境中用,另一類(lèi)是想用Android但不會(huì)也不想學(xué)Java和Android?API。如果不是上述兩類(lèi),筆者以為就基本上沒(méi)必要研究這種非驢非馬的東西。
二、準(zhǔn)備工作
????注意要在32位Ubuntu系統(tǒng)中進(jìn)行配置,由于版本沖突多如牛毛,不要嘗試64位系統(tǒng)。Qt開(kāi)發(fā)環(huán)境需要不少工具包作為基礎(chǔ),有些可能是系統(tǒng)自帶的,也有些可能是筆者先前配置系統(tǒng)時(shí)順帶安裝的,讀者可以參考推薦閱讀中的系統(tǒng)配置過(guò)程。
????可通過(guò)以下鏈接下載安裝包或源碼包,或從友善之臂提供的資料光盤(pán)中查找(SDK在x86-qte包中,不過(guò)版本為2010.01):
??????????arm-linux-gcc-4.5.1-v6-vfp-20101103.tgz(ARM交叉編譯器)
??????????arm-qte-4.7.0-20101105.tar.gz(ARM上的Qt/E庫(kù))
??????????x86-qte-4.6.1-20100201.tar.gz(PC上運(yùn)行的Qt/E模擬器)
??????????arm-qt-extended-4.4.3-20101105.tgz(ARM上運(yùn)行的Qtopia)
??????????x86-qt-extended-4.4.3-20101003.tgz(PC上運(yùn)行的Qtopia模擬器)
??????????qt-sdk-linux-x86-opensource-2010.05.1.bin(Qt SDK開(kāi)發(fā)環(huán)境)
????????x86版本的Qt用于在PC上仿真運(yùn)行為ARM開(kāi)發(fā)的Qt程序,需要虛擬framebuffer工具qvfb,而這個(gè)工具的源碼正好由SDK提供了。
????????Qt/E移植到開(kāi)發(fā)板上還需要tslib庫(kù)(用于觸摸屏校正),需要使用版本控制工具git下載,如需要應(yīng)先安裝git:
????sudo apt-get install git
????然后將源碼目錄下載至當(dāng)前目錄:
????git clone https://github.com/kergoth/tslib
????為編譯tslib庫(kù),還需要安裝若干工具:
????sudo apt-get install autoconf automake libtool
????若不安裝,編譯時(shí)會(huì)出現(xiàn)錯(cuò)誤:
????????autoreconf: not found
????為編譯Qt還要安裝圖形和視頻開(kāi)發(fā)包:
????sudo apt-get install xorg-dev
????sudo apt-get install libv4l-dev
????安裝后一個(gè)包時(shí),會(huì)報(bào)告依賴關(guān)系錯(cuò)誤,在Ubuntu軟件中心中搜索libv4lconvert0和libv4l-0卸載(先卸哪個(gè)都一樣,兩個(gè)會(huì)被一起卸載)后再運(yùn)行上條命令。不要用apt卸載,它會(huì)要求同時(shí)卸掉幾十個(gè)包。
????若不安裝上述第一個(gè)包,會(huì)出現(xiàn)錯(cuò)誤:
????????X11/extensions/XTest.h:No such file or directory(沒(méi)有那個(gè)文件或目錄)
????不安裝后一個(gè),會(huì)出現(xiàn)錯(cuò)誤:
????????linux/videodev.h: No such file or directory(沒(méi)有那個(gè)文件或目錄)
????安裝libv4l-dev后,還需要將頭文件路徑進(jìn)行配置:
????sudo ln -s /usr/include/libv4l1-videodev.h /usr/include/linux/
????videodev.h
????如果以前做過(guò)編譯內(nèi)核或其他開(kāi)發(fā)配置工作,系統(tǒng)可能已經(jīng)自帶了一套Qt工具集,與本文配置對(duì)象不兼容(很多人就是卡在這里了),應(yīng)當(dāng)刪除:
????sudo rm /usr/bin/qmake
????sudo rm /usr/bin/qmake-qt4
????否則編譯Qtopia時(shí)會(huì)出現(xiàn)錯(cuò)誤:
????????Bootstrap QBuild: .. FAIL
????網(wǎng)上很多介紹刪除Qt Creator可以解決,其實(shí)是錯(cuò)的。
????根據(jù)Qt安裝提示,還應(yīng)該檢查以下包是否安裝:
????????libglib2.0-dev
????????libSM-dev
????????libxrender-dev
????????libfontconfig1-dev
????????libxext-dev
????????libgl-mesa-dev
????????libglu-mesa-dev
????在Ubuntu?12.04中,除第一個(gè)外,其他包應(yīng)該都是最新版,第一個(gè)包因依賴關(guān)系沖突無(wú)法安裝,好在不影響編譯和運(yùn)行。
????注意:在拷貝粘貼命令時(shí),其中某些字符可能被不同的編輯環(huán)境改變,特別是空格和符號(hào),如命令執(zhí)行出錯(cuò),可以考慮在Linux命令行下刪除空格和符號(hào)后手工輸入一次。
三、安裝與編譯
1.?安裝SDK
????進(jìn)入sdk所在目錄,在命令行中運(yùn)行:
????./qt-sdk-linux-x86-opensource-2010.05.1.bin
????然后會(huì)出現(xiàn)圖形界面安裝,按提示下一步即可,程序安裝目錄為:
????/opt/qtsdk-2010.05
2.?安裝arm編譯器
????進(jìn)入編譯器壓縮包所在目錄,執(zhí)行命令:
????tar xvzf arm-linux-gcc-4.5.1-v6-vfp-20101103.tgz -C /
????注意文件名后的-C是參數(shù),再后面的"/"表示解壓目錄。執(zhí)行完之后會(huì)將編譯器安裝在/opt/FriendlyARM/toolschain/4.5.1目錄下。
????安裝后需要將編譯器路徑加入環(huán)境變量中,執(zhí)行命令:
????gedit ~/.bashrc
????在文件最后加入一行:
????export PATH=$PATH:/opt/FriendlyARM/toolschain/4.5.1/bin
3.?編譯tslib
????進(jìn)入tslib目錄,依次執(zhí)行:
????./autogen.sh
????./configure --host=arm-linux --prefix="自定義安裝目錄xxx"
????make
????sudo make install
????????configure命令中--prefix參數(shù)用來(lái)指定tslib的安裝目錄,例如"/home/xxx/lib/tslib",也可以不帶此參數(shù),則安裝到默認(rèn)目錄/usr/local/tslib下,下文以"/xxx"指代tslib安裝目錄,請(qǐng)讀者注意。
4.?編譯x86-qte-4.6.1
????解壓x86-qte-4.6.1壓縮包包,可以使用圖形界面右鍵菜單解壓,也可使用命令:
????gzip -dc x86-qte-4.6.1-20100201.tar.gz | tar -xvf -
????友善之臂在壓縮包中提供了編譯腳本build-all,腳本開(kāi)頭會(huì)將先前的安裝配置目錄刪除,對(duì)初次配置沒(méi)有必要,且腳本中的命令參數(shù)與前面安裝的SDK版本不同,建議進(jìn)入解壓目錄后,將以下幾步保存為腳本執(zhí)行或依次輸入執(zhí)行:?????
cd?/opt/qtsdk-2010.05/qt/tools/qvfb/????/opt/qtsdk-2010.05/qt/bin/qmake?"QT_SOURCE_TREE=/opt/qtsdk-2010.05/qt"
????make
????cd?-?#返回上一個(gè)目錄,即解壓目錄
????tar xfvz qt-everywhere-opensource-src-4.6.1.tar.gz
????cd?qt-everywhere-opensource-src-4.6.1
????echo?yes | ./configure -opensource -embedded x86 -xplatform qws/linux-generic-g++ ?-qt-libtiff -qt-libmng -qvfb
????make?
????sudo make install?
????????x86-qte將被安裝在/usr/local/Trolltech/QtEmbedded-4.6.1-i386目錄下。
5.?編譯arm-qte-4.7.0
????解壓arm-qte-4.7.0壓縮包包,進(jìn)入解壓目錄執(zhí)行:?
????tar xfvz qt-everywhere-opensource-src-4.7.0.tar.gz????cd?qt-everywhere-opensource-src-4.7.0
??? echo?yes | ./configure -opensource -embedded arm -xplatform qws/linux-arm-g++ -no-webkit -qt-libtiff -qt-libmng -qt-mouse-pc -no-mouse-linuxtp -no-neon -qt-mouse-tslib -I/xxx/include -L/xxx/lib
??? make?
??? sudo make install ? ? ??上述命令與友善之臂提供的腳本最大不同在configure命令中,一是參數(shù)順序不同,二是在-qt-mouse-tslib參數(shù)后增加了-I和-L兩項(xiàng)給出tslib頭文件和庫(kù)文件路徑(/xxx是tslib安裝目錄)。這里的編譯過(guò)程非常詭異,筆者至今也未明所以然,只能指出如下幾點(diǎn)供讀者參考:
????如不能正確設(shè)置tslib路徑,將出現(xiàn)如下錯(cuò)誤提示:
????????The tslib functionality test failed!
????????You might need to modify the include and library search paths by editing
????????QMAKE_INCDIR and QMAKE_LIBDIR in
????????/源碼包解壓目錄/qt-everywhere-opensource-src-4.7.2/mkspecs/qws/linux-arm-g++.
????正常解決辦法是進(jìn)入錯(cuò)誤提示中的路徑,編輯文件qmake.conf加入兩行:
????QMAKE_INCDIR = /xxx/include
????QMAKE_LIBDIR = /xxx/lib
????但詭異錯(cuò)誤既出,正常辦法多半是無(wú)效的,編輯文件后錯(cuò)誤依舊。也有人建議改上述文件中的編譯器名,但據(jù)筆者分析這種方法無(wú)道理(篇幅有限不贅),事實(shí)也未成功。直接在-qt-mouse-tslib參數(shù)后增加-I和-L兩項(xiàng)也嘗試了,同樣無(wú)效。
????最后在偶然中改變了友善之臂腳本中configure命令參數(shù)的順序,,改成本文這個(gè)樣子,然后刪除又輸入了幾個(gè)空格,編譯就奇跡般的通過(guò)了。后來(lái)再試,拷貝的命令都不能成功,建議讀者也改改空格碰碰運(yùn)氣。
????????arm-qte將被安裝在/usr/local/Trolltech/QtEmbedded-4.7.0-arm目錄下。
6.?編譯x86-qtopia-4.4.3
????解壓x86-qt-extended-4.4.3壓縮包,進(jìn)入解壓目錄,首先執(zhí)行命令:
????tar xzf qt-extended-opensource-src-4.4.3.tar.gz
????將源碼解壓,在源碼目錄中找到文件:
????qt-extended-4.4.3/src/libraries/qtopia/qphoneprofile.cpp
????將其1026行改為:
????QPhoneProfile::Schedule &QPhoneProfile::Schedule::operator=(const Schedule &other)
????然后將下列命令保存為腳本執(zhí)行:
mkdir /opt/QtEmbedded-4.4.3-i386??? export?QTOPIA_DEPOT_PATH=$PWD/qt-extended-4.4.3
??? export?QPEDIR=/opt/QtEmbedded-4.4.3-i386/
??? export?LC_ALL="zh_CN"
??? export?LC_TIME="zh_CN"
??? export?LC_MONETARY="zh_CN"
??? export?LC_ADDRESS="zh_CN"
??? export?LC_TELEPHONE="zh_CN"
??? export?LC_NAME="zh_CN"
??? export?LC_MEASUREMENT="zh_CN"
??? export?LC_IDENTIFICATION="zh_CN"
??? export?LC_NUMERIC="zh_CN"
??? export?LC_PAPER="zh_CN"
??? export?LC_CTYPE="zh_CN"
??? export?LANG="zh_CN"
??? export?LANGUAGE="zh_CN"
??? cd?$QPEDIR
??? echo?yes |?$QTOPIA_DEPOT_PATH/configure -ui-type mobile -release -clean -sound-system oss -build-qt -no-sxe -no-ssl -no-v4l2 -no-vpn -no-phonon -no-libamr -dynamic-rotation -mediaengines cruxus -remove-mediaengine gstreamer,helix -pictureflow -remove-module bluetooth,drm -no-dbus -no-dbusipc -add-displaysize 240x320 -extra-qt-embedded-config?"-qt-freetype -no-webkit -no-dbus -qt-gfx-transformed -qt-gfx-linuxfb"?-extra-qt-config?"-no-webkit"?2>&1 | tee ./qtopiaconfig.log
??? bin/qbuild 2>&1 | tee ./qtopiamake.log
??? bin/qbuild image
????對(duì)友善之臂自帶腳本的修改主要有:
????①?按網(wǎng)文說(shuō)法更改了語(yǔ)言設(shè)置,不過(guò)似無(wú)必要(未詳細(xì)考證),編譯輸出的提示中會(huì)有亂碼,好在不影響結(jié)果。
????②?將-sound-system參數(shù)值由alsa改為oss,否則會(huì)爆出alsa disabled錯(cuò)誤。
????③?更改了編譯輸出目錄為/opt/QtEmbedded-4.4.3-i386,方便以后使用。
????????2>&1 | tee ./qtopia???.log語(yǔ)句作用是將編譯過(guò)程中的輸出信息同時(shí)輸出到屏幕和log?文件中。
????編譯成功后,還要從/opt/qtsdk-2010.05/qt/bin目錄下拷貝qvfb文件到/opt/QtEmbedded-4.4.3-i386/sdk/qtopiacore/host/bin目錄下。
7.?編譯arm-qtopia-4.4.3
????????x86-qtopia-4.4.3的編譯安裝比較簡(jiǎn)單,友善之臂提供的編譯安裝腳本基本是可用的,筆者只是改了開(kāi)頭幾個(gè)命令:
????#!/bin/bash??? mkdir /opt/QtEmbedded-4.4.3-arm/
??? export?QTOPIA_DEPOT_PATH=$PWD/qt-extended-4.4.3
??? export?QPEDIR=/opt/QtEmbedded-4.4.3-arm/
??? export?PATH=/opt/FriendlyARM/mini6410/linux/arm-gcc-4.4.1/bin/:$PATH
??? export?LC_CTYPE="en_US"
????從最后一行起,再往后與友善之臂原版的build-all腳本就完全一樣了,修改目的還是將編譯好的程序放在/opt/QtEmbedded-4.4.3-arm/目錄下,方便以后使用。
四、測(cè)試編譯結(jié)果
????啟動(dòng)/opt/qtsdk-2010.05/qt/bin目錄下的qfvb程序,然后進(jìn)入/usr/local/Trolltech/QtEmbedded-4.6.1-i386/demos目錄,任選一個(gè)子目錄下的可執(zhí)行文件,加-qws參數(shù)在命令行下執(zhí)行,如執(zhí)行成功則說(shuō)明x86-qte編譯成功。
????要測(cè)試x86-qtopia,進(jìn)入/opt/QtEmbedded-4.4.3-i386目錄,執(zhí)行:
????./bin/runqtopia
????將顯示出一個(gè)諾基亞手機(jī)界面。?
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專(zhuān)家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的Ubuntu下嵌入式Qt开发环境配置全攻略的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Linux下Minigui开发环境的搭建
- 下一篇: 基于ARM的Qt Creator嵌入式开