环境
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION=“Ubuntu 16.04.3 LTS”
Linux ubuntu 4.10.0-28-generic #32~16.04.2-Ubuntu SMP Thu Jul 20 10:19:48 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
工具链
arm-himix100-linux
目标板
hi3516ev200
配置工具链
sudo vim /etc/profile

source /etc/profile
编译tslib
获取tslib源码
git clone https://github.com/kergoth/tslib
下载太慢我这里直接用的正点原子->【正点原子】阿尔法Linux开发板(A盘)-基础资料\【正点原子】阿尔法Linux开发板(A盘)-基础资料\1、例程源码\7、第三方库源码->tslib-1.21.tar.bz2
配置make
配置源码生成 Makefile,执行前先安装 automake 工具
kerson@ubuntu:~/hi3516/qt_all/tslib-1.21$ sudo apt-get install autoconf automake libtool
kerson@ubuntu:~/hi3516/qt_all/tslib-1.21$./autogen.sh

创建一个用来存放交叉编译输出的目录
kerson@ubuntu:~/hi3516/qt_all/tslib-1.21$sudo mkdir arm-tslib

配置make
kerson@ubuntu:~/hi3516/qt_all/tslib-1.21$
sudo ./configure \
CC="/opt/hisi-linux/x86-arm/arm-himix100-linux/bin/arm-himix100-linux-gcc" \
CXX=CC="/opt/hisi-linux/x86-arm/arm-himix100-linux/bin/arm-himix100-linux-g++" \
AR=/opt/hisi-linux/x86-arm/arm-himix100-linux/bin/arm-himix100-linux-ar \
READELF="/opt/hisi-linux/x86-arm/arm-himix100-linux/bin/arm-himix100-linux-readelf" \
STRIP="/opt/hisi-linux/x86-arm/arm-himix100-linux/bin-linux/aarch64-poky-linux-strip" \
--host=arm-himix100-linux \
--build=arm-himix100-linux-gnu \
--target=arm-himix100-linux \
--cache-file=arm-himix100.cache \
--prefix=/home/kerson/hi3516/qt_all/tslib-1.21/arm-tslib \
ac_cv_func_malloc_0_nonnull=yes

make编译
kerson@ubuntu:~/hi3516/qt_all/tslib-1.21$sudo make -j4


安装
kerson@ubuntu:~/hi3516/qt_all/tslib-1.21$ sudo make install


编译 Qt 源码
下载源码
wget http://download.qt.io/new_archive/qt/5.5/5.5.1/single/qt-everywhere-opensource-src-5.5.1.tar.xz
下载太慢 http://download.qt.io/new_archive/qt/5.5/5.5.1/single/ 可以win去官网下载
解压
tar xf qt-everywhere-opensource-src-5.5.1.tar.xz


