海思3519A 移植 Qt 5.5.1

源碼下載

網址:qt-everywhere-opensource-src-5.5.1.tar.gzlinux

配置生成MakeFile 文件

解壓源碼包,在源碼包路徑下生成配置 MakeFile :web

./configure -prefix /home/qt-5.5.1 -release -opensource -confirm-license -static  \
-platform linux-g++ -xplatform linux-himix200-linux-g++   \
-qt-zlib -qt-libpng -qt-libjpeg -qt-freetype -no-pch -no-avx -no-openssl  \
-no-cups -no-dbus -no-opengl -no-glib -skip qtwebchannel -skip qtcanvas3d -skip qtwebkit \
-mtdev -evdev  -nomake examples  -nomake tests
  • -prefix /home/qt-5.5.1 指定最終的安裝路徑爲/home/qt-5.5.1
  • -static 來生成靜態庫是爲了方便程序在板端運行,減小對庫加載路徑的配置以及文件目錄的掛載。執行程序時不須要再設置一堆的環境變量以及掛載庫的路徑;
  • -qt-zlib -qt-libpng -qt-libjpeg -qt-freetype 這幾個選項最好使用qt庫自帶的源碼,否則若是系統上沒有這個庫或者找不到,自行編譯這些庫後再加入到相關路徑上還須要爲這些庫寫依賴文件才能使用,沒有依賴文件,連接程序時會報一些插件找不到的錯誤;
  • -platform linux-g++ 指的是你在什麼機器上編譯這些文件;
  • -xplatform 指的是程序要運行在什麼平臺,linux-g++會用來編譯一些使用工具;
  • -mtdev 用於多點觸摸,-evdev 用於鼠標鍵盤;

生成 MakeFile 文件以後,依次進行:canvas

make 
make install

make編譯完後, 會生成若干Qt的.a文件,這裏說下qt的核心庫會被編譯在qt-everywhere-opensource-src-5.5.1/qtbase/lib目錄下,而fb以及圖像支持的庫入libjpeg和libgif等庫都是以插件的形式存在的,放在qt-everywhere-opensource-src-5.5.1/qtbase/src/plugins目錄下。後端

Qt庫對接海思平臺

linuxfb 插件修改重編譯

arm上使用的繪圖後端通常都是linuxfb這個插件,在海思上使用fb以前須要先作一些初始化的工做,須要先初始化MPP系統以及VO,否則直接打開fb會報權限不容許的錯誤。 在此咱們能夠經過修改qt-everywhere-opensource-src-5.5.1/qtbase/src/plugins/platforms/linuxfb,添加MPP,VO初始化的工做。以後再執行:工具

make
make install

這時linuxfb插件就能夠適配海思平臺,此部分的修改參考文末的下載程序。測試

交叉編譯環境配置

點擊qtCeator菜單欄的Tools->option->Build&Run,配置交叉編譯環境:ui

  • Compliers選項,增長一個編譯器,配置該編譯器的路徑爲相應的arm-himix200-linux-g++的路徑,,個人路徑是arm-himix200-linux/bin/下。
  • Qt Versions選項,增長一個qmake工具,Qt中經過qmake編譯.pro文件來生成Makefile。配置該qmake工具路徑爲qt-5.5.1/bin/qmake, 該qmake是使用arm-himix200-linux-g++編譯後生成的工具類,專門使用在3519平臺上,用於生成相應的Makefile。
  • Kits,增長一個Kit,在compiler和Qt Version中選中步驟1,2中配置的選項。

測試

建立一個簡單的qt程序,在.pro中添加海思相關的庫和頭文件,並使用qmake手動生成makefile:this

qt-5.5.1/bin/qmake *.pro -o Makefile

接着make並生成可執行文件,將文件拷貝到nfs系統的/home目錄下,工程能夠參考文末的下載程序,接着就能夠執行程序。spa

hifb 疊加

目的是將qt的GUI與海思的MPI分離,在視頻層上疊加上圖形層。 此部分的工做,須要在linuxfb上啓用hifb。 另外,設置QT界面透明顯示 (1) 修改qt-everywhere-opensource-src-5.5.1/qtbase/src/plugins/platforms/linuxfb/qlinuxfbscreen.cpp.net

for (int i = 0; i < rects.size(); i++)
    {
	// -
        //mBlitter->drawImage(rects[i], *mScreenImage, rects[i]);
	// +
	mBlitter->setCompositionMode(QPainter::CompositionMode_Source);
	mBlitter->drawImage(rects[i], *mScreenImage, rects[i]);
	mBlitter->setCompositionMode(QPainter::CompositionMode_SourceOver);
    }

(2) 修改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);

(3) 修改qt程序

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    setWindowFlags(Qt::CustomizeWindowHint);
}

參考程序下載

相關文章
相關標籤/搜索