1. 程式人生 > >Linux編譯移植Qt4的環境_在OMAPL138平臺

Linux編譯移植Qt4的環境_在OMAPL138平臺

Linux編譯Qt4的環境_OMAPL138

手裡有一塊創龍OMAPL138的板子,我要在上面成功移植Qt環境和觸控式螢幕幕,這是我第二次進行Linux的Qt環境移植,發現了很多問題,需要重新整理。 我編譯了,Qt5版本以上的,結果就是不成功,總是死在PDA問題上,在 configure檔案上加入-xcb的選項,就算我安裝了xcb所有的庫檔案,最後還是出問題,我還在研究之中,等著編譯Qt5通過之後,我會重新寫一個Linux編譯Qt5的環境。

本文不適合配置Qt5的環境,不要用在Qt5上

準備

  • 交叉編譯環境(一定要找到適合你板子的交叉編譯環境)

  • Qte嵌入式原始碼,檔案的名字如同:qt-everywhere-opensource-src-4.8.6.tar.xz

我的環境

  • PC 機: Ubuntu16.04 (64bit)

    • PS:不同平臺的交叉編譯工具鏈不同,基本上晶片廠商出一個ARM晶片,就配套一個交叉編譯工具鏈。
    • PS:最好檢測板子是否支援整個工具鏈的方式就是編寫一個最簡單的hello word程式,然後到目標板子上執行,能夠執行出來就說明這個交叉編譯環境對勁兒。
  • tslib 1.4 觸控式螢幕幕支援庫:tslib1.4

交叉編譯環境配置

其實也可以不進行配置,反正後面我們在編譯器名稱的時候都用絕對路徑

在本文中我就直接寫交叉編譯環境的路徑按照我電腦上的配置了,如果配置你的話注意靈活修改路徑:

我的放在了:/home/delvis/opt/toolschain/omapl138 資料夾中

編譯tslib1.4

對觸控式螢幕訊號的獲取、校正、濾波處理,均採用開源的tslib,本文采用的tslib版本為最新的tslib1.4(可以從本文提供的連結中下載tslib1.4)。
1.將下載好的tslib1.4拷貝到/home/lz/transplant目錄下(可以根據自己的系統選擇某一目錄),然後執行解壓縮命令

tar -vxf tslib-1.4.tar.gz

切換到tslib目錄:

cd tslib

安裝交叉編譯tslib必須的一些工具(可以先檢視是否已安裝,ubuntu16.04自帶這些工具,可跳過)

sudo apt-get install autoconf
sudo
apt-get install automake sudo apt-get install libtool

2.利用指令碼寫編譯過程
在tslib資料夾下新建檔案configTslib14.sh

touch autoconfig.sh
vim autoconfig.sh
chmod 777 autoconfig.sh

內容如下:

#!/bin/sh
make clean && make distclean

echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache

CC=/home/delvis/opt/toolschain/omapl138/arm-none-linux-gnueabi

./configure --host=arm-linux --prefix=/home/delvis/opt/tslib1.4 --cache-file=arm-linux.cache

make && make install

這裡面需要注意的地方就是:

  • CC=/home/delvis/opt/toolschain/omapl138/arm-none-linux-gnueabi 這個位置一定要修改成你的交叉編譯環境的路徑。
  • –prefix=/home/delvis/opt/tslib1.4 這個是編譯好輸出的路徑,這個位置要注意了,很多網上的教程輸出到的/opt/tslib1.4 這個路徑,但是這個/opt的檔案路徑需要的許可權是root,而我們編譯執行的時候的路徑沒有使用root使用者或者沒有加sudo,所以這裡推薦不要直接輸出到/opt資料夾,而是自己的使用者資料夾。

然後執行

./autoconfig.sh

執行結束後,我們檢視一下是否安裝成功,執行命令:

ls /home/delvis/opt/tslib1.4

如果出現bin,etc,include,lib這4個目錄,如下圖所示,說明交叉編譯並安裝tslib成功。 這個先放在這裡了。這裡寫圖片描述

然後開始我們的重頭戲,交叉編譯Qt

交叉編譯QT4.8.6

交叉編譯Qt成功之後,編譯後的檔案需要應用兩個位置,一個部分需要移植到我們的開發板上,另一個部分需要把編譯成功的庫配置到我們執行QtCreator的PC機上,兩個部分只有統一了才不會出問題。

