当前位置: 首页 > article >正文

Hi3516DV300 移植Qt

之前在NXP的板子上,移植过了ARM Linux 移植 tslib、Qt和OpenCV_linux qt tslib-CSDN博客

不过海思移植Qt时还是有不少问题的。

一、Qt 下载与编译

1. Qt 下载

Index of /archive/qt/5.12/5.12.9/single

tar -xf qt-everywhere-src-5.12.9.tar.xz

2. 修改交叉编译器 

将原来交叉编译的 qmake.conf 复制一份 

cd qt-everywhere-src-5.12.9/ 
cp -r qtbase/mkspecs/linux-arm-gnueabi-g++ qtbase/mkspecs/arm-himix200-linux-g++
vim qtbase/mkspecs/arm-himix200-linux-g++/qmake.conf 

修改的内容如下: 

#
# qmake configuration for building with arm-linux-gnueabi-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)

# modifications to g++.conf
QMAKE_CC                = arm-himix200-linux-gcc
QMAKE_CXX               = arm-himix200-linux-g++
QMAKE_LINK              = arm-himix200-linux-g++
QMAKE_LINK_SHLIB        = arm-himix200-linux-g++

# modifications to linux.conf
QMAKE_AR                = arm-himix200-linux-ar cqs
QMAKE_OBJCOPY           = arm-himix200-linux-objcopy
QMAKE_STRIP             = arm-himix200-linux-strip

load(qt_config)

# modifications to gcc-base.conf
QMAKE_CFLAGS_RELEASE += -mcpu=cortex-a7 -mfloat-abi=softfp -mfpu=neon-vfpv4
QMAKE_CXXFLAGS_RELEASE += -mcpu=cortex-a7 -mfloat-abi=softfp -mfpu=neon-vfpv4 -fpermissive

3. 编译前的配置

vim autoconfigure.sh

内容如下:

./configure -prefix /home/prover/linux/arm-qt \
-opensource \
-confirm-license \
-release \
-strip \
-no-eglfs -linuxfb \
-qt-zlib \
-no-gif \
-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 arm-himix200-linux-g++ \    
-no-opengl \
-nomake examples \
-nomake tools \
-no-sqlite \
-skip qtgamepad \
-skip qtandroidextras \
-skip qtmacextras \
-skip qtx11extras \
-skip qtsensors \
-skip qtserialbus \
-skip qtserialport \
-skip qtwebengine \
-skip qtwebchannel \
-skip qtwebsockets \
-skip qtlocation \
-skip qtquickcontrols \
-skip qtpurchasing \
-skip qtconnectivity \
-skip qtscxml \
-skip qtxmlpatterns \
-skip qtnetworkauth \
-skip qtspeech \
-skip qtscript \
-skip qtremoteobjects \
-skip qtcharts \
-skip qtdatavis3d \
-skip qtwebview \
-make libs \
-make examples \
-nomake tools -nomake tests \
-gui \
-widgets \
-dbus-runtime \
--glib=no \
--iconv=no \
--pcre=qt \
--zlib=qt \
-no-openssl \
--freetype=qt \
--harfbuzz=qt \
-no-opengl \
-linuxfb \
--xcb=no \
-tslib \
--libpng=qt \
--libjpeg=qt \
--sqlite=qt \
-plugin-sql-sqlite \
-I/home/prover/linux/tslib-1.21/arm-tslib/include \
-L/home/prover/linux/tslib-1.21/arm-tslib/lib \
-recheck-all

记得交叉编译器改成海思的:-xplatform arm-himix200-linux-g++ \  

然后运行: 

chmod +x autoconfigure.sh
sudo apt-get install g++ // 配置前请先安装 g++ 
./autoconfigure.sh 

4. 编译

make -j8
make install

打包

sudo tar -jcf ./arm-qt.tar.bz2 shared

二、移植Qt

1. SD卡挂载

由于 Nor flash 的大小就那么32M,肯定要把Qt运行库移植到SD卡上。

mkdir -p /sdcard
mount /dev/mmcblk0p1 /sdcard

