Qt5.2.1移植海思

sunxiaopengsun發表於2018-03-09


1.修改./qtbase/mkspecs下的 qmake.config

以一個linux-arm-test配置目錄為例,將mkspecs目錄下的linux-arm-gnueabi-g++複製為linux-arm-test

cp linux-arm-gnueabi-g++ linux-arm-test –r

修改linux-arm-test配置

cd linux-arm-test

檢視ls /opt/FriendlyARM/toolschain/4.4.3/bin檢視目錄下實際編譯工具鏈名

將linux-arm-test目錄下qmake.config中的arm-linux-gnueabi-開頭都更改為實際路徑加工具鏈名:PATH+arm-none-linux-gnueabi- 

如QMAKE_CC  = /opt/FriendlyARM/toolschain/4.4.3/bin/arm-none-linux-gnueabi-gcc

再加入三行:

QT_QPA_DEFAULT_PLATFORM = linuxfb      #qpa圖形外掛,

QMAKE_CFLAGS_RELEASE   += -O2 -march=armv5te

QMAKE_CXXFLAGS_RELEASE += -O2 -march=armv5te

 

說明1:QT_QPA_DEFAULT_PLATFORM選項是指定圖形外掛, Qt5將各平臺底層抽象為一個 qpa 外掛,通常在mac上是cocoa, 在window上是windows, 在linux X11下是xcb, 如果有OPENGL支援, 那麼選eglfs。而對於無硬體加速的裝置,則選擇linuxfb,。    minimal僅僅是讓程式跑通, 不起任何作用

說明2:目標板為新唐N32905U1DN,cpu為arm936ejs,執行arm-linux-gcc –target-help 檢視交叉編譯器所支援的架構,選擇了其中比較接近的一個為armv5te

 

修改qmake.conf檔案:

#

# qmake configuration for building with arm-linux-gnueabi-g++

#

 

MAKEFILE_GENERATOR      = UNIX

CONFIG                          += incremental gdb_dwarf_index

QMAKE_INCREMENTAL_STYLE = sublib

 

QT_QPA_DEFAULT_PLATFORM = linuxfb

QMAKE_CFLAGS_RELEASE   += -O2 -march=armv5te

QMAKE_CXXFLAGS_RELEASE += -O2 -march=armv5te

 

 

include(../common/linux.conf)

include(../common/gcc-base-unix.conf)

include(../common/g++-unix.conf)

 

# modifications to g++.conf

QMAKE_CC             = /opt/FriendlyARM/toolschain/4.4.3/bin/arm-none-linux-gnueabi-gcc

QMAKE_CXX            = /opt/FriendlyARM/toolschain/4.4.3/bin/arm-none-linux-gnueabi-g++

QMAKE_LINK           = /opt/FriendlyARM/toolschain/4.4.3/bin/arm-none-linux-gnueabi-g++

QMAKE_LINK_SHLIB    = /opt/FriendlyARM/toolschain/4.4.3/bin/arm-none-linux-gnueabi-g++

 

# modifications to linux.conf

QMAKE_AR         = /opt/FriendlyARM/toolschain/4.4.3/bin/arm-none-linux-gnueabi-ar cqs

QMAKE_OBJCOPY   = /opt/FriendlyARM/toolschain/4.4.3/bin/arm-none-linux-gnueabi-objcopy

QMAKE_NM       = /opt/FriendlyARM/toolschain/4.4.3/bin/arm-none-linux-gnueabi-nm -P

QMAKE_STRIP    = /opt/FriendlyARM/toolschain/4.4.3/bin/arm-none-linux-gnueabi-strip

load(qt_config)

 

2.configure配置

configure配置: 在qt-5.2.1-arm目錄下執行 sudo ./configure -prefix $PWD/qtbase -release -opensource -xplatform linux-arm-test -nomake tests -no-largefile -qt-zlib -no-nis -qt-libpng -qt-libjpeg -qt-freetype
注意 : 這樣後續安裝可能會出問題(但qmake已經生成不影響正常使用) : 

編譯QT5.7.0遇到 ERROR: Unknown module(s) in QT: quick


可以嘗試如下方法 ,但本人沒試過 :

編譯嵌入式QT5.7.0,配置完成後在make時遇到 ERROR: Unknown module(s) in QT: quick,後將配置檔案加入-skip qtdeclarative解決,完整配置選項如下:

./configure -opensource -shared -xplatform linux-arm-gnueabihf-g++ -qt-zlib -no-opengl -no-openssl -nomake examples -skip qtcanvas3d -skip qt3d -qreal float -skip qtdeclarative -prefix /xilinx/qt5/qt5instll/



3.執行make&&make install

期間會報錯 (大概三次),方法是直接改原始碼,註釋掉錯誤地方 


4. 安裝後的問題



Qt5 背景透明顯示問題
qt4 可以通過 QWSServer::setBackground(QColor(0, 0, 0, 0)) 設定背景透明,
但是qt5裡面沒有這個了,現在程式執行到qt5去掉這段程式碼後,在arm 上面跑背景是為黑色的,
qt5 應該怎麼設定才能讓背景透明。


已經解決,在arm上跑用的是linuxfb平臺,需要更改兩個地方。
1. 在qtbase\src\platformsupport\fbconvenience\qfbscreen.cpp中將
mCompositePainter->fillRect(rect, Qt::black);
更改為
mCompositePainter->setCompositionMode(QPainter::CompositionMode_Source);
mCompositePainter->fillRect(rect, Qt::transparent);
mCompositePainter->setCompositionMode(QPainter::CompositionMode_SourceOver);


2. 在qtbase\src\plugins\platforms\linuxfb\qlinuxfbscreen.cpp中將
mBlitter->drawImage(rects, *mScreenImage, rects);
更改為
mBlitter->setCompositionMode(QPainter::CompositionMode_Source);
mBlitter->drawImage(rects[i], *mScreenImage, rects[i]);
mBlitter->setCompositionMode(QPainter::CompositionMode_SourceOver);



#配置qt外掛以及執行環境
將安裝軟體目錄下的plugins拷貝到目標板。
export QT_QPA_PLATFORM_PLUGIN_PATH=$QTDIR/plugins #qt外掛載入目錄
export QT_QPA_PLATFORM=linuxfb:tty=/dev/tty0          #qt圖形外掛平臺

export QT_QPA_FONTDIR=$QTDIR/lib/fonts           #qt字型庫目錄


參考文章:點選開啟連結



相關文章