- 虚拟机:
ubuntu16.04
,硬盘空间尽量大一些,20G
略微有点小,开发板根文件系统已经做好。- 交叉编译环境:
arm-linux-gcc
使用4.8
版本以上,否则对c++11
支持度不好,这里使用arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
QT5.7
源码包:针对嵌入式平台编译,编译完成移植到开发板用于支持运行QT
程序运行QT5.7
桌面版:安装在虚拟机上,用来交叉编译QT
程序tslib1.4
:触摸屏库用于支持触摸屏- 开发板内核为光盘提供
linux3.5
内核,u-boot
也为官方提供版本
资源链接:
交叉编译工具:http://www.veryarm.com/arm-none-linux-gnueabi-gcc
桌面版QT5.7:http://download.qt.io/archive/qt/
QT5.7源码:http://vdisk.weibo.com/s/AcUHxOERV2k0?sudaref=www.baidu.com
talib1.4:http://vdisk.weibo.com/s/AcUHxOERV2k0?sudaref=www.baidu.com
- 将源码包
arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
拷贝到虚拟机- 执行
tar xvf arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
进行解压。- 解压完毕得到
arm-2014.05
文件夹,将文件夹拷贝到虚拟机/opt
目录下- 编辑虚拟机
/etc/profile
文件,在文件末尾添加环境变量,关闭文件- 执行
source /etc/profile
,更新环境变量,交叉编译环境安装完毕- 键盘输入
arm-none-linux-gnueabi-gcc
使用tab
键能自动补齐证明安装成功,但是arm-none-linux-gnueabi-gcc -v
提示没有文件或者目录,由于ubuntu16
是64
位系统,这个原因就是缺少32
位库支持- 安装
32
位库:sudo apt install lib32ncurses5 lib32z1
- 执行
arm-none-linux-gnueabi-gcc -v
显示gcc
版本4.8.3
即配置成功
root@thinkpad:/myfile/rootfs# arm-none-linux-gnueabi-gcc -vUsing built-in specs.
COLLECT_GCC=arm-none-linux-gnueabi-gcc
COLLECT_LTO_WRAPPER=/opt/arm-2014.05/bin/../libexec/gcc/arm-none-linux-gnueabi/4.8.3/lto-wrapper
~·················/arm-linux-2014.05-rel/install/opt/codesourcery/arm-none-linux-gnueabi/bin SED=sed
Thread model: posix
gcc version 4.8.3 20140320 (prerelease) (Sourcery CodeBench Lite 2014.05-29)
安装前的必要安装
sudo apt-get install autoconf
sudo apt-get install automake
sudo apt-get install libtool
将
tslib-1.4.tar.gz
拷贝至虚拟机,进行解压,进入解压目录tslib
,执行下列操作
tar xzf tslib-1.4.tar.gz
cd tslib
./autogen.sh
echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache
CC=/opt/arm-2014.05/bin/arm-none-linux-gnueabi-gcc ./configure --host=arm-linux --prefix=/opt/tslib1.4 --cache-file=arm-linux.cache
编译并进行安装
make
make install
在
/opt
目录下可以看到tslib1.4
文件夹证明安装成功,进入/opt
目录下的tslib.4
文件夹下的etc
文件夹,修改/etc/ts.conf
第1
行(去掉#
号和第一个空格):
# module_raw input
改为:
module_raw input
将
qt-everywhere-opensource-src-5.7.0.tar.gz
拷贝至虚拟机,进行解压
tar -vxf qt-everywhere-opensource-src-5.7.0.tar.gz
进入解压完成的目录
qt-everywhere-opensource-src-5.7.0
,编辑qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf
,指定qt
编译适配平台与编译工具
cd qt-everywhere-opensource-src-5.7.0
gedit qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf
修改为以下内容:
#
# qmake configuration for building with arm-linux-gnueabi-g++
#
MAKEFILE_GENERATOR = UNIX
CONFIG += incremental
QMAKE_INCREMENTAL_STYLE = sublib
QT_QPA_DEFAULT_PLATFORM = linux #eglfs
QMAKE_CFLAGS_RELEASE += -O2 -march=armv7-a
QMAKE_CXXFLAGS_RELEASE += -O2 -march=armv7-a
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)
创建一个脚本文件,用于生成
Makefile
,gedit autoConfigure.sh
,主要目的就是对qt
进行裁剪和一些安装配置,脚本内容如下:
#!/bin/sh
./configure \
-v \
-prefix /opt/arm-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/opt/tslib1.4/include \
-L/opt/tslib1.4/lib
exit
修改脚本运行权限,执行脚本,完成后在文件夹下生成
Makefile
chmod +x autoConfigure.sh
./autoConfigure.sh
执行完毕后,生成
Makefile
,执行make
进行编译,编译过程很长,耐心等待,完毕后,执行make install
,这个时间没那么长了。
root@thinkpad:/myfile/ducument/qt-everywhere-opensource-src-5.7.0# ls /opt
arm-2014.05 arm-qt5.7.0 Qt5.7.0 tslib1.4
安装一些库用来支持
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/share/fonts/truetype/ubuntu-font-family
下的字体文件,复制到/opt/arm-qt5.7.0/lib/fonts
目录下.
将虚拟机/opt/arm-qt5.7.0
和/opt/tslib1.4
拷贝到开发板的文件系统中对应的目录中
添加以下内容到开发板目录下的/etc/profile
文件
export QT_ROOT=/opt/arm-qt5.7.0
export TSLIB_ROOT=/opt/tslib1.4
export TSLIB_TSDEVICE=/dev/event0
export TSLIB_TSEVENTTYPE=input
export TSLIB_CALIBFILE=/opt/tslib1.4/etc/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:$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
安装桌面版
QT5.7
或更高版本到虚拟机。打开工具->选项->启动和运行选项
点击Dbudders
选项,将gdb
调试器选为交叉编译器,并起一个别名
点击编译器选项卡将编译器选择为我们的交叉编译器,并起一个别名
点击Qt Versions
选项卡,选择qmake
为源码编译的qmake
路径,选择完后下面会提示该版本为嵌入式版本
点击构建套件选项卡,将qt版本、编译器、调试器指定为我们的嵌入式版本、交叉编译版本,起一个别名,并将该项设置为默认。
编辑一个示例程序进行验证,随便拖几个控件
将示例程序编译完成后,在代码目录生成可执行程序,将该文件复制到开发板目录并运行。
开发板运行的程序,在分辨率方面与上位机观感不同,示例程序建工程时选择的是窗口桌面应用也就是经典的
windows
应用样式,开发板属于嵌入式设备,运行时不会显示最大化最小化关闭按钮这是正常现象,但不知道这是不是造成观感不一致的原因,还有tslib1.4
触摸屏库对电容屏的支持不知道怎样验证是否成功,由于最近还没开始学习QT
,对该移植过程的验证只能到这里,估计移植过程问题不大,顶多是修改开发板/etc/profile
对一些功能或者设备进行增删,但是tslib
对触控屏的支持问题,本人能力有限暂时无法解决,如果有小伙伴有幸读到这篇文章,欢迎提出宝贵意见。非常感谢。