移植QT5.7到tiny4412开发板

移植前的准备

  • 虚拟机: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 提示没有文件或者目录,由于ubuntu1664位系统,这个原因就是缺少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) 

tslib1.4安装

安装前的必要安装

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.conf1行(去掉#号和第一个空格):
# module_raw input
改为:
module_raw input


qt5.7源码安装

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)

创建一个脚本文件,用于生成Makefilegedit 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调试器选为交叉编译器,并起一个别名
移植QT5.7到tiny4412开发板_第1张图片
点击编译器选项卡将编译器选择为我们的交叉编译器,并起一个别名
移植QT5.7到tiny4412开发板_第2张图片
点击Qt Versions选项卡,选择qmake为源码编译的qmake路径,选择完后下面会提示该版本为嵌入式版本
移植QT5.7到tiny4412开发板_第3张图片
点击构建套件选项卡,将qt版本、编译器、调试器指定为我们的嵌入式版本、交叉编译版本,起一个别名,并将该项设置为默认。
移植QT5.7到tiny4412开发板_第4张图片
编辑一个示例程序进行验证,随便拖几个控件
移植QT5.7到tiny4412开发板_第5张图片
将示例程序编译完成后,在代码目录生成可执行程序,将该文件复制到开发板目录并运行。
移植QT5.7到tiny4412开发板_第6张图片


存在的问题

开发板运行的程序,在分辨率方面与上位机观感不同,示例程序建工程时选择的是窗口桌面应用也就是经典的windows应用样式,开发板属于嵌入式设备,运行时不会显示最大化最小化关闭按钮这是正常现象,但不知道这是不是造成观感不一致的原因,还有tslib1.4触摸屏库对电容屏的支持不知道怎样验证是否成功,由于最近还没开始学习QT,对该移植过程的验证只能到这里,估计移植过程问题不大,顶多是修改开发板/etc/profile对一些功能或者设备进行增删,但是tslib对触控屏的支持问题,本人能力有限暂时无法解决,如果有小伙伴有幸读到这篇文章,欢迎提出宝贵意见。非常感谢。

你可能感兴趣的:(个人笔记,随笔,tiny4412,linux,Qt,linux函数练习)