移植QT到tiny4412開發板

目錄

        • (一) 環境準備
        • (二) Qt源代碼下載
        • (三) 移植tslib庫
        • (四)操作流程
            • 1.解壓qt源碼包
            • 2.配置編譯環境
            • 3.生成Makefile
            • 4.編譯安裝
            • 5.安裝一些庫用來支持 qt
            • 6. 添加以下內容到開發板目錄下的/etc/profile 文件
            • 7. 添加字體
            • 8.QT中文支持
        • (五)使用QtCreater編寫測試程序
        • (六)使用命令編譯測試
        • (七)關于交叉編譯器版本的問題:

(一) 環境準備

  • ubuntu16.04
  • 交叉編譯工具:arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz
  • linux內核版本:linux-3.5

一定要注意交叉編譯器版本和qt源代碼版本的問題,否則制作Makefile會出現問題,關于出現版本問題,在文末有解決辦法提示。
交叉編譯器的版本是arm-linux-gcc 4.5.1 ,該編譯器版本對C++11支持不完善,如果需要編譯更加高的QT版本,就需要升級交叉編譯器,目前4友善之臂光盤提供的編譯器最高只能支持QT5.6版本的交叉編譯。
最新的交叉編譯器下載地址: https://www.veryarm.com/arm-none-linux-gnueabi-gcc
這里我們下載arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2,文中演示使用的也是這個版本 ,安裝交叉編譯器參考:linux安裝交叉編譯環境

(二) Qt源代碼下載

下載鏈接:Qt
圖一
這里根據自己的需求選擇,我這里選擇5.1版本的

tuer
選擇single下載完整的源碼包

圖三
選擇.tar.gz結尾的,我這里有以前下載好的5.7.0的源碼包直接使用了,如果下載其他版本的方法不變。

(三) 移植tslib庫

移植前需要先移植好tslib庫,tslib 是電阻式觸摸屏用于校準的一個軟件庫,是一個開源的程序,能夠為觸摸屏驅動獲得的采樣提供諸如濾波、去抖、校準等功能,通常作為觸摸屏驅動的適配層,為上層的應用提供了一個統一的接口。操作觸摸屏時,QT需要依賴tslib獲取屏幕坐標。
具體的移植過程參考:tiny4412移植tslib庫

(四)操作流程

1.解壓qt源碼包
 tar -xvf qt-everywhere-opensource-src-5.1.0.tar.gz cd qt-everywhere-opensource-src-5.1.0

注意這里解壓的時候不要選擇ubuntu自帶的提取到此處,有可能丟失文件,我在這個部分找了好久錯誤

2.配置編譯環境

由于我用的是新更新的源代碼,所以交叉編譯器安裝的是5.4的,在配置qmake.conf的時候需要注意。

root@1:/qt-everywhere-src-5.1.0# gedit qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf 

qmake.conf 文件內容如下:

#
#qmake configuration for building with arm-linux-gnueabi-g++
#MAKEFILE_GENERATOR = UNIX
CONFIG += incremental
QMAKE_INCREMENTAL_STYLE = sublibQT_QPA_DEFAULT_PLATFORM = linux #eglfs
QMAKE_CFLAGS_RELEASE += -O2 -march=armv7-a
QMAKE_CXXFLAGS_RELEASE += -O2 -march=armv7-ainclude(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)#modifications to g++.confQMAKE_CC = arm-none-linux-gnueabi-gcc
QMAKE_CXX = arm-none-linux-gnueabi-g++
QMAKE_LINK = arm-none-linux-gnueabi-g++
QMAKE_LINK_SHLIB = arm-none-linux-gnueabi-g++#modifications to linux.confQMAKE_AR = arm-none-linux-gnueabi-ar cqs
QMAKE_OBJCOPY = arm-none-linux-gnueabi-objcopy
QMAKE_NM = arm-none-linux-gnueabi-nm -P
QMAKE_STRIP = arm-none-linux-gnueabi-strip
load(qt_config)

QT_QPA_DEFAULT_PLATFORM選項是指定圖形插件, Qt5將各平臺底層抽象為一個 qpa 插件,通常在mac上是cocoa, 在window上是windows, 在linux X11下是xcb, 如果有OPENGL支持, 那么選eglfs。而對于無硬件加速的設備,則選擇linuxfb。

armv7-a :是當前CPU的構架,需要根據當前的CPU實際構架填寫。

3.生成Makefile

創建腳本文件, 生成 Makefile,對 qt 進行裁剪及安裝配置

gedit autoConfigure.sh

內容如下:

