海思Hi3559AV100移植Qt5.9.9(二)

目录

前言

1 准备

2 编译tsllib

3 编译Qt

4 总结


前言

海思Hi3559AV100平台性能强悍,支持H264、H265 编码,分辨率可达16K,帧率可达120fps,应用于安防、无人机、智能机器人、人工智能、教育、车载设备、会议等诸多行业。但海思官方SDK并没有提供GUI组件,用户开发图形界面应用十分不便。

Qt 是一个跨平台的C++应用程序开发框架。它提供给开发者建立图形用户界面所需的功能,广泛用于开发图形用户界面程序,也可用于开发非图形用户界面(比如命令行界面)程序。Qt是完全面向对象的,很容易扩展,并且允许真正地组件编程。如果将Qt移植到Hi3559A平台,将极大地方便用户开发图形应用程序。

本系列将以Qt5.9.9为例详细介绍移植Qt全过程,包括:

  1. 从零搭建海思交叉编译环境;
  2. 交叉编译Qt5.9.9;
  3. H3559AV100平台运行Qt程序;
  4. 如何使Qt支持QML(GPU/EGLFS);
  5. 如何支持多点触控。

本文是Hi3559AV100移植Qt系列的第二篇,主要介绍如何对tslib、Qt源码进行配置和编译,最终生成支持tslib单点触摸的Qt库。

【参考】

  1. 海思Hi3559av100移植Qt5.9.7https://blog.csdn.net/year12/article/details/96170989
  2. 海思3559A QT 5.12移植(带webengine 和 opengl es)https://blog.csdn.net/weixin_30273175/article/details/95689400

1 准备

Qt源码:https://download.qt.io/archive/qt/5.9/5.9.9/single/qt-everywhere-opensource-src-5.9.9.tar.xz

tslib源码:https://github.com/libts/tslib

2 编译tsllib

tslib是一个跨平台的库,它提供了对触摸屏设备的访问以及对其输入事件进行过滤校准的能力。tslib在电阻触摸屏中使用很多,现代的电容触摸屏相对较少。个人认为其原因是电容触摸屏自带IC芯片处理输出的事件已经经过处理,输出已是可信的事件,无需再二次处理。tslib本身是支持多点触控,但是很可惜Qt对tslib的适配只支持单点触控,本系列文章最后一篇会介绍如何支持多点触控,以及在实现多点触控过程中遇到的问题和解决方法。

话不多说,回归正题。

1. 解压源码:unzip tslib-1.22.zip

2. 安装编译工具

virtual-machine:~/work/tslib-1.22$ sudo apt-get install autoconf automake libtool

2. 配置与编译

virtual-machine:~/work/tslib-1.22$ ./autogen.sh 
virtual-machine:~/work/tslib-1.22$ ./configure --prefix=/opt/tslib_hi3559av100 --host=arm-linux CC=/opt/hisi-linux/x86-arm/aarch64-himix100-linux/bin/aarch64-himix100-linux-gcc 
virtual-machine:~/work/tslib-1.22$ make 
virtual-machine:~/work/tslib-1.22$ sudo make install

install之后的结果:

