適用于樹(shù)莓派Raspberry Pi的嵌入式QT平臺(tái)(一) -- 交叉編譯安裝Qt Embedded 5.5
在樹(shù)莓派上設(shè)計(jì)桌面應(yīng)用一般情況會(huì)依賴于X11環(huán)境,如果是Windows平臺(tái),就目前而言,我們也可以選擇Windows 10 IoT環(huán)境進(jìn)行開(kāi)發(fā)。UWP目前也支持在樹(shù)莓派2上進(jìn)行部署。至于常見(jiàn)的Linux X11或者Wayland環(huán)境,相比之下比較冗余,但是QT Emebedded直接利用Framebuffer,顯示GUI,會(huì)更加輕便。利用樹(shù)莓派 Open GL支持,更可以開(kāi)發(fā)出3D效果,是工業(yè)領(lǐng)域開(kāi)發(fā)設(shè)計(jì)可視化設(shè)備的不錯(cuò)選擇,更是物聯(lián)網(wǎng)設(shè)備一個(gè)比較好的交互方案。
1. 準(zhǔn)備工具
我們要在Windows上對(duì)QT 5.5進(jìn)行交叉編譯,所以我們需要準(zhǔn)備以下工具:
- 樹(shù)莓派 1代或者2代,官方的Rasbian系統(tǒng)(基于Debian),目前最新版本基于Debian 8 Jessie,我們可以從官方站點(diǎn)下載最新版本 https://downloads.raspberrypi.org/raspbian_latest
- 下載交叉編譯工具集 cross-toolchain (http://gnutoolchains.com/raspberry/) 。如果你是基于Jessie的Rasbian,選擇 raspberry-gcc-4.9.2-r2.exe。 如果是Wheezy,你需要選擇 raspberry-gcc4.6.3.exe。安裝toolchain.

- 下載MinGW toolchain (http://gnutoolchains.com/mingw32)并安裝,我們需要在Windows中編譯QMake

- 下載安裝Python 2.7 for Windows (https://www.python.org/ftp/python/2.7.11/python-2.7.11.msi) 并且確保Python執(zhí)行路徑寫(xiě)入了系統(tǒng)環(huán)境變量PATH
- 下載QT 5.5 源代碼,http://download.qt.io/archive/qt/5.5/5.5.0/single/
2. 安裝Rasbian
大家可以參考這個(gè)鏈接 https://www.raspberrypi.org/documentation/installation/installing-images/windows.md 來(lái)安裝Rasbian,不過(guò)簡(jiǎn)單來(lái)講,在Windows下安裝Rasbian只需要用WinfFlashTool 或者 Win32DiskImager 將系統(tǒng)鏡像刷入一張不小于8GB的SD
- WinFLASHTool: http://winflashtool.sysprogs.com/
- Win32DiskImager: https://sourceforge.net/projects/win32diskimager/

將SD插入樹(shù)莓派,接上電源和HDMI,啟動(dòng)系統(tǒng),默認(rèn)用戶pi,密碼raspberry登入系統(tǒng) (建議打開(kāi)Raspi-config配置系統(tǒng)默認(rèn)進(jìn)入CLI,修改管理員密碼,配置GPU內(nèi)存128MB,然后重啟)。
運(yùn)行命令進(jìn)行系統(tǒng)更新。
sudo apt-get update
sudo apt-get upgrade
建議:先預(yù)先安裝下面庫(kù),交叉編譯Qt,xcb依賴這些庫(kù),默認(rèn)Raspbian中可能不帶
sudo apt-get install libxcb1 libxcb1-dev libx11-xcb1 libx11-xcb-dev libxcb-keysyms1 libxcb-keysyms1-dev libxcb-image0 libxcb-image0-dev libxcb-shm0 libxcb-shm0-dev libxcb-icccm4 libxcb-icccm4-dev libxcb-sync1 libxcb-sync-dev libxcb-render-util0 libxcb-render-util0-dev libxcb-xfixes0-dev libxrender-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-glx0-dev
你可能會(huì)碰到某些庫(kù)無(wú)法下載,你可以手動(dòng)下載然后通過(guò) dpkg -i 來(lái)安裝。
3. 同步Linux環(huán)境
在Windows中交叉編譯Qt,需要先同步樹(shù)莓派Linux 庫(kù)、頭文件到sysroot下。在<sysgcc>\Raspberry\TOOLS中打開(kāi) UpdateSysroot.bat (<sysgcc>為toochain的安裝目錄,例如C:\SysGCC)

在Targeted Linux machine輸入選擇你的樹(shù)莓派,如上圖輸入你需要同步的目錄,建議同步/opt目錄 (在輸入框里按 Ctl+Enter換行,直接按Enter默認(rèn)為開(kāi)始同步,請(qǐng)注意),里面包含了OpenGL的頭文件,我們?cè)诰幾gQt需要引用。 注意,千萬(wàn)不要同步/etc目錄,因?yàn)樗麜?huì)復(fù)寫(xiě)本地的/etc/ld.so.conf文件,會(huì)破化Windows下編譯時(shí)的頭文件引用。如果不小心同步了,我們需要重新安裝 aspberry-gcc4.6.3.exe 來(lái)提取恢復(fù)此文件。
4. 配置編譯qmake
我們需要先解壓縮下載下來(lái)的qt源碼包,比如解壓縮在C:\qt-everywhere-opensource-src-5.5.0 (可以用7-zip來(lái)解壓縮)。或者打開(kāi)MinGW32下的msys (<sysgcc>\MinGW32\msys\1.0\msys.bat) 進(jìn)入你的qt代碼下載目錄(例如 C:\download)