指定交叉编译工具
因为qtbase/mkspecs/目录下只有linux-arm-gnueabi-g++没有arm-hisiv100-linux-g++所以我们手动拷贝一份
kerson@ubuntu:~/hi3516/qt_all/qt-everywhere-opensource-src-5.5.1$ sudo cp qtbase/mkspecs/linux-arm-gnueabi-g++/ qtbase/mkspecs/arm-hisiv100-linux-g++/ -r
编辑qmake.cnf
kerson@ubuntu:~/hi3516/qt_all/qt-everywhere-opensource-src-5.5.1$ sudo vim qtbase/mkspecs/arm-hisiv100-linux-g++/qmake.conf
QT_QPA_DEFAULT_PLATFORM = linuxfb #指定Qt显示驱动方式
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 = /opt/hisi-linux/x86-arm/arm-himix100-linux/bin/arm-himix100-linux-gcc
QMAKE_CXX = /opt/hisi-linux/x86-arm/arm-himix100-linux/bin/arm-himix100-linux-g++
QMAKE_LINK = /opt/hisi-linux/x86-arm/arm-himix100-linux/bin/arm-himix100-linux-g++
QMAKE_LINK_SHLIB = /opt/hisi-linux/x86-arm/arm-himix100-linux/bin/arm-himix100-linux-g++
# modifications to linux.conf
QMAKE_AR = /opt/hisi-linux/x86-arm/arm-himix100-linux/bin/arm-himix100-linux-ar cqs
QMAKE_OBJCOPY = /opt/hisi-linux/x86-arm/arm-himix100-linux/bin/arm-himix100-linux-objcopy
QMAKE_NM = /opt/hisi-linux/x86-arm/arm-himix100-linux/bin/arm-himix100-linux-nm -P
QMAKE_STRIP = /opt/hisi-linux/x86-arm/arm-himix100-linux/bin/arm-himix100-linux-strip
QMAKE_INCDIR += /home/kerson/hi3516/qt_all/tslib-1.21/arm-tslib/include
QMAKE_LIBDIR += /home/kerson/hi3516/qt_all/tslib-1.21/arm-tslib/lib
load(qt_config)
配置make
注意:-xplatform arm-hisiv100-linux-g++ 名字就是qtbase/mkspecs/目录下arm-hisiv100-linux-g++
kerson@ubuntu:~/hi3516/qt_all/qt-everywhere-opensource-src-5.5.1$
sudo ./configure \
-prefix /home/kerson/hi3516/qt_all/qt-everywhere-opensource-src-5.5.1/arm-qt \
-confirm-license \
-opensource \
-shared \
-release \
-make libs \
-xplatform arm-hisiv100-linux-g++ \
-optimized-qmake \
-pch \
-qt-sql-sqlite \
-qt-libjpeg \
-qt-libpng \
-qt-zlib \
-no-opengl \
-no-sse2 \
-no-openssl \
-no-cups \
-no-glib \
-no-dbus \
-no-xcb \
-no-xcursor -no-xfixes -no-xrandr -no-xrender \
-no-separate-debug-info \
-no-fontconfig \
-nomake examples -nomake tools -nomake tests -no-iconv \
-tslib \
-I/home/kerson/hi3516/qt_all/tslib-1.21/arm-tslib/include \
-L/home/kerson/hi3516/qt_all/tslib-1.21/arm-tslib/lib


执行 make 编译
kerson@ubuntu:~/hi3516/qt_all/qt-everywhere-opensource-src-5.5.1$ sudo make -j4
漫长等待中…我的电脑垃圾等了三个小时

执行 make install 安装
kerson@ubuntu:~/hi3516/qt_all/qt-everywhere-opensource-src-5.5.1$ sudo make install


搭建 Qt Creator 的交叉编译环境
需要注意
如果用的是我们配置好的arm交叉环境直接build就会生成目标板用的执行文件不用点运行



点击运行会输出

目标平台hi3516运行qt
网络文件系统
- 虚拟机
sudo vi /etc/exports
/home/kerson/hi3516/nfs *(rw,nohide,insecure,no_subtree_check,async,no_root_squash)
sudo /etc/init.d/nfs-kernel-server restart

因为我目标机器使用的是wifi所以这里选择wifi