opt/tslib_hi3559av100/
├── bin
│   ├── ts_calibrate
│   ├── ts_conf
│   ├── ts_finddev
│   ├── ts_harvest
│   ├── ts_print
│   ├── ts_print_mt
│   ├── ts_print_raw
│   ├── ts_test
│   ├── ts_test_mt
│   ├── ts_uinput
│   └── ts_verify
├── etc
│   └── ts.conf
├── include
│   └── tslib.h
├── lib
│   ├── libts.la
│   ├── libts.so -> libts.so.0.10.4
│   ├── libts.so.0 -> libts.so.0.10.4
│   ├── libts.so.0.10.4
│   ├── pkgconfig
│   │   └── tslib.pc
│   └── ts
│       ├── debounce.la
│       ├── debounce.so
│       ├── dejitter.la
│       ├── dejitter.so
│       ├── evthres.la
│       ├── evthres.so
│       ├── iir.la
│       ├── iir.so
│       ├── input.la
│       ├── input.so
│       ├── invert.la
│       ├── invert.so
│       ├── linear.la
│       ├── linear.so
│       ├── lowpass.la
│       ├── lowpass.so
│       ├── median.la
│       ├── median.so
│       ├── pthres.la
│       ├── pthres.so
│       ├── skip.la
│       ├── skip.so
│       ├── touchkit.la
│       ├── touchkit.so
│       ├── variance.la
│       ├── variance.so
│       ├── waveshare.la
│       └── waveshare.so
└── share
    └── man
        ├── man1
        │   ├── ts_calibrate.1
        │   ├── ts_conf.1
        │   ├── ts_finddev.1
        │   ├── ts_harvest.1
        │   ├── ts_print.1
        │   ├── ts_print_mt.1
        │   ├── ts_print_raw.1
        │   ├── ts_test.1
        │   ├── ts_test_mt.1
        │   ├── ts_uinput.1
        │   └── ts_verify.1
        ├── man3
        │   ├── ts_close.3
        │   ├── ts_close_restricted.3
        │   ├── ts_conf_get.3
        │   ├── ts_config.3
        │   ├── ts_conf_set.3
        │   ├── ts_error_fn.3
        │   ├── ts_fd.3
        │   ├── ts_get_eventpath.3
        │   ├── ts_libversion.3
        │   ├── tslib_version.3
        │   ├── ts_open.3
        │   ├── ts_open_restricted.3
        │   ├── ts_print_ascii_logo.3
        │   ├── ts_read.3
        │   ├── ts_read_mt.3
        │   ├── ts_read_raw.3
        │   ├── ts_read_raw_mt.3
        │   └── ts_setup.3
        └── man5
            └── ts.conf.5

3 编译Qt

1. 解压源码:tar xvf qt-everywhere-opensource-src-5.9.9.tar.xz

解压源码后,工作目录如下:

virtual-machine:~/work$ pwd
/home/xiaoli/work
virtual-machine:~/work$ ls
aarch64-himix100-linux            qt-everywhere-opensource-src-5.9.9
aarch64-himix100-linux.tgz        qt-everywhere-opensource-src-5.9.9.tar.xz
gcc-arm-none-eabi-4_9-2015q3      tslib-1.22
gcc-arm-none-eabi-4_9-2015q3.tgz  tslib-1.22.zip
Hi3559AV100_SDK_V2.0.2.0

我的环境下Hi3559a的sdk安装路径为/home/xiaoli/work/Hi3559AV100_SDK_V2.0.2.0,这个路径后续需要使用

2. 修改qmake.conf

基于现有的linux-arm-gnueabi目标平台,新建一个himix平台配置cp -dr linux-arm-gnueabi-g++ linux-aarch64-himix100-g++

virtual-machine:~/work$ cd qt-everywhere-opensource-src-5.9.9/qtbase/mkspecs/
virtual-machine:~/work/qt-everywhere-opensource-src-5.9.9/qtbase/mkspecs$ cp -dr linux-arm-gnueabi-g++ linux-aarch64-himix100-g++

将linux-aarch64-himix100-g++下的qmake.conf改为:

【注意】

/home/xiaoli/work/Hi3559AV100_SDK_V2.0.2.0需要根据实际轻快改成海思SDK对应的安装目录

#
# qmake configuration for building with aarch64-himix100-linux-g++
#

MAKEFILE_GENERATOR      = UNIX
CONFIG                 += incremental
QMAKE_INCREMENTAL_STYLE = sublib

include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)

DEFINES += EGL_FBDEV

# gpu  注意路径为Hi3559A的SDK目录
QMAKE_INCDIR_EGL += /home/xiaoli/work/Hi3559AV100_SDK_V2.0.2.0/mpp/component/gpu/release/include
QMAKE_LIBDIR_EGL += /home/xiaoli/work/Hi3559AV100_SDK_V2.0.2.0/mpp/component/gpu/release/lib
QMAKE_LIBS_EGL   += -lmali
QMAKE_INCDIR_OPENGL_ES2 += /home/xiaoli/work/Hi3559AV100_SDK_V2.0.2.0/mpp/component/gpu/release/include
QMAKE_LIBDIR_OPENGL_ES2 += /home/xiaoli/work/Hi3559AV100_SDK_V2.0.2.0/mpp/component/gpu/release/lib
QMAKE_LIBS_OPENGL_ES2 += -lmali
EGLFS_DEVICE_INTEGRATION = eglfs_mali