然后確認(rèn)代碼全部解壓縮到當(dāng)前目錄下,確認(rèn)gcc和arm-linux-gnueabihf-gcc工具的路徑

如果沒(méi)有找到gcc和arm-linux-gnueabihf-gcc,你可以設(shè)置你的Windows系統(tǒng)PATH環(huán)境變量,加入 c:\SysGCC\Raspberry\bin和c:\SysGCC\MinGW32\bin

打開(kāi) qt-everywhere-opensource-src-5.5.0\qtbase\mkspecs\linux-arm-gnueabi-g++下的qmake.conf文件,將所有的arm-linux-gnueabi-替換成arm-linux-gnueabihf-,如下圖:

好了,現(xiàn)在我們可以開(kāi)始編譯Qt。由于Qmake編譯腳本的一個(gè)bug,我們無(wú)法直接交叉編譯Raspberry版本,需要分為兩步,先編譯Windows Qmake然后再交叉編譯Raspberry Qt。
打開(kāi) qt-everywhere-opensource-src-5.5.0\qtbase\mkspecs\win32-g++ 下的qmake.conf文件,在 CXXFLAGS 后面添加 -U__STRICT_ANSI__ 標(biāo)記

輸入下面的命令開(kāi)始編譯Qmake for Windows
cd /c/download
mkdir qt-build
cd qt-build
../qt-everywhere-opensource-src-5.5.0/configure -platform win32-g++ -xplatform linux-arm-gnueabi-g++ -release -opengl es2 -device linux-rasp-pi2-g++ -sysroot C:/SysGCC/Raspberry/arm-linux-gnueabihf/sysroot -prefix /usr/local/qt5

選擇 'o' Open Source和yes同意GPLV2&3許可證
-opengl es2參數(shù):配置Qt直接使用Raspberry framebuffer 而不是X11
全部配置完成后,你可以用命令 qtbase/bin/qmake -v 檢查下qmake是否配置成功

5. 交叉編譯Qt for Raspberry
現(xiàn)在我們打開(kāi) C:\download\qt-everywhere-opensource-src-5.5.0\qtbase\configure 文件,找到3900行左右 "Creating qmake...",修改為:
if [ '!' -f "$outpath/bin/qmake.exe" ]; then
注意qmake.exe后面的.exe擴(kuò)展名和最后的then。使用已經(jīng)編譯好的Windows qmake而不用再去生成qmake