把我们前面配置输出/home/kerson/hi3516/qt_all/qt-everywhere-opensource-src-5.5.1/目录下的arm-qt和交叉编译的demo拷贝到nfs
hi3516ev200目标板
可以先与虚拟机互ping一下看是否连通
挂载
ifconfig eth0 192.168.1.16 netmask 255.255.255.0 up
mount -t nfs -o nolock 192.168.1.103:/home/kerson/hi3516/nfs /mnt
mount -t nfs -o nolock 192.168.1.26:/home/kerson/hi3516/nfs /mnt
sudo cp sample_venc /home/kerson/hi3516/nfs/testvenc/
配置环境
vi /etc/profile
export TSLIB_ROOT=/mmt/arm-tslib
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_TSDEVICE=/dev/input/event1
export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf
export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts
export TSLIB_CALIBFILE=/etc/pointercal
export LD_PRELOAD=$TSLIB_ROOT/lib/libts.so
export QT_QPA_FB_TSLIB=1
export QT_ROOT=/mnt/arm-qt
export QT_QPA_GENERIC_PLUGINS=tslib:/dev/input/event1:edevmouse:/dev/input/event3
export QT_QPA_FONTDIR=/mnt/arm-qt/lib/fonts
export QT_QPA_PLATFORM_PLUGIN_PATH=$QT_ROOT/plugins
export QT_QPA_PLATFORM=linuxfb:tty=/dev/fb0
export QT_PLUGIN_PATH=$QT_ROOT/plugins
export LD_LIBRARY_PATH=$QT_ROOT/lib:$QT_ROOT/plugins/platforms
#这里特别关键不能路径不能出错
运行出错
This application failed to start because it could not find or load the Qt platform plugin "fb0".
Available platform plugins are: linuxfb, minimal, offscreen.
Reinstalling the application may fix this problem.
Aborted
//出错位置是在下面三个文件,通过在里面添加打印信息,发现是我配置了触屏但是我又没有屏幕驱动
sudo vim qtbase/src/gui/kernel/qplatformintegrationfactory.cpp
sudo vim qtbase/src/gui/kernel/qguiapplication.cpp
sudo vim qtbase/src/corelib/kernel/qcoreapplication.cpp
从新交叉编译不带触摸
./configure \
-prefix $PWD/qt-arm \
-confirm-license \
-opensource \
-shared \
-release \
-make libs \
-xplatform arm-hisiv100-linux-g++ \
-optimized-qmake \
-pch \
-qt-sql-sqlite \
-qt-libjpeg \
-qt-libpng \
-qt-zlib \
-no-opengl \
-no-sse2 \
-no-openssl \
-no-cups \
-no-glib \
-no-dbus \
-no-xcb \
-no-xcursor -no-xfixes -no-xrandr -no-xrender \
-no-separate-debug-info \
-no-fontconfig \
-nomake examples -nomake tools -nomake tests -no-iconv
#qmake.conf改成在从新上面编译
MAKEFILE_GENERATOR = UNIX
CONFIG += incremental
QMAKE_INCREMENTAL_STYLE = sublib
include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)
# modifications to g++.conf
QMAKE_CC = /opt/hisi-linux/x86-arm/arm-himix100-linux/bin/arm-himix100-linux-gcc
QMAKE_CXX = /opt/hisi-linux/x86-arm/arm-himix100-linux/bin/arm-himix100-linux-g++
QMAKE_LINK = /opt/hisi-linux/x86-arm/arm-himix100-linux/bin/arm-himix100-linux-g++
QMAKE_LINK_SHLIB = /opt/hisi-linux/x86-arm/arm-himix100-linux/bin/arm-himix100-linux-g++
# modifications to linux.conf
QMAKE_AR = /opt/hisi-linux/x86-arm/arm-himix100-linux/bin/arm-himix100-linux-ar cqs
QMAKE_OBJCOPY = /opt/hisi-linux/x86-arm/arm-himix100-linux/bin/arm-himix100-linux-objcopy
QMAKE_NM = /opt/hisi-linux/x86-arm/arm-himix100-linux/bin/arm-himix100-linux-nm -P
QMAKE_STRIP = /opt/hisi-linux/x86-arm/arm-himix100-linux/bin/arm-himix100-linux-strip
load(qt_config)
从新运行就成功了,当时网络跑到比较慢可以用U盘
挂载U盘
- vfat方式挂载(这里有个问题就是vfat不能软链接会出下面错误所以我们用GPated改成ext4)
mount -t vfat /dev/mmcblk0p1 /mnt/sd
虚拟机把qt和tslib压缩成tar拷贝到SD卡解压出错
# tar xvf arm-tsli.tar
tar: can't create symlink from arm-tslib/lib/libts.so.0 to libts.so.0.10.3: Operation not permitted
查看文件系统格式
# df -T
Filesystem Type 1K-blocks Used Available Use% Mounted on
/dev/root yaffs2 125440 33276 92164 27% /
devtmpfs devtmpfs 16504 0 16504 0% /dev
/dev/mmcblk0p1 vfat 15540224 313000 15227224 2% /mnt/sd
- 改为ext4格式


- 虚拟机挂载U盘
https://blog.youkuaiyun.com/dbdd_cf/article/details/88864381
sudo fdisk -l

sudo mount /dev/sdb1 /mnt/usb/
- ext4格式挂载目标机
mount -t ext4 /dev/mmcblk0p1 /mnt/sd
编译mmp(这不是必须我这里是用到)
选择linux版本的sdk
kerson@ubuntu:/mnt/hgfs/ubuntushare/Hi3516/Hi3516EV200_SDK_V1.0.1.0/mpp/sample$ ls
audio hifb lsc_online_cali region uvc_app
awb_online_calibration ir_auto Makefile scene_auto venc
bcd ive Makefile.param tde vio
common ivp quickstart up_linux.mak vo
进入要编译的目录运行make 例如摄像头venc
kerson@ubuntu:/mnt/hgfs/ubuntushare/Hi3516/Hi3516EV200_SDK_V1.0.1.0/mpp/sample/venc$ make