树莓派Raspberry Pi的嵌入式QT平台
在樹莓派上設(shè)計(jì)桌面應(yīng)用一般情況會(huì)依賴于X11環(huán)境,如果是Windows平臺(tái),就目前而言,我們也可以選擇Windows 10 IoT環(huán)境進(jìn)行開發(fā)。UWP目前也支持在樹莓派2上進(jìn)行部署。至于常見的Linux X11或者Wayland環(huán)境,相比之下比較冗余,但是QT Emebedded直接利用Framebuffer,顯示GUI,會(huì)更加輕便。利用樹莓派 Open GL支持,更可以開發(fā)出3D效果,是工業(yè)領(lǐng)域開發(fā)設(shè)計(jì)可視化設(shè)備的不錯(cuò)選擇,更是物聯(lián)網(wǎng)設(shè)備一個(gè)比較好的交互方案。
1. 準(zhǔn)備工具
?
我們要在Windows上對(duì)QT 5.5進(jìn)行交叉編譯,所以我們需要準(zhǔn)備以下工具:
- 樹莓派 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í)行路徑寫入了系統(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?來安裝Rasbian,不過簡(jiǎn)單來講,在Windows下安裝Rasbian只需要用WinfFlashTool 或者?Win32DiskImager 將系統(tǒng)鏡像刷入一張不小于8GB的SD
- WinFLASHTool:?http://winflashtool.sysprogs.com/
- Win32DiskImager:?https://sourceforge.net/projects/win32diskimager/
將SD插入樹莓派,接上電源和HDMI,啟動(dòng)系統(tǒng),默認(rèn)用戶pi,密碼raspberry登入系統(tǒng) (建議打開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ù)先安裝下面庫,交叉編譯Qt,xcb依賴這些庫,默認(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ì)碰到某些庫無法下載,你可以手動(dòng)下載然后通過 dpkg -i 來安裝。
3. 同步Linux環(huán)境
在Windows中交叉編譯Qt,需要先同步樹莓派Linux 庫、頭文件到sysroot下。在<sysgcc>\Raspberry\TOOLS中打開?UpdateSysroot.bat??(<sysgcc>為toochain的安裝目錄,例如C:\SysGCC)
在Targeted Linux machine輸入選擇你的樹莓派,如上圖輸入你需要同步的目錄,建議同步/opt目錄?(在輸入框里按 Ctl+Enter換行,直接按Enter默認(rèn)為開始同步,請(qǐng)注意),里面包含了OpenGL的頭文件,我們?cè)诰幾gQt需要引用。?注意,千萬不要同步/etc目錄,因?yàn)樗麜?huì)復(fù)寫本地的/etc/ld.so.conf文件,會(huì)破化Windows下編譯時(shí)的頭文件引用。如果不小心同步了,我們需要重新安裝 ?aspberry-gcc4.6.3.exe?來提取恢復(fù)此文件。
?
4. 配置編譯qmake
我們需要先解壓縮下載下來的qt源碼包,比如解壓縮在C:\qt-everywhere-opensource-src-5.5.0 (可以用7-zip來解壓縮)。或者打開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工具的路徑
如果沒有找到gcc和arm-linux-gnueabihf-gcc,你可以設(shè)置你的Windows系統(tǒng)PATH環(huán)境變量,加入 c:\SysGCC\Raspberry\bin和c:\SysGCC\MinGW32\bin
打開?qt-everywhere-opensource-src-5.5.0\qtbase\mkspecs\linux-arm-gnueabi-g++下的qmake.conf文件,將所有的arm-linux-gnueabi-替換成arm-linux-gnueabihf-,如下圖:
?
好了,現(xiàn)在我們可以開始編譯Qt。由于Qmake編譯腳本的一個(gè)bug,我們無法直接交叉編譯Raspberry版本,需要分為兩步,先編譯Windows Qmake然后再交叉編譯Raspberry Qt。
打開?qt-everywhere-opensource-src-5.5.0\qtbase\mkspecs\win32-g++?下的qmake.conf文件,在 CXXFLAGS 后面添加?-U__STRICT_ANSI__?標(biāo)記
輸入下面的命令開始編譯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)在我們打開?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)備工作,就要開始編譯Qt for Raspberry Pi了。在這之前,建議大家再次確認(rèn)下是否有遺漏或者錯(cuò)誤,不然一次編譯就需要十幾個(gè)小時(shí),中斷后再來很費(fèi)時(shí)間。
回到msys窗口,進(jìn)入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?-device-option CROSS_COMPILE=C:/SysGCC/Raspberry/bin/arm-linux-gnueabihf- -qt-xcb
同樣輸入 "o" 和 "yes" 使用開源版本和同意許可證內(nèi)容。
可以忽略出現(xiàn)的警告。但如果出現(xiàn)缺少庫依賴的錯(cuò)誤,請(qǐng)回到第3步,同步Linux環(huán)境,檢查是否已經(jīng)同步了必要的目錄。檢查是否在Raspbian中遺漏了必須的庫。可以按照輸出提示,去檢查Qt環(huán)境的依賴庫,并且在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 開始編譯安裝。不出意外,整個(gè)過程打開需要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上傳無法將文件屬性復(fù)制過去。這里建議使用 toolchain 中自帶的SmarTYY來完成上傳。打開 <sysgcc>\Raspberry\TOOLS\PortableSmartty下的?SmarTTY.exe 工具,配置連接到你的樹莓派。
cd/usr/local
sudomkdirqt5 sudo chown pi qt5創(chuàng)建Qt 5的安裝目錄,然后打開SmarTYY菜單,選擇上傳目錄。
配置本地目錄為 <sysgcc>\Raspberry\arm-linux-gnueabihf\sysroot\usr\local\qt5, 遠(yuǎn)程目錄為 /usr/local/qt5,開始上傳
完成后,我們就可以在SSH中進(jìn)行測(cè)試,進(jìn)入 /usr/local/qt5/examples/widgets/richtext/textedit 運(yùn)行例子 ./textedit。這時(shí)如果你的樹莓派連接著顯示器,你就會(huì)看到一個(gè)文本編輯器顯示出來,接上鼠標(biāo)鍵盤,你就可以進(jìn)行圖形化界面操作了。
SSH端:
樹莓派連接的顯示器:
?
?
下一篇:適用于樹莓派Raspberry Pi的嵌入式QT平臺(tái)(二) -- 在Windows下用Qt Creator開發(fā)編譯Raspberry Qt 5應(yīng)用程序
大部分內(nèi)容參考自:http://visualgdb.com/tutorials/raspberry/qt/embedded/
接著上篇 "交叉編譯安裝Qt Embedded 5.5",我們已經(jīng)成功在Windows上交叉編譯了Raspberry Pi的嵌入式Qt 5.5。那么我們就可以開始開發(fā)基于Qt 5的應(yīng)用程序。接下來,我們需要在Windows上搭建必要的Qt開發(fā)工具,首當(dāng)其沖就是官方的Qt Creator,不僅提供了原生的C++編輯器,Qt界面設(shè)計(jì)器,而且還可以集成現(xiàn)有的 Qmake, gcc 甚至于Visual Studio C++編譯器來配置編譯Qt項(xiàng)目,自帶的QML解釋器可以快速的將QML內(nèi)容翻譯成代碼并集成子啊項(xiàng)目中;而且利用自帶的GDB可以進(jìn)行代碼運(yùn)行時(shí)調(diào)試。
下面,我們就利用Windows平臺(tái)上的Qt Creator與我們已經(jīng)準(zhǔn)備好的樹莓派中的 Qt 5.5 來集成開發(fā)基于Raspberry Pi的Qt Embedded應(yīng)用程序。過程中,我們需要交叉編譯Raspberry Pi版的GDB用于遠(yuǎn)程調(diào)試。
?
1. 準(zhǔn)備工作
- Qt Creator for Windows:http://download.qt.io/official_releases/qtcreator/3.6/3.6.0/qt-creator-opensource-windows-x86-3.6.0.exe
- 或者我們也可以下載安裝?Qt 5.5.1 for Windows 32-bit (MinGW 4.9.2):http://download.qt.io/official_releases/qt/5.5/5.5.1/qt-opensource-windows-x86-mingw492-5.5.1.exe
里面已經(jīng)帶了Qt Creator - 當(dāng)然,我們也可以選擇Qt for Windows (VS編譯版本)
安裝Qt for Windows,我們可以注冊(cè)一個(gè)Qt賬號(hào),然后選擇安裝目錄并繼續(xù)。
?
2. 配置編譯環(huán)境
安裝完成后,打開Qt Creator。在Creator中的項(xiàng)目,類似于 Xcode,我們需要配置好多種目標(biāo)環(huán)境,不同的項(xiàng)目需要配置指定目標(biāo)環(huán)境,就可以針對(duì)目標(biāo)編譯生成。
打開Tools -> Options...
選擇Devices,點(diǎn)擊Add..增加一個(gè)Generic Linux Device,然后Start Wizard,填入設(shè)備名字,網(wǎng)絡(luò)地址以及用戶名密碼等。
完成后,會(huì)自動(dòng)開始測(cè)試設(shè)備連接。
然后我們可以開始配置Build & Run,選擇Qt Versions,添加一個(gè)Qt Version,選擇我們之前編譯好的Windows下的qmake:
然后添加一個(gè)Compiler,選擇Compilers選項(xiàng)卡,Add.. 一個(gè)MinGW類型的編譯器,選擇<sysgcc>\Raspberry\bin\arm-linux-gnueabihf-g++.exe
添加一個(gè)CMake,<sysgcc>\Raspberry\bin\make.exe
好了,最后我們就需要配置出一個(gè)Kit,包含一個(gè)目標(biāo)環(huán)境所需要的qmake,設(shè)備,CMake,以及配置文件。點(diǎn)擊Kits選項(xiàng)卡:
- Device type:Generic Linux Device
- Device:選擇你剛才新建的設(shè)備
- Sysroot:<sysgcc>\Raspberry\arm-linux-gnueabihf\sysroot
- Compiler:選擇新建的編譯器
- Qt version:選擇Raspberry Pi的Qt
- Qt mkspec:<sysgcc>\Raspberry\arm-linux-gnueabihf\sysroot\usr\local\qt5\mkspecs\devices\linux-rasp-pi2-g++
- CMake Tool:選擇新建的CMake
保存新的Kit配置。
因?yàn)镼t Creator的Debugger GDB需要有Python支持,但是MinGW中提供的GDB均沒有支持Python,所以我們目前無法指定Debugger,需要之后交叉編譯一個(gè)Raspebrry Pi支持的GDB with Python才可以作為Debugger來調(diào)試。
?
3. 新建Qt for Raspberry Pi項(xiàng)目并編譯測(cè)試
點(diǎn)擊 File -> New File or Project,打開新建項(xiàng)目向?qū)?#xff0c;選擇Qt Widgets項(xiàng)目模板,填入項(xiàng)目名稱,務(wù)必在Kit Selection中選擇才新建的Kit環(huán)境。
?
完成代碼后,我們可以通過左下側(cè)的編譯運(yùn)行按鈕直接編譯輸出到Raspberry Pi
目前我們只能使用
上篇講到“在Windows下用Qt Creator開發(fā)編譯Raspberry Qt 5應(yīng)用程序”,由于目前Qt Creator所支持的GDB需要有Python支持,但是目前MinGW中的GDB都是無Python支持的,所以我們需要自己下載GDB代碼并且編譯成針對(duì)Raspberry Pi支持Python的版本。
?
1. 準(zhǔn)備工作
?
- 下載MinGW最新版本:https://sourceforge.net/projects/mingw/files/Installer/?從sourceforge下載?mingw-get-setup.exe,這是一個(gè)MinGW軟件包安裝管理器,類似于Debian上的新得利包管理器,有一個(gè)GUI版本可以可視化的管理安裝MinGW環(huán)境的軟件包
- 從 Qt 站點(diǎn)下載?http://download.qt.io/development_releases/qtcreator/3.6/3.6.0-rc1/qt-creator-opensource-src-3.6.0-rc1.zip?下載Qt Creator 代碼,里面包含了配置編譯GDB的腳本。
- 從GNU站點(diǎn)下載GDB源碼(推薦GDB 7.1.0):http://ftp.gnu.org/gnu/gdb/gdb-7.10.tar.xz
- 從 Qt 站點(diǎn)下載GDB所依賴的Python 2.7庫:http://download.qt.io/development_releases/prebuilt/gdb/build-prerequisites/python.zip
- 從其他站點(diǎn)下載其他所依賴的庫源碼:
- libiconv 1.14:?http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
- expat 2.1.0:?https://sourceforge.net/projects/expat/files/expat/2.1.0/expat-2.1.0.tar.gz/download
解壓縮Qt Creator源碼,放入C:\Download目錄,并且將其他下載的庫及代碼放入?C:\Download\qt-creator-opensource-src-3.6.0-rc1\dist\gdb\source?(在gdb目錄下新建一個(gè)source目錄)
2. 配置編譯環(huán)境
有人要說,為什么不用之前toolchain for Windows的MinGW32來編譯,因?yàn)榻?jīng)過本人多次嘗試,發(fā)現(xiàn)toolchain中的MinGW版本過低,有一個(gè)time.h的結(jié)構(gòu)體聲明bug導(dǎo)致我們GDB編譯無法進(jìn)行。所以我們需要更新到最新的MinGW版本來編譯GDB
安裝MinGW-get到C:\MinGW
完成后打開?C:\MinGW\bin\mingw-get.exe,選擇 Basic Setup->勾選右側(cè)列表中 mingw-developer-toolkit, mingw32-base,mingw32-gcc-g++以及msys-base軟件包,點(diǎn)擊菜單Installation->Apply Changes 完成軟件包的安裝。
安裝軟件完成后,打開?C:\MinGW\msys\1.0\msys.bat 進(jìn)入MinGW shell環(huán)境。
?
3. 配置編譯GDB with Python for Win/Linux/ARM
打開?C:\Download\qt-creator-opensource-src-3.6.0-rc1\dist\gdb\Makefile.mingw?文件
在targets那一行添加Raspberry Pi的ABI:arm-linux-gnueabihf,然后保存文件。打開msys shell,進(jìn)入目錄?C:\Download\qt-creator-opensource-src-3.6.0-rc1\dist\gdb,make這個(gè)Makefile.mingw開始編譯:
注意:過程中可能會(huì)下載一些軟件包,確保你的網(wǎng)絡(luò)連接的穩(wěn)定,有條件的可以FQ連上VPN。如果下載一直出現(xiàn)問題,則可以選擇手動(dòng)下載那些軟件包放入source目錄中。
?
當(dāng)編譯打包全部完成后(大概會(huì)花一個(gè)小時(shí)編譯),你可以在?C:\Download\qt-creator-opensource-src-3.6.0-rc1\dist\gdb\qtcreator-gdb-7.10?找到編譯好的GDB,并且也有一個(gè)打包好的?qtcreator-gdb-7.10-mingw32_nt-6.2-i686.tar.gz?在\dist\gdb目錄下。
?
4. 在Qt Creator中配置并聯(lián)機(jī)調(diào)試Qt for Raspberry Pi應(yīng)用
打開Qt Creator,進(jìn)入Tools->Options...->Build & Run->Debugger,添加一個(gè)Debugger,選擇剛才編譯出來的gdb.exe,如下圖,保存后。
打開Kits,選擇之前配置好的Rasspberry Pi的開發(fā)Kit,在Debugger下選擇配置好的Debugger,點(diǎn)擊OK保存關(guān)閉。
?
好了,至此,Qt Creator就可以使用
總結(jié)
以上是生活随笔為你收集整理的树莓派Raspberry Pi的嵌入式QT平台的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 先进事迹如何写出深度?到底怎么做
- 下一篇: 基于QT平台调试rtklib教程