移植QT5 4 0到ARM開發板

2021-07-11 22:40:40 字數 4950 閱讀 6301

qt5中不再用到qt4中的視窗系統qws++,而是使用qpa系統,二者之間的差異還不清楚,但是程式執行時不需要再加上引數-qws了。而這個特性也導致qt5與qt4的移植過程有一些區別,這裡記錄一下。

tar -zxvf qt-everywhere

-opensource

-src

-5.4

.0.tar.gz

解壓到某些路徑下可能需要root許可權,我的路徑是/opt/qt-everywhere-opensource-src-5.4.0,這裡的解壓路徑關聯到後面qtcreator中kits的路徑配置。

修改/etc/profile檔案,在系統環境變數path中新增交叉編譯器的路徑。

export path=/opt/friendlyarm/toolschain/4.5.1/bin:$path
這是我在/etc/profile檔案末尾新增的內容,其中/opt/friendlyarm/toolschain/4.5.1/bin是交叉編譯器的路徑。配置完成後使用命令

source /etc/profile
使得環境變數立即生效。配置完成後可以通過

echo

$path

檢視交叉編譯器的路徑是否已經新增到系統環境變數path中。

可以檢視交叉編譯器的版本號:

arm-linux

-gcc

-v

如果能夠正常顯示出交叉編譯器的版本號,則說明配置成功。

qt5中針對不同的目標平台都有相應的配置資料夾,只需修改對應目標平台資料夾中的配置檔案qmake.conf。

cd qt-everywhere

-opensource

-src

-5.4

.0vim 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 = sublib

#define the architecture of arm/定義arm的架構

qt_qpa_platform = linuxfb:fb=/dev/fb0

qmake_cflags_release += -o2 -march=armv7-a

qmake_cxxflags_release += -o2 -march=armv7-a

#end

include(../common/linux.conf)

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

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

# modifications to g++.conf

qmake_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.conf

qmake_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)

這裡我修改了兩個地方,一是定義了arm的架構,其中:qt_qpa_platform是指定qpa平台的外掛程式,這裡選擇的是linuxfb,引數-o是編譯器提供的優化選項,如-o、-o1、-o2、-o3等,代表不同的優化級別,引數-march後面指定的是目標處理器的架構(可能指定不同的架構會呼叫不同的指令集,猜的~)。另外乙個改動的地方就是將下面g++.conf和linux.conf中的引數值中加上了none,如arm-none-linux-gnueabi-gcc,這是我選擇的交叉編譯器,可以根據自身的情況修改。

配置qt可以通過原始碼包中configure指令碼來完成,執行configure指令碼後會得到makefile檔案,然後通過make和make install命令完成編譯和安裝。這裡我編寫了乙個指令碼來實現配置的步驟。

! /bin/bash

echo "build qt5 for embedded linux, author: lipengxiang"

mkdir qt5.4

.0_arm

cd qt5.4

.0_arm

mkdir qt5.4

.0_arm_install

/opt/qt-everywhere

-opensource

-src

-5.4

.0/configure \-v\

-prefix /opt/qt5.4

.0_arm/qt5.4

.0_arm_install \

-release

\-make libs \

-xplatform linux-arm

-gnueabi

-g++

\-optimized

-qmake

\-pch

\-qt

-sql

-sqlite

\-qt

-zlib

\-no

-opengl

\-no

-sse2

\-no

-openssl

\-no

-nis

\-no

-cups

\-no

-glib

\-no

-pkg

-config

\-no

-xcursor

-no-xfixes

-no-xrandr

-no-xrender

\-no

-separate

-debug

-info

\-nomake examples -nomake tools

從shell指令碼中可以看到,引數-prefix指定了檔案的安裝路徑,我的安裝路徑是/opt/qt5.4.0_arm/qt5.4.0_arm_install,引數-xplatform指定了目標平台為linux-arm-gnueabi-g++。執行這個指令碼後就會得到makefile檔案,下一步就可以進行編譯了。

終於可以編譯了,執行make命令,然後開始漫長的編譯過程,整個過程持續大概2個小時,i7處理器可能會快些~在make的過程中可能會出現報錯,如:

解決辦法是將報錯的cpp檔案中包含』qopenglcontext』的函式語句注釋掉。網上說這個是5.4.0版本的bug,在5.4.1之後修復了。

解決了這個問題後就可以繼續make了,一直到結束,然後就是激動人心的make install。到這裡,qt的交叉編譯就結束了。

將編譯安裝得到的lib、plugins拷貝到開發板中,lib中存放的是qt程式執行所需的動態庫檔案,plugins中存放的應該是所需的外掛程式。由於u盤掛載比較麻煩,這裡選擇使用scp命令,通過網路傳輸。

scp -r lib plugins [email protected]

:/opt/qt5.4.0_arm_install

其中root是開發板的使用者名稱,192.168.1.119是其ip位址。

在確保主機和開發板能互相ping通的情況下,通過ssh遠端登入開發板。

ssh [email protected]
修改/etc/profile檔案,設定開發板的環境變數,檔案末尾新增的內容如下。

export ld_library_path=/opt/qt5.4.0_arm_install/lib

export qt_qpa_platform_plugin_path=/opt/qt5.4.0_arm_install/plugins

export qt_qpa_platform=linuxfb:fb=/dev/fb0

export qt_qpa_fontdir=/opt/qt5.4.0_arm_install/lib/fonts

同樣,使用source命令使其立即生效。

source /etc/profile
到這裡,所有的交叉編譯和移植的過程就結束了。第一次使用markdown來寫文章,感覺還挺好用的~

移植ubuntu core到Arm開發板

最初是想把整個ubuntu移植到mx51開發板,因為專案不需要執行桌面系統,所以只移植了乙個基本的ubuntu core系統 這個映象就是乙個rootfs,可以作為根檔案系統使用。2.把映象燒寫到開發板的乙個分割槽上 3.我的arm開發板是mx51,修改uboot啟動引數如下 set bootarg...

qwt移植到arm開發板

arm版本的qwt和x86一樣,只需要改幾個地方即可。1 首先設定編譯工具鏈環境變數 path usr local arm 4.4.1 bin path 2 qmake 生成arm版本的makefile 在原始碼的qwt 6.1.0目錄下執行 opt qt 4.7.1 bin qmake 3 注意 ...

移植SQLite到ARM開發板

最近在搞移植資料庫到開發板,上網一搜都是sqlite 所以就用這個吧,記錄一下,特別簡單,首先要確保開發環境是好的,交叉編譯器,nfs檔案系統掛載等,拷貝到ubutun系統裡,解壓 tar xzvf sqlite autoconf 3080403.tar.gz 進入目錄 cd sqlite auto...