#!/bin/sh
./configure \
-v \
-prefix /usr/local/Qt5.7.0 \
-release \
-opensource \
-make libs \
-xplatform linux-arm-gnueabi-g++ \
-optimized-qmake \
-pch \
-qt-sql-sqlite \
-qt-libjpeg \
-qt-zlib \
-no-opengl \
-skip qt3d \
-skip qtcanvas3d \
-skip qtpurchasing \
-no-sse2 \
-no-openssl \
-no-nis \
-no-cups \
-no-glib \
-no-iconv \
-nomake examples \
-nomake tools \
-skip qtvirtualkeyboard \
-I/usr/local/tslib/include \
-L/usr/local/tslib/lib
exit

以上的配置選項信息可通過./configure –help 查看

修改腳本運行權限,執行腳本,完成后在文件夾下生成 Makefile

chmod +x autoConfigure.sh
./autoConfigure.sh

編譯出現如下錯誤(如果沒錯誤忽略這一點)(1)(2):

查看config.log信息

root@1:/qt-everywhere-src-5.14.2# vim config.log 

查看配置的幫助信息:

 ./configure -help

(1) -std=c++11 沒有
圖二
這是交叉編譯器版本較低,安裝高版本的交叉編譯器就行
(2) main.cpp:2:24: fatal error: libspeechd.h: 沒有那個文件或目錄

圖三

4.編譯安裝
make -j8 && make install -j8

編譯過程比較慢,需要幾個小時
bainyi
tu

5.安裝一些庫用來支持 qt
apt-get install libncurses5-dev libreadline-dev 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-sync-dev libxcb-xfixes0-dev libxrender-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-render-util0 libxcb-render-util0-dev libxcb-glx0-dev libxcb-xinerama0-dev

將/usr/local/ Qt5.7.0 拷貝到開發板/usr/local/

cp /usr/local/ Qt5.7.0 /driver/rootfs/usr/local/ -r
6. 添加以下內容到開發板目錄下的/etc/profile 文件
export QT_ROOT=/usr/local/Qt5.7.0/
export TSLIB_ROOT=/usr/local/tslib/
export TSLIB_TSDEVICE=/dev/input/event0
export TSLIB_TSEVENTTYPE=input
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf
export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_CONSOLEDEVICE=none
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$TSLIB_ROOT/lib
export QWS_MOUSE_PROTO=tslib:/dev/event2
export LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib:$QT_ROOT/lib:$TSLIB_ROOT/lib
export QT_QPA_PLATFORM_PLUGIN_PATH=$QT_ROOT/plugins
export QT_QPA_PLATFORM=linuxfb:tty=/dev/fb0
export QT_QPA_FONTDIR=$QT_ROOT/lib/fonts
export QT_QPA_GENERIC_PLUGINS=tslib
export QT_QPA_FB_TSLIB=1
7. 添加字體
mkdir /driver/rootfs/usr/local/Qt5.7.0/lib/fonts

將/usr/share/fonts/truetype/ubuntu-font-family 下的字體文件,復制到根文件系統/usr/local/ Qt5.7.0/lib/fonts
目錄下

