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