可以设置开机自动挂载:

2. 移植到SD卡 

sudo cp arm-qt.tar.bz2 /home/prover/linux/nfs/rootfs_glibc/sdcard/

配置环境变量 /etc/profile

export QT_QPA_PLATFORM_PLUGIN_PATH=/sdcard/arm-qt/plugins
export QT_QPA_FONTDIR=/sdcard/arm-qt/fonts
export LD_LIBRARY_PATH=/sdcard/arm-qt
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/sdcard/arm-qt/lib
export QT_QPA_PLATFORM=linuxfb:tty=/dev/fb0
export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0:size=1920x1080:offset=0x0:nographicsmodeswitc

三、测试Qt应用

1. 编译demo

cd qt-everywhere-src-5.12.9/qtbase/examples/widgets/graphicsview/collidingmice
../../../../bin/qmake
make

2. 初始化

和之前移植 tslib 一样,海思是会对 /dev/fb0 进行封装的。这边改动 sample_tde.c 的源码,原来的 tde 是要将背景图和一些图片循环输出到屏幕的,这边我们直接不要这么做,而是直接刷新屏幕即可。

2.1 修改分辨率

我设置的是 1920*1080,这里的分辨率其实就是物理分辨率了。

来到函数 static HI_VOID circumrotate(HI_U32 u32CurOnShow) 

我们直接全部删了,换成下面这段:

static HI_VOID circumrotate(HI_U32 u32CurOnShow)
{
    struct fb_var_screeninfo stVarInfo; // **声明屏幕信息变量**
    
    // **获取当前屏幕参数**
    if (ioctl(g_s32Fd, FBIOGET_VSCREENINFO, &stVarInfo) < 0)  
    {
        TDE_PRINT("Failed to get screen info!\n");
        return;
    }

    // **执行屏幕刷新**
    if (ioctl(g_s32Fd, FBIOPAN_DISPLAY, &stVarInfo) < 0)
    {
        TDE_PRINT("process frame buffer device error\n");
        return;
    }

    getchar();  // **等待用户按键**
    g_s32FrameNum++;  // **递增帧数**

    return;
}

3. 运行测试

这边还编译了个demo ,animatedtiles。

./sample_tde 0 &
./collidingmice
./animatedtiles

小结

后面开发的思路很明显了,要学习使用海思的mpp软件包进行开发视频。而既然移植了Qt,就将mpp也集成一块。后面想要开发一个相机的UI界面,按钮控件实现拍照和直播功能;当然还要有目标检测的话,就更好了。


http://www.kler.cn/a/582948.html

相关文章:

  • PyTorch深度学习框架进阶学习计划 - 第21天:自然语言处理基础
  • 尚硅谷爬虫note16
  • 计算机操作系统(二) 操作系统的发展过程
  • 从学习ts的三斜线指令到项目中声明类型的最佳实践
  • winform中chart控件解决显示大量曲线数据卡顿方法——删旧添新法
  • linux下的离线升级替换脚本参考
  • ThinkPHP6用户登录系统的全过程
  • WPS二次开发系列:Android 第三方应用如何获取WPS端内文档
  • 计算机网络——DHCP
  • 蓝桥杯软件比赛_蓝桥杯软件比赛:软考前的实战演练场
  • 编写Dockerfile制作Redis镜像,生成镜像名为redis:v1.1,并推送到私有仓库。
  • 面试之《vue keep-alive原理》
  • Redis存数据就像存钱:RDB定期存款 vs AOF实时记账
  • 《HTML视觉大框架:构建现代网页设计的基石》
  • JVM内存结构笔记04-字符串常量池
  • CentOS 7系统初始化及虚拟化环境搭建手册
  • 基于django+vue的购物商城系统
  • 05.基于 TCP 的远程计算器:从协议设计到高并发实现
  • 图解AUTOSAR_CP_TcpIp
  • 1.数据清洗与预处理——Python数据挖掘(数据抽样、数据分割、异常值处理、缺失值处理)