海思 hhi3516ev200 qt5移植

环境

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

1600323258243

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  
1600323783041

创建一个用来存放交叉编译输出的目录

 kerson@ubuntu:~/hi3516/qt_all/tslib-1.21$sudo mkdir arm-tslib  
1600323875858

配置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
1600324935803

make编译

 kerson@ubuntu:~/hi3516/qt_all/tslib-1.21$sudo make -j4  
1600325058535 1600325031235

安装

  kerson@ubuntu:~/hi3516/qt_all/tslib-1.21$ sudo make install  
1600325137190 1600325230426

编译 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  
1600331855971 1600332013592

指定交叉编译工具

因为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
1600335259183 1600335285520

执行 make 编译

kerson@ubuntu:~/hi3516/qt_all/qt-everywhere-opensource-src-5.5.1$ sudo make -j4

漫长等待中…我的电脑垃圾等了三个小时

1600333329599

执行 make install 安装

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

1600333384370 1600333459175

搭建 Qt Creator 的交叉编译环境

需要注意

如果用的是我们配置好的arm交叉环境直接build就会生成目标板用的执行文件不用点运行

1600333653910 1600333607821 1600333794539

点击运行会输出

1600333821365

目标平台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
1600528089966

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

1600528192719

把我们前面配置输出/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格式
1600432185032 1600432238693
  • 虚拟机挂载U盘

https://blog.youkuaiyun.com/dbdd_cf/article/details/88864381

sudo fdisk -l
1600428768734
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

成功预览

1600997194946

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值