# modifications to g++.conf
QMAKE_CC                = aarch64-himix100-linux-gcc
QMAKE_CXX               = aarch64-himix100-linux-g++
QMAKE_LINK              = aarch64-himix100-linux-g++
QMAKE_LINK_SHLIB        = aarch64-himix100-linux-g++

# modifications to linux.conf
QMAKE_AR                = aarch64-himix100-linux-ar cqs
QMAKE_OBJCOPY           = aarch64-himix100-linux-objcopy
QMAKE_NM                = aarch64-himix100-linux-nm -P
QMAKE_STRIP             = aarch64-himix100-linux-strip
load(qt_config)

3. 编译配置

virtual-machine:~/work/qt-everywhere-opensource-src-5.9.9$ pwd
/home/raigor/work/qt-everywhere-opensource-src-5.9.9
virtual-machine:~/work/qt-everywhere-opensource-src-5.9.9$ ./configure -prefix /opt/qt5.9.9_hi3559a -opensource -confirm-license -release \
> -strip -eglfs -linuxfb -qt-zlib -qt-libpng -qt-libjpeg -qt-freetype \
> -no-rpath -no-pch -no-avx -no-openssl -no-cups -no-dbus -no-pkg-config \
> -no-glib -no-iconv -xplatform linux-aarch64-himix100-g++ -make libs -opengl es2 \
> -nomake examples -nomake tools -qt-sqlite -tslib -I/opt/tslib_hi3559av100/include \
> -L/opt/tslib_hi3559av100/lib

配置结果:

Building on: linux-g++ (x86_64, CPU features: mmx sse sse2)
Building for: linux-aarch64-himix100-g++ (arm64, CPU features: neon)
Configuration: cross_compile compile_examples enable_new_dtags largefile neon shared release c++11 c++14 c++1z concurrent no-pkg-config reduce_exports stl
Build options:
  Mode ................................... release
  Optimize release build for size ........ no
  Building shared libraries .............. yes
  Using C++ standard ..................... C++1z
  Using ccache ........................... no
  Using gold linker ...................... no
  Using new DTAGS ........................ yes
  Using precompiled headers .............. no
  Using LTCG ............................. no
  Target compiler supports:
    NEON ................................. yes
  Build parts ............................ libs
Qt modules and options:
  Qt Concurrent .......................... yes
  Qt D-Bus ............................... no
  Qt D-Bus directly linked to libdbus .... no
  Qt Gui ................................. yes
  Qt Network ............................. yes
  Qt Sql ................................. yes
  Qt Testlib ............................. yes
  Qt Widgets ............................. yes
  Qt Xml ................................. yes
Support enabled for:
  Using pkg-config ....................... no
  QML debugging .......................... yes
  udev ................................... no
  Using system zlib ...................... no
Qt Core:
  DoubleConversion ....................... yes
    Using system DoubleConversion ........ no
  GLib ................................... no
  iconv .................................. no
  ICU .................................... no
  Logging backends:
    journald ............................. no
    syslog ............................... no
    slog2 ................................ no
  Using system PCRE2 ..................... no
Qt Network:
  getaddrinfo() .......................... yes
  getifaddrs() ........................... yes
  IPv6 ifname ............................ yes
  libproxy ............................... no
  OpenSSL ................................ no
    Qt directly linked to OpenSSL ........ no
  SCTP ................................... no
  Use system proxies ..................... yes