1)準備好Qt的原始碼檔案

將下載的qt-everywhere-opensource-src-4.8.6.tar.gz執行如下命令解壓:

tar -vxf qt-everywhere-opensource-src-4.8.6.tar.gz
cd qt-everywhere-opensource-src-4.8.6

2)配置原始碼檔案

建立架構資訊:

  • 進入架構資訊路徑 (qt4的原始碼路徑一般是)

cd ./qtbase/mkspecs/qws

  • 建立一個資料夾(ps: 預告以下這個檔名會影響到後面的配置,這個東西我搞了很久

mkdir omapl-g++

  • 進入這個資料夾並建立兩個檔案

cd omapl-g++; touch qmake.config qplatformdefs.h

  • 修改qplatformdefs.h ,直接把下面這個貼上上去,只有這一句。
#include "../../linux-g++/qplatformdefs.h"

如果發現在編譯過程中提示找不到qplatformdefs.h整個檔案,就在mkspec/qws資料夾的其他架構資訊的資料夾,看看人家的怎麼寫的是什麼路徑,基本上就是你的路徑。

  • 修改交叉編譯架構用到的資訊:
gedit qmake.conf

在qmake.conf檔案中需要注意以下資訊:

  • QMAKE_CFLAGS_RELEASE += O2 -march=xxxxx,就是整個march要注意自己的平臺是什麼架構的,比如說arm9基本上就是arm5te,cortexA8都有不一樣的架構,整個地方必須寫正確,否則當我們搭建好交叉編譯環境編譯Qt工程然後執行的時候,就會出現illeagle instruction. 的錯誤提示。也有些配置檔案沒有指定這個資訊,最好也寫上。

  • 我在這裡的時候,即便是配置了交叉編譯環境,還是提示arm-linux-gnueabi-gcc找不到,而我單拿出來在命令列上面 arm-linux-gnueabi-gcc -v 的時候還能顯示出來,我換了四種方法配置交叉編譯環境,重啟N次還是不見效,所以我在qmake.config檔案上做了手腳,使用絕對路徑進行配置,沒想到編譯通過了,所以我建議在qmake.config檔案上使用絕對路徑。

  • 後面的include也是,看看mkspec/qws/中的尋檔案的路徑是什麼,可能是前一層的目錄,也可能是前兩層的目錄。
#
# qmake configuration for building with arm-linux-gnueabi-g++
#


MAKEFILE_GENERATOR      = UNIX
CONFIG                 += incremental
QMAKE_INCREMENTAL_STYLE = sublib

QT_QPA_DEFAULT_PLATFORM = linuxfb #eglfs

#Compiler Flags to take advantage of the ARM architecture
#Run the linux terminal command "arch" to see the detail your target cpu arch information.
QMAKE_CFLAGS_RELEASE += -O3 -march=armv5te
QMAKE_CXXFLAGS_RELEASE += -O3 -march=armv5te

include(../../common/g++.conf)
include(../../common/linux.conf)
include(../../common/qws.conf)

# modifications to g++.conf
QMAKE_CC                = /home/delvis/opt/toolschain/omapl/arm-arago-linux-gnueabi/bin/arm-arago-linux-gnueabi-gcc
QMAKE_CXX               = /home/delvis/opt/toolschain/omapl/arm-arago-linux-gnueabi/bin/arm-arago-linux-gnueabi-g++
QMAKE_LINK              = /home/delvis/opt/toolschain/omapl/arm-arago-linux-gnueabi/bin/arm-arago-linux-gnueabi-g++
QMAKE_LINK_SHLIB        = /home/delvis/opt/toolschain/omapl/arm-arago-linux-gnueabi/bin/arm-arago-linux-gnueabi-g++

# modifications to linux.conf
QMAKE_AR                = /home/delvis/opt/toolschain/omapl/arm-arago-linux-gnueabi/bin/arm-arago-linux-gnueabi-ar cqs
QMAKE_OBJCOPY           = /home/delvis/opt/toolschain/omapl/arm-arago-linux-gnueabi/bin/arm-arago-linux-gnueabi-objcopy
QMAKE_NM                = /home/delvis/opt/toolschain/omapl/arm-arago-linux-gnueabi/bin/arm-arago-linux-gnueabi-nm -P
QMAKE_STRIP             = /home/delvis/opt/toolschain/omapl/arm-arago-linux-gnueabi/bin/arm-arago-linux-gnueabi-strip
load(qt_config)

3)建立configrue的執行檔案