好了,到此我們做好了所有的準(zhǔn)備工作,就要開(kāi)始編譯Qt for Raspberry Pi了。在這之前,建議大家再次確認(rèn)下是否有遺漏或者錯(cuò)誤,不然一次編譯就需要十幾個(gè)小時(shí),中斷后再來(lái)很費(fèi)時(shí)間。
回到msys窗口,進(jìn)入qt-build目錄,輸入下面的命令開(kāi)始配置:
../qt-everywhere-opensource-src-5.5.0/configure -platform win32-g++ -xplatform linux-arm-gnueabi-g++ -release -opengl es2 -device linux-rasp-pi2-g++ -sysroot C:/SysGCC/Raspberry/arm-linux-gnueabihf/sysroot -prefix /usr/local/qt5 -device-option CROSS_COMPILE=C:/SysGCC/Raspberry/bin/arm-linux-gnueabihf- -qt-xcb

同樣輸入 "o" 和 "yes" 使用開(kāi)源版本和同意許可證內(nèi)容。
可以忽略出現(xiàn)的警告。但如果出現(xiàn)缺少庫(kù)依賴的錯(cuò)誤,請(qǐng)回到第3步,同步Linux環(huán)境,檢查是否已經(jīng)同步了必要的目錄。檢查是否在Raspbian中遺漏了必須的庫(kù)。可以按照輸出提示,去檢查Qt環(huán)境的依賴庫(kù),并且在Raspbian中手動(dòng)安裝,然后再進(jìn)行一次同步。
你也可以檢查 <sysgcc>\Raspberry\arm-linux-gnueabihf\sysroot\etc\ld.so.conf文件,是否包含了下面配置
/opt/vc/lib
/lib/arm-linux-gnueabihf
/usr/lib/arm-linux-gnueabihf
/usr/lib/arm-linux-gnueabihf/libfakeroot
/usr/local/lib
如果你看到了下面的內(nèi)容,那么你就可以輸入 make && make install 開(kāi)始編譯安裝。不出意外,整個(gè)過(guò)程打開(kāi)需要15小時(shí)左右,具體視機(jī)器性能,反正我花了20小時(shí)完成所有編譯安裝。默認(rèn)會(huì)安裝到 <sysgcc>\Raspberry\arm-linux-gnueabihf\sysroot\usr\local\qt5 目錄。

6. 同步Qt到Raspbian并測(cè)試
等待一天后,編譯安裝完成,我們就可以將安裝在本地PC上的Qt復(fù)制到Raspberry中。不建議使用SFTP工具進(jìn)行上傳,因?yàn)镾FTP上傳無(wú)法將文件屬性復(fù)制過(guò)去。這里建議使用 toolchain 中自帶的SmarTYY來(lái)完成上傳。打開(kāi) <sysgcc>\Raspberry\TOOLS\PortableSmartty下的 SmarTTY.exe 工具,配置連接到你的樹(shù)莓派。
cd/usr/local
sudomkdirqt5sudo chown pi qt5
創(chuàng)建Qt 5的安裝目錄,然后打開(kāi)SmarTYY菜單,選擇上傳目錄。

配置本地目錄為 <sysgcc>\Raspberry\arm-linux-gnueabihf\sysroot\usr\local\qt5, 遠(yuǎn)程目錄為 /usr/local/qt5,開(kāi)始上傳

完成后,我們就可以在SSH中進(jìn)行測(cè)試,進(jìn)入 /usr/local/qt5/examples/widgets/richtext/textedit 運(yùn)行例子 ./textedit。這時(shí)如果你的樹(shù)莓派連接著顯示器,你就會(huì)看到一個(gè)文本編輯器顯示出來(lái),接上鼠標(biāo)鍵盤(pán),你就可以進(jìn)行圖形化界面操作了。
SSH端:

樹(shù)莓派連接的顯示器:
下一篇:適用于樹(shù)莓派Raspberry Pi的嵌入式QT平臺(tái)(二) -- 在Windows下用Qt Creator開(kāi)發(fā)編譯Raspberry Qt 5應(yīng)用程序
大部分內(nèi)容參考自:http://visualgdb.com/tutorials/raspberry/qt/embedded/

浙公網(wǎng)安備 33010602011771號(hào)