Qt Gui:
  Accessibility .......................... yes
  FreeType ............................... yes
    Using system FreeType ................ no
  HarfBuzz ............................... yes
    Using system HarfBuzz ................ no
  Fontconfig ............................. no
  Image formats:
    GIF .................................. yes
    ICO .................................. yes
    JPEG ................................. yes
      Using system libjpeg ............... no
    PNG .................................. yes
      Using system libpng ................ no
  EGL .................................... yes
  OpenVG ................................. no
  OpenGL:
    Desktop OpenGL ....................... no
    OpenGL ES 2.0 ........................ yes
    OpenGL ES 3.0 ........................ yes
    OpenGL ES 3.1 ........................ yes
  Session Management ..................... yes
Features used by QPA backends:
  evdev .................................. yes
  libinput ............................... no
  INTEGRITY HID .......................... no
  mtdev .................................. no
  tslib .................................. yes
  xkbcommon-evdev ........................ no
QPA backends:
  DirectFB ............................... no
  EGLFS .................................. yes
  EGLFS details:
    EGLFS OpenWFD ........................ no
    EGLFS i.Mx6 .......................... no
    EGLFS i.Mx6 Wayland .................. no
    EGLFS RCAR ........................... no
    EGLFS EGLDevice ...................... no
    EGLFS GBM ............................ no
    EGLFS Mali ........................... no
    EGLFS Raspberry Pi ................... no
    EGL on X11 ........................... no
  LinuxFB ................................ yes
  VNC .................................... yes
  Mir client ............................. no
Qt Widgets:
  GTK+ ................................... no
  Styles ................................. Fusion Windows
Qt PrintSupport:
  CUPS ................................... no
Qt Sql:
  DB2 (IBM) .............................. no
  InterBase .............................. no
  MySql .................................. no
  OCI (Oracle) ........................... no
  ODBC ................................... no
  PostgreSQL ............................. no
  SQLite2 ................................ no
  SQLite ................................. yes
    Using system provided SQLite ......... no
  TDS (Sybase) ........................... no
Qt SerialBus:
  Socket CAN ............................. yes
  Socket CAN FD .......................... yes
QtXmlPatterns:
  XML schema support ..................... yes
Qt QML:
  QML interpreter ........................ yes
  QML network support .................... yes
Qt Quick:
  Direct3D 12 ............................ no
  AnimatedImage item ..................... yes
  Canvas item ............................ yes
  Support for Qt Quick Designer .......... yes
  Flipable item .......................... yes
  GridView item .......................... yes
  ListView item .......................... yes
  Path support ........................... yes
  PathView item .......................... yes
  Positioner items ....................... yes
  ShaderEffect item ...................... yes
  Sprite item ............................ yes
Qt Gamepad:
  SDL2 ................................... no
Qt 3D:
  Assimp ................................. yes
  System Assimp .......................... no
  Output Qt3D Job traces ................. no
  Output Qt3D GL traces .................. no
Qt 3D GeometryLoaders:
  Autodesk FBX ........................... no
Qt Wayland Client ........................ no
Qt Wayland Compositor .................... no
Qt Bluetooth:
  BlueZ .................................. no
  BlueZ Low Energy ....................... no
  Linux Crypto API ....................... no
Qt Sensors:
  sensorfw ............................... no
Qt Quick Controls 2:
  Styles ................................. Default Material Universal
Qt Quick Templates 2:
  Hover support .......................... yes
  Multi-touch support .................... yes
Qt Positioning:
  Gypsy GPS Daemon ....................... no
  WinRT Geolocation API .................. no
Qt Location:
  Geoservice plugins:
    OpenStreetMap ........................ yes
    HERE ................................. yes
    Esri ................................. yes
    Mapbox ............................... yes
    MapboxGL ............................. yes
    Itemsoverlay ......................... yes
Qt Multimedia:
  ALSA ................................... no
  GStreamer 1.0 .......................... no
  GStreamer 0.10 ......................... no
  Video for Linux ........................ yes
  OpenAL ................................. no
  PulseAudio ............................. no
  Resource Policy (libresourceqt5) ....... no
  Windows Audio Services ................. no
  DirectShow ............................. no
  Windows Media Foundation ............... no