cp /usr/share/fonts/truetype/ubuntu-font-family/* /driver/rootfs/usr/local/Qt5.7.0/lib/fonts –r
8.QT中文支持

Qt的字體目錄是根據自己在PC機的QT源碼編譯安裝目錄有關。

如果想讓QT顯示中文,可以將windows下的中文字體拷貝到QT的字體庫目錄下。

這是我的Qt安裝目錄:在這里插入圖片描述
windows下字體目錄在:C:\Windows\Fonts
ziti
將上面的字體拷貝到Qt安裝目錄下的fonts下就行了。

(五)使用QtCreater編寫測試程序

打開QtCreater,這里我已經安裝好了,沒安裝的可以在上面提供的網址下載。
測試圖一
測試圖三
測試圖一

測試圖四
測試圖六
同時,想要將編譯后的文件在開發板環境下運行需要添加
exportLD_PRELOAD=$TSLIB_ROOT/lib/libts.so 到根文件的/etc/profile,否則運行時會出現
Couldnt load module pthres
ts_config() failed (No such file or directory)

除了使用QtCreater編譯程序,我們還可以使用qmake命令編譯

(六)使用命令編譯測試

1.創建qt工程

root@1:/mydriver/rootfs/home/qt/led1# ls
led.pro       main.cpp        mainwindow.h   socket.cpp
led.pro.user  mainwindow.cpp  mainwindow.ui  socket.h

2.使用qmake命令構建Makefile

root@1:/mydriver/rootfs/home/qt/led1# qmake
Info: creating stash file /mydriver/rootfs/home/qt/led1/.qmake.stash
root@1:/mydriver/rootfs/home/qt/led1# ls
led.pro       mainwindow.cpp  Makefile
led.pro.user  mainwindow.h    socket.cpp
main.cpp      mainwindow.ui   socket.h

3.編譯程序

root@1:/mydriver/rootfs/home/qt/led1# make 
root@1:/mydriver/rootfs/home/qt/led1# ls
led      led.pro.user  main.o          mainwindow.h  mainwindow.ui  moc_mainwindow.cpp  moc_predefs.h  socket.h  ui_mainwindow.h
led.pro  main.cpp      mainwindow.cpp  mainwindow.o  Makefile       moc_mainwindow.o    socket.cpp     socket.o

上面生成的led就是可執行文件,可以直接復制到開發板運行

./led

圖三

(七)關于交叉編譯器版本的問題:

最近更新的qt源碼要求c++11,沒有./configure -no-c++11選項,因為arm-linux-gcc4.8以后才支持c++11
,所以可以下載以前的qt源碼+低版本的交叉編譯器(arm-linux-gg-4.8以前)或者下載最近的qt源碼+高版本的交叉編譯器(arm-linux-gg-4.8以后)
如果下載的是以前的qt可以使用上面提供的arm-linux-gcc-4.5,在制作makefile的時候使用:

#./configure -release -opensource -xplatform linux-arm-gnueabi-g++ -prefix $PWD/tmp -no-c++11 -no-opengl -no-dbus

如果下載的是最近的qt可以使用上面提供的arm-linux-gnueabihf-gcc-5.4:

#./configure -release -opensource -xplatform linux-arm-gnueabi-g++ -prefix $PWD/tmp -std=c++11 -no-opengl -no-dbus

qt5.1.0(2013年發布)版本:
在這里插入圖片描述
在這里插入圖片描述
qt5.14.2(2017年維護的):
在這里插入圖片描述
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/531398.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/531398.shtml
英文地址,請注明出處:http://en.pswp.cn/news/531398.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

c++面試常用知識(sizeof計算類的大小,虛擬繼承,重載,隱藏,覆蓋)

一. sizeof計算結構體 注&#xff1a;本機機器字長為64位 1.最普通的類和普通的繼承 #include<iostream> using namespace std;class Parent{ public:void fun(){cout<<"Parent fun"<<endl;} }; class Child : public Parent{ public:void fun(){…

嵌入式面試題(一)

目錄1 關鍵字volatile有什么含義&#xff1f;并給出三個不同的例子2. c和c中的struct有什么不同&#xff1f;3.進程和線程區別4.ARM流水線5.使用斷言6 .嵌入式系統的定義7 局部變量能否和全局變量重名&#xff1f;8 如何引用一個已經定義過的全局變量&#xff1f;9、全局變量可…

能ping通ip但無法ping通域名和localhost //ping: bad address 'www.baidu.com'

錯誤描述&#xff1a; ~ # ping localhost ping: bad address localhost原因&#xff0c;在/etc目錄下缺少hosts文件&#xff0c;將linux中的/etc hosts文件拷入即可 ~ # ping localhost PING localhost (127.0.0.1): 56 data bytes 64 bytes from 127.0.0.1: seq0 ttl64 tim…

eclipse導入web項目之后項目中出現小紅叉解決辦法

項目中有小紅叉我遇到的最常見的情況&#xff1a; 1、項目代碼本身有問題。&#xff08;這個就不說了&#xff0c;解決錯誤就OK&#xff09; 2、項目中的jar包丟失。&#xff08;有時候eclipse打開時會出現jar包丟失的情況&#xff0c;關閉eclipse重新打開或者重新引入jar包就O…

arm開發板通過網線連接筆記本電腦上外網

需要工具&#xff1a;arm開發板&#xff0c;網線&#xff0c;一臺雙網卡的win7筆記本電腦&#xff08;筆記本電腦一般都是雙網卡&#xff09; 一、筆記本電腦需要先連上外網&#xff0c;可以連上家里的WIFI&#xff0c;或者手機開熱點&#xff08;本人未測試過連接手機的熱點&…

windows下實現Git在局域網使用

1.首先在主機A上創建一個文件夾用于存放你要公開的版本庫。然后進入這個文件夾&#xff0c;右鍵->Git create repository here&#xff0c;彈出的窗口中勾選Make it Bare&#xff01;之后將這個文件夾完全共享&#xff08;共享都會吧&#xff1f;注意權限要讓使用這個文件夾…

解決linux下QtCreator無法輸入中文的情況

安裝了QtCreator(Qt5.3.1自帶版本)后無法輸入中文&#xff0c;確切的說是無法打開輸入法。以前使用iBus輸入法的時候沒有這個問題&#xff0c;現在使用sougou輸入法才有的這個問題。 可以查看此文 http://www.cnblogs.com/oloroso/p/5114041.html 原因 有問題就得找原因&…

lintcode 滑動窗口的最大值(雙端隊列)

題目鏈接&#xff1a;http://www.lintcode.com/zh-cn/problem/sliding-window-maximum/# 滑動窗口的最大值 給出一個可能包含重復的整數數組&#xff0c;和一個大小為 k 的滑動窗口, 從左到右在數組中滑動這個窗口&#xff0c;找到數組中每個窗口內的最大值。 樣例 給出數組 [1…

你的main函數規范嗎?

在學習c語言的時候&#xff0c;有一個函數一直被我們使用&#xff0c;那就是main函數&#xff0c;但是你知道標準里面是怎么規定它的寫法嗎&#xff1f; 平時看見的main函數有下面這幾種&#xff1a; 1.int main(void){ }2.int main(){ }3.int main(int argc, char *argv[])…

lintcode 最長上升連續子序列 II(二維最長上升連續序列)

題目鏈接&#xff1a;http://www.lintcode.com/zh-cn/problem/longest-increasing-continuous-subsequence-ii/ 最長上升連續子序列 II 給定一個整數矩陣&#xff08;其中&#xff0c;有 n 行&#xff0c; m 列&#xff09;&#xff0c;請找出矩陣中的最長上升連續子序列。&a…

適用于Linux的Windows子系統WSL

以前使用的都是在虛擬機里安裝linux&#xff0c;最近才發現在win10提供了WSL(Windows Subsystem for Linux) &#xff0c;簡單來說就是可以在win10里面直接使用Linux。 &#xff08;一&#xff09;首先打開Microsoft Store , 搜索 Linux &#xff08;二&#xff09;選擇自己需…

jsp通過易寶方式實現在線支付

項目下載地址: https://github.com/hjzgg/OnlinePayment 參考&#xff1a;http://blog.csdn.net/jadyer/article/details/7380259?utm_sourcetuicool&utm_mediumreferral 效果圖1&#xff1a;請求界面 效果圖2&#xff1a;地支付請求和易寶之間建立連接之后跳轉到相應的銀…

permission denied是什么鬼?

問題&#xff1a;在PC端編譯了一個arm芯片的測試程序&#xff0c;出現了permission denied 解決辦法&#xff1a; 1.給文件賦予可執行權限 chmod ax xxx這是一般第一反應會想到的答案 2. 有時候已經有可執行權限&#xff0c;還是提示上面的錯誤此時要注意你的交叉編譯器是否正…

CSS中div覆蓋另一個div

將一個div覆蓋在另一個div上有兩種手段&#xff1a;一是設置margin為負值&#xff0c;二是設置絕對定位。 可以根個人情況設置z-index的值 1->position 為absolute的情況 <html> <head> <style> #div1{position:absolute;width:300px;height:300px;backgr…

nand flash和nor flash的這幾點區別你知道嗎?

這篇文章講解nand flash和nor flash的特點和區別&#xff0c;不涉及存儲原理的講解 &#xff08;一&#xff09;Flash簡介 FLASH是一種存儲芯片&#xff0c;全名叫Flash EEPROM Memory&#xff0c;通地過程序可以修改數據&#xff0c;即平時所說的“閃存”。Flash又分為NAND f…

c++堆

c reference: http://www.cplusplus.com/reference/algorithm/make_heap/ heap并不屬于STL容器組件&#xff0c;它分為 max heap 和min heap&#xff0c;在缺省情況下&#xff0c;max-heap是優先隊列&#xff08;priority queue&#xff09;的底層實現機制。 而這個實現機制中的…

關于Ubuntu拒絕root用戶ssh遠程登錄

今天使用SecureCRT遠程登陸Ubuntu時一直提示密碼或用戶名錯誤&#xff0c;實際輸入是正確的&#xff0c;我按照網上教程改還是不行&#xff0c;后來才想起來我是root登錄的&#xff0c;Ubuntu默認的ssh遠程root登錄是關閉的&#xff0c;在這里記錄一下 1.編輯配置文件 #sudo v…

windows8建立局域網的方法

win8建立局域網的方法&#xff1a;1、首先筆記本有無線網卡且支持 虛擬WIFI ;2、按winX鍵&#xff0c;選擇"命令提示符(管理員)A"; 3、輸入"netsh wlan set hostednetwork modeallow ssid網絡名稱 key我的密碼" ; 4、接著輸入"netsh wlan start hoste…

內核移植出現:Kernel panic - not syncing: No init found.

今天在升級SDK的時候&#xff0c;升級到kernel時遇到如題所述的問題&#xff0c;花了天時間調通&#xff0c;在這里記錄一下。 報錯提示&#xff1a;(當時沒有記錄&#xff0c;錯誤的提示大概如下) Kernel panic - not syncing: No init found. Try passing init option to k…

lintcode Permutation Index

題目&#xff1a;http://www.lintcode.com/zh-cn/problem/permutation-index/ 排列序號 給出一個不含重復數字的排列&#xff0c;求這些數字的所有排列按字典序排序后該排列的編號。其中&#xff0c;編號從1開始。 樣例 例如&#xff0c;排列[1,2,4]是第1個排列。 思路&#xf…