回到qt的頂層目錄,建立一個指令碼檔案,用於生成Makefile,執行命令

gedit run.sh
chmod 777 run.sh

輸入下面內容並儲存:

./configure -prefix /home/delvis/work/qt-arm-4.8.6 -embedded arm -xplatform qws/omapl138-g++ -no-webkit -qt-libtiff -qt-libmng -no-neon -qtlibinfix E -nomake examples -lrt

其中

-prefix /home/delvis/work/qt-arm-4.8.6代表我們編譯完QT後要安裝地址(這個檔案需要用到兩個地方);你可以根據自己需求進行配置編譯,去掉不需要的部分,留下需要的部分,比如:增加-tslib代表QT對觸控板的支援,-I 和 -L後面分別為為第一步編譯tslib的include和lib的安裝目錄。 (這裡暫時不給這些)

執行命令:(這裡推薦用sudo,管理員許可權進行配置和編譯,很多小夥伴遇到工具鏈中有一個東西沒有呼叫的許可權,結果搞了好久才搞明白,所以這裡為了防止發生這樣的問題,我們直接使用sudo

sudo ./run.sh

上述命令自動生成Makefile檔案。

*)說幾個坑

  • 在編譯之前需要檢查一下Qt的編譯環境有沒有配置好,主要還是一下幾個方面:

    1. 在命令列輸入: export
    2. 然後輸出幾個找到QMAKESPEC這個,如果有這個,我們就要把它刪除掉,否則就會很蛋疼。我們使用unset QMAKESPEC 這個命令,把這個環境變數在當前的命令視窗下刪除,這樣就不影響我們編譯了。
  • 還有一個比較重點的坑,就是我們上面提到的mkdir omapl-g++,如果我們對Qt原始檔下的配置檔案不加修改,那麼就會報錯:undefined reference to `QInotifyFileSystemWatcherEngine::create()

    查詢相關資料,查到這個解決方法,看畫紅圈的位置,還有其他網站提供的解決方案,加入arm-linux字元,但是在我這裡依然不好使。後來我想明白了,經過實驗也是正確的,這些解決方法沒有給定原理在哪裡。如圖:

    我們在mkspec/qws中建立了資料夾(架構資訊)的名字叫做omapl-g++,所以我們這個位置需要改的資訊應符合我們這個omapl-g++這個資料夾的名字

    在Qt根目錄下:vim ./src/corelib/io/io.pri

    找到linux-*這一塊,然後改成inux-*|omap*{

    這個意思就非常明顯了,我們在mkspec/qws建立的資料夾的名字叫做omapl-g++ 那麼需要在這裡制定資訊也是要匹配這個名字的,所以增加omap*這樣的萬用字元,如果你是在mkspec/qws中建立的是zynq-g++ 那麼顯而易見那麼增加的應該是zynq*或者zynq-g*都行。

4)開始編譯

執行命令啟動編譯:(8執行緒編譯,如果你的CPU受不住8執行緒你可以用雙執行緒 -j2引數,-幾就是幾線程編譯)

sudo make -j4

我的大概能編譯10分鐘左右,此時CPU利用率達到100%,溫度如果是筆記本的話,超級高。編譯時間根據你的配置多少來決定。編譯的過程不可能是一帆風順的,總會出現各種各樣的錯誤,如果出現編譯錯誤,那麼就去百度解決。
編譯結束後,執行安裝命令:

sudo make install

我們切換到-prefix設定的目標目錄下看看是否安裝成功:

cd /home/delvis/work/qt-arm-4.8.6
ls

如果在bin目錄出現了qmake基本上就成功了。

配置PC的QtCreator

拷貝檔案到目標板並配置環境

1)傳輸Qt4.8.6到開發板

就是把我們剛才編譯的環境拷貝到我們的目標板的目錄下,可以使用FTP,可以使用OTG掛在U盤的方式,我喜歡使用SSH協議的scp命令。

sudo scp -r /home/delvis/work/qt-arm-4.8.6 [email protected]:/opt 輸入密碼之後就可以把整個資料夾傳輸到開發板上面了。

2) 配置開發板的環境

我們傳輸完畢之後,則需要在開發板上設定環境,當我們執行qt程式的時候才能尋找到這些Qt庫檔案。

開啟

vi /etc/profile

增加以下,需要注意的是QT_ROOT,寫對Qt的路徑,還有TSLIB_ROOT編譯的是tslib的路徑。

export TSLIB_ROOT=/opt/tslib1.4                                                 
export QT_ROOT=/opt/qt-arm-4.8.6                                                
export TSLIB_TSDEVICE=/dev/input/event2                                         
export TSLIB_TSEVENTTYPE=input                                                  
export TSLIB_CONFFILE=/opt/tslib1.4/etc/ts.conf                                 
export TSLIB_PLUGINDIR=/opt/tslib1.4/lib/ts                                     
export TSLIB_CONSOLEDEVICE=none                                                 
export TSLIB_FBDEVICE=/dev/fb0                                                  
export QWS_MOUSE_PROTO=tslib:/dev/input/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 

完成之後,更新一下環境。

source /etc/profile

完成配置。

3)測試

我們利用Qt Creator製作一個簡單的介面,然後編譯出可執行檔案,講可執行檔案傳輸到目標板子上面執行,我們的可執行程式叫做TestEM,需要qws引數。

./TestEM -qws

然後就可以看見介面了。

介面檔案

參考文獻:

[1] 德州儀器手冊. Building_Qt. 德州儀器WIKI.

2· 文中涉及的內容若有侵權行為,請與本人聯絡,本人會及時刪除。

3· 尊重成果,本文將用的參考文獻全部給出,向無私的工程師,愛好者致敬。

相關推薦

Linux編譯移植Qt4環境_在OMAPL138平臺

Linux編譯Qt4的環境_OMAPL138 手裡有一塊創龍OMAPL138的板子,我要在上面成功移植Qt環境和觸控式螢幕幕,這是我第二次進行Linux的Qt環境移植,發現了很多問題,需要重新整理。 我編譯了,Qt5版本以上的,結果就是不成功,總是死在PDA問

Linux編譯移植Qt5的環境_OMAPL138平臺

Linux編譯移植Qt5_OMAPL138 【導語】:昨天編譯Qt5各種失敗,各種離奇的錯誤在Google上面也搜尋不到,真是讓人“蛋疼菊緊”,今天把所有的環境全部清理乾淨,也重新解壓了Qt5.1.1的原始碼包,重新走了一遍,效果還可以,也沒有出現PDA LT

Linux編譯移植Qt5的環境_Xillinx的ZYNQ平臺

Linux編譯Qt環境 2017年的十一假期,足不出戶,一個人在教研室裡面搞Qt的移植。我手裡面有Samsung的CortexA8,Samsung的 CortexA53還有Ti的Sitara系列的AM3517的ARM,都成功的移植了Qt,然而在我接觸ZYNQ這

[CentOS_7.4]Linux編譯安裝mono環境

生效 退出 過程 .com text 可執行程序 路徑 brush linux 一 安裝mono 安裝過程: 下載mono安裝源,配置,編譯,安裝,設置環境變量。 # wget http://download.mono-project.com/sources/mon

linux編譯安裝php環境之lamp-php

1,安裝編譯需要的庫 yum install gcc gcc++ libxml2-devel 2,下載php包 到php官網http://php.net/ 選擇一個版本點進去(本人選擇的是7.19) 然後跳到 然後 複製連結:http://hk1.php

從零開始移植QT4.8.5之三--linux下交叉編譯QT執行庫

這篇文章要實現的目標是在linux下交叉編譯QT在嵌入式裝置OK6410的執行庫,最終在OK6410上執行QT演示程式。 1、觸控式螢幕庫檔案安裝tslib 首先如果嵌入式裝置上有觸控式螢幕,需要先移植tslib,這個不是本次的重點,所以我們就直接搭建編譯的時候需要的tsl

Linux系統下吉林快-三平臺開發環境搭建以及關於變量的基本操作

end 進行 相關操作 and 之前 超級用戶 oss 這樣的 常見 有問題聯系Q1446595067吉林快-三平臺開發, 是一種面向對象的解釋型計算機程序設計語言,由荷蘭人Guido van Rossum於1989年發明,第一個公開發行版發行於1991年。 Python是

Linux下Tcl和expect編譯移植

1.tcl編譯 step2: 解壓到/opt/expect/tcl8.6.8目錄下 step3: 進入 /opt/expect/tcl8.6.8/unix目錄下,執行 配置指令碼: ./confi

Linux編譯安裝軟體過程中環境變數的設定

1.編譯過程中執行“./configure”時,最好使用--prefix選項手動設定軟體的安裝目錄,如“$./configure --prefix=/home/lemon/mpich2-install”,這樣可以保證軟體安裝後能夠找到需要使用的可執行檔案及庫檔案的位置。 2.當需要指定某些依賴項時,使用--

GDB arm-linux交叉編譯移植和使用方法(特別是對於正在執行的程式或者段錯誤的程式進行分析)

測試程式碼中的test1是用來定位堆疊段錯誤,Delay函式是用來定位程式阻塞,都可以用gdb定位出來,如下:  (1)測試程式執行時首先會有個段錯誤:./gdbtest & [[email protected] user0]$ [65334.020000] pgd = c3e14000 [

vc2008/2015, linux, mingw 和 mac 環境編譯 boost_1_62_0

*** 進入 VC2008/2015 命令列:cd boost_1_62_0bootstrap.bat (生成 bjam 程式)vc2008 編譯:bjam stage --toolset=msvc-9.0 --build-type=complete --with-files

Linux + ARM驅動開發環境配置(核心配置與編譯

要想編寫驅動,首先是建立核心目錄樹。 ** 1、檢視ARM開發板的核心版本 ** uname -a 我的arm開發板的版本是3.4.39 ** 2、安裝必要的軟體包 ** sudo apt-get install build-essentia

linux核心移植編譯

在瞭解了核心及其相關知識之後,就要著手核心移植的實驗了。 使用make menuconfig出現問題請移步make: *** 沒有規則可以建立目標“menuconfig”。 停止。   Linux核心移植與編譯 1.linux核心的下載 實驗開始之前,你需要自行下載li

從零開始移植QT4.8.5之四--交叉編譯QT程式並執行在OK6410上

首先我們需要自己寫一個程式碼,什麼 程式碼都行,拿來別人的也可以。可以在windows或者linux上寫都行,我個人的習慣是在windows下面編輯程式碼,檢視執行效果,效果沒問題了在拿到linux下進行交叉編譯。 下面我們現在windows下寫一個最簡單的例子:你好世界!

linux環境下vscode 中C/C++編譯及除錯環境的搭建

0.確定安裝了GCC,沒有安裝的話sudo apt-get install gcc1.下載vscode並安裝,建議deb包2.開啟vscode,安裝擴充套件外掛,其中C/C++為必裝,提供C/C++支援Code Runner必裝,提供編譯後程序的執行環境C/C++ Snipp

Linux系統移植——裝置樹檔案編譯與反編譯

裝置樹檔案編譯與反編譯 一、裝置樹編譯 有兩種方式 1、將裝置樹檔案拷貝到核心原始碼的arch/*(處理器平臺)/boot/dts/*(廠家)/目錄下,    執行make dtbs 2、dtc -I dts -O dtb  *.dts > my.dtb 二、裝置

【泡咖啡1】linux下caffe編譯以及python環境配置手記

caffe是一個深度學習的庫,相信搞深度學習的話,不是用這個庫就是用theano吧。要想使用caffe首先第一步就是要配置好caffe的環境。在這裡,我主要說的是在debian的linux環境下如何配置好caffe的庫。因為python編寫程式比較方便,在文章最後,我還會具體說明如何配置python環境。本

linux編譯x86和arm平臺的x264

摘抄網址:http://blog.csdn.net/baliguan163/article/details/11773363 參考網址:http://blog.csdn.net/evsqiezi/article/details/8467822 參考網址:http://bl

Linux核心移植 part3:Exynos4412核心編譯

為了在exynos 4412平臺上執行系統,選擇了linux來測試,因為只是用來測試的,所以並沒有完整功能的移植,只要能啟動就可以了。兼顧方便和先進性,選擇了4.1這個長期支援版本。從清華的源上下載速度比較快。 因為選擇的是uboot啟動,執行 $ ma

【ARM】嵌入式 ARM Linux移植 USB 藍芽、交叉編譯 bluez 各種版本

一、基本說明: 目前在嵌入式 Linux 下使用 USB 藍芽模組,比較好的解決方法就是使用 Linux 官方協議棧 bluez,這同時也是 PC 及 Android 手機上使用的藍芽協議棧,可以說還是比較靠譜的。 但是!不得不說,bluez 有多種版本,如