Qt WebEngine:
  Embedded build ......................... yes
  Pepper Plugins ......................... no
  Printing and PDF ....................... no
  Proprietary Codecs ..................... no
  Spellchecker ........................... yes
  WebRTC ................................. no
  Using system ninja ..................... no
  ALSA ................................... no
  PulseAudio ............................. no
  System libraries:
    re2 .................................. no
    ICU .................................. no
    libwebp and libwebpdemux ............. no
    Opus ................................. no
    ffmpeg ............................... no

4. 编译安装

make -j4
sudo make install

【错误1】

sh: python: command not found
Project ERROR: Building QtQml requires Python.
make: *** [Makefile:335: module-qtdeclarative-make_first] Error 3
解决方法:

sudo apt-get install python

安装后的目录结构:

/opt/qt5.9.9_hi3559a/
├── bin
├── doc
├── include
├── lib
├── mkspecs
├── plugins
├── qml
└── translations

4 总结

以上就是Qt编译的过程,总体比较顺利。下一篇会介绍Qt应用如何在海思单板上运行。

### 回答1: 海思Hi3559AV100是一款高性能的视频处理芯片,可用于智能监控、智能交通、智能家居等领域。如果需要进行次开发,可以根据具体需求选择合适的开发板和开发工具,例如华为的Hi3559AV100开发板和Hi3559AV100 SDK开发工具。在开发过程中,需要熟悉海思芯片的架构和功能,以及相关的编程语言和技术。同时,还需要考虑系统的稳定性、安全性和可靠性等方面的问题,确保次开发的产品能够满足用户的需求。 ### 回答2: 海思hi3559av100是一款高性能视频处理器,具有较强的图像处理能力和音频解码能力。对于想要进行次开发的用户来说,首先需要了解该处理器的硬件架构和软件开发环境。 硬件架构方面,海思hi3559av100采用了多核架构,包括4核ARM Cortex-A53处理器和1个主频高达600MHz的视频处理器,能够同时处理多路高清视频数据。同时,该处理器还具有丰富的外设接口,包括GPIO、UART、SPI、I2C、PWM等接口,方便用户与其他设备进行连接和通信。 在软件开发环境方面,海思提供了全套开发工具和软件库,包括开发板、SDK、驱动和示例程序等。用户可通过开发板进行调试和开发,编写C/C++代码进行开发,并使用提供的软件库进行次开发。 具体的次开发方案可以根据不同的需求进行选择。如果需要进行图像处理方面的开发,可以使用提供的ISP算法库进行次开发。如果需要进行音频解码方面的开发,则可以使用提供的声音库进行开发。对于具有网络通信需求的用户,可以使用提供的网络库或者协议栈进行开发。总之,根据不同的需求,可以选择不同的功能模块进行次开发。 总体来说,海思hi3559av100具有强大的图像处理和音频解码能力,同时提供了完整的开发工具和软件库,让用户进行次开发的效果非常好。如果用户需要进行图像处理、音频解码或者网络通信方面的开发,可以考虑使用海思hi3559av100进行次开发。 ### 回答3: 海思hi3559av100是华为海思公司推出的一款高性能嵌入式人工智能芯片,其拥有多个强大的处理单元,包括4个ARM Cortex-A73 CPU核心和4个Cortex-A53 CPU核心,以及一颗G51图形处理器,可以满足各种复杂的AI应用场景。 在次开发方面,海思hi3559av100提供了丰富的软件开发工具链,包括SDK、API库、开发文档等,使得开发者可以根据自己的需求进行次开发。海思hi3559av100支持多种操作系统,包括Linux、Android、RTOS等,开发者可以选择适合自己的操作系统进行开发。此外,海思hi3559av100还支持多种编程语言,包括C、C++、Python等,方便开发者进行软件开发。 在硬件方面,海思hi3559av100拥有多个高速接口,包括PCIe、USB3.0、HDMI、DP等,使得其可以方便地与其他设备进行连接。此外,海思hi3559av100还拥有丰富的输入输出接口,包括多路MIPI接口、串口、SPI接口等,使得开发者可以轻松地进行外设连接和控制。 总之,海思hi3559av100具有高性能、多功能、易扩展等特点,适合用于各种人工智能应用场景的次开发,包括智能安防、智能家居、智能医疗、智能零售等。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值