適用於樹莓派Raspberry Pi的嵌入式QT平台(一) -- 交叉編譯安裝Qt Embedded 5.5


在樹莓派上設計桌面應用一般情況會依賴於X11環境,如果是Windows平台,就目前而言,我們也可以選擇Windows 10 IoT環境進行開發。UWP目前也支持在樹莓派2上進行部署。至於常見的Linux X11或者Wayland環境,相比之下比較冗余,但是QT Emebedded直接利用Framebuffer,顯示GUI,會更加輕便。利用樹莓派 Open GL支持,更可以開發出3D效果,是工業領域開發設計可視化設備的不錯選擇,更是物聯網設備一個比較好的交互方案。

1. 准備工具

 

我們要在Windows上對QT 5.5進行交叉編譯,所以我們需要准備以下工具:

 

 

2. 安裝Rasbian

 

大家可以參考這個鏈接 https://www.raspberrypi.org/documentation/installation/installing-images/windows.md 來安裝Rasbian,不過簡單來講,在Windows下安裝Rasbian只需要用WinfFlashTool 或者 Win32DiskImager 將系統鏡像刷入一張不小於8GB的SD

將SD插入樹莓派,接上電源和HDMI,啟動系統,默認用戶pi,密碼raspberry登入系統 (建議打開Raspi-config配置系統默認進入CLI,修改管理員密碼,配置GPU內存128MB,然后重啟)。

運行命令進行系統更新。

sudo apt-get update

sudo apt-get upgrade

建議:先預先安裝下面庫,交叉編譯Qt,xcb依賴這些庫,默認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

你可能會碰到某些庫無法下載,你可以手動下載然后通過 dpkg -i 來安裝。

3. 同步Linux環境

在Windows中交叉編譯Qt,需要先同步樹莓派Linux 庫、頭文件到sysroot下。在<sysgcc>\Raspberry\TOOLS中打開 UpdateSysroot.bat  (<sysgcc>為toochain的安裝目錄,例如C:\SysGCC)

在Targeted Linux machine輸入選擇你的樹莓派,如上圖輸入你需要同步的目錄,建議同步/opt目錄 (在輸入框里按 Ctl+Enter換行,直接按Enter默認為開始同步,請注意),里面包含了OpenGL的頭文件,我們在編譯Qt需要引用。 注意,千萬不要同步/etc目錄,因為他會復寫本地的/etc/ld.so.conf文件,會破化Windows下編譯時的頭文件引用。如果不小心同步了,我們需要重新安裝  aspberry-gcc4.6.3.exe 來提取恢復此文件。

 

4. 配置編譯qmake

我們需要先解壓縮下載下來的qt源碼包,比如解壓縮在C:\qt-everywhere-opensource-src-5.5.0 (可以用7-zip來解壓縮)。或者打開MinGW32下的msys (<sysgcc>\MinGW32\msys\1.0\msys.bat) 進入你的qt代碼下載目錄(例如 C:\download)

然后確認代碼全部解壓縮到當前目錄下,確認gccarm-linux-gnueabihf-gcc工具的路徑

如果沒有找到gcc和arm-linux-gnueabihf-gcc,你可以設置你的Windows系統PATH環境變量,加入 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-,如下圖:

 

好了,現在我們可以開始編譯Qt。由於Qmake編譯腳本的一個bug,我們無法直接交叉編譯Raspberry版本,需要分為兩步,先編譯Windows Qmake然后再交叉編譯Raspberry Qt。

打開 qt-everywhere-opensource-src-5.5.0\qtbase\mkspecs\win32-g++ 下的qmake.conf文件,在 CXXFLAGS 后面添加 -U__STRICT_ANSI__ 標記

輸入下面的命令開始編譯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參數:配置Qt直接使用Raspberry framebuffer 而不是X11

全部配置完成后,你可以用命令 qtbase/bin/qmake -v 檢查下qmake是否配置成功

 

5. 交叉編譯Qt for Raspberry

現在我們打開 C:\download\qt-everywhere-opensource-src-5.5.0\qtbase\configure 文件,找到3900行左右 "Creating qmake...",修改為:

if [ '!' -f "$outpath/bin/qmake.exe" ]; then

注意qmake.exe后面的.exe擴展名和最后的then。使用已經編譯好的Windows qmake而不用再去生成qmake

好了,到此我們做好了所有的准備工作,就要開始編譯Qt for Raspberry Pi了。在這之前,建議大家再次確認下是否有遺漏或者錯誤,不然一次編譯就需要十幾個小時,中斷后再來很費時間。

回到msys窗口,進入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" 使用開源版本和同意許可證內容。

可以忽略出現的警告。但如果出現缺少庫依賴的錯誤,請回到第3步,同步Linux環境,檢查是否已經同步了必要的目錄。檢查是否在Raspbian中遺漏了必須的庫。可以按照輸出提示,去檢查Qt環境的依賴庫,並且在Raspbian中手動安裝,然后再進行一次同步。

你也可以檢查 <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

如果你看到了下面的內容,那么你就可以輸入 make && make install 開始編譯安裝。不出意外,整個過程打開需要15小時左右,具體視機器性能,反正我花了20小時完成所有編譯安裝。默認會安裝到 <sysgcc>\Raspberry\arm-linux-gnueabihf\sysroot\usr\local\qt5 目錄。

 

6. 同步Qt到Raspbian並測試

等待一天后,編譯安裝完成,我們就可以將安裝在本地PC上的Qt復制到Raspberry中。不建議使用SFTP工具進行上傳,因為SFTP上傳無法將文件屬性復制過去。這里建議使用 toolchain 中自帶的SmarTYY來完成上傳。打開 <sysgcc>\Raspberry\TOOLS\PortableSmartty下的 SmarTTY.exe 工具,配置連接到你的樹莓派。

cd/usr/local

sudomkdirqt5
sudo chown pi qt5

創建Qt 5的安裝目錄,然后打開SmarTYY菜單,選擇上傳目錄。

配置本地目錄為 <sysgcc>\Raspberry\arm-linux-gnueabihf\sysroot\usr\local\qt5, 遠程目錄為 /usr/local/qt5,開始上傳

完成后,我們就可以在SSH中進行測試,進入 /usr/local/qt5/examples/widgets/richtext/textedit 運行例子 ./textedit。這時如果你的樹莓派連接着顯示器,你就會看到一個文本編輯器顯示出來,接上鼠標鍵盤,你就可以進行圖形化界面操作了。

SSH端:

樹莓派連接的顯示器:

 

 

下一篇:適用於樹莓派Raspberry Pi的嵌入式QT平台(二) -- 在Windows下用Qt Creator開發編譯Raspberry Qt 5應用程序


大部分內容參考自:http://visualgdb.com/tutorials/raspberry/qt/embedded/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM