Hi3516DV300 移植Qt

devtools/2025/3/14 21:39:29/

之前在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 = sublibinclude(../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-stripload(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.ppmy.cn/devtools/167115.html

相关文章

MySql数据库等级考试学习分享3(Day5)

题目:机器周期的同步标准是( )。 选项: A. CPU执行指令所占用的时间 B. CPU访问存储器一次所需要的时间 C. CPU分析指令所需要的时间 D. CPU访问寄存器一次所需要的时间 知识点总结(0基础必看) 1. 计算机时序的基本单位 单位定义关系时钟周期(Clock Cycle)CPU主频的倒…

英语学习(GitHub学到的分享)

【英语语法&#xff1a;https://github.com/hzpt-inet-club/english-note】 【离谱的英语学习指南&#xff1a;https://github.com/byoungd/English-level-up-tips/tree/master】 【很喜欢文中的一句话&#xff1a;如果我轻轻松松的学习&#xff0c;生活的幸福指数会提高很多…

网络安全相关资源安全合规检查与整改计划‌

在信息化高速发展的今天&#xff0c;确保各个资源组的安全合规性显得尤为重要。针对在建工程节点的项目建设中心安全系统&#xff0c;我们进行了一系列的检查&#xff0c;并发现了若干不合规项。以下是对这些不合规项的详细分析、无法整改的原因、规避方案以及后续的整改计划。…

oracle11.2.0.4 RAC 保姆级静默安装(二) DB数据库软件

1.响应文件配置 [rootdb11g1 software]# su - oracle [oracledb11g1 ~]$ cd /software/database/ [oracledb11g1 database]$ cd response/ [oracledb11g1 response]$ vi db_install.rsp oracle.install.optionINSTALL_DB_SWONLY ORACLE_HOSTNAMEdb11g1 UNIX_GROUP_NAME…

设计模式之桥接模式:原理、实现与应用

引言 桥接模式&#xff08;Bridge Pattern&#xff09;是一种结构型设计模式&#xff0c;它将抽象部分与实现部分分离&#xff0c;使它们可以独立变化。桥接模式通过组合而不是继承来实现抽象与实现的解耦&#xff0c;从而提高了系统的灵活性和可扩展性。本文将深入探讨桥接模…

通用验证码邮件HTML模版

<!DOCTYPE html> <html><head><meta charset"utf-8"><title>您的登录验证码</title><style type"text/css">/* 内联样式确保邮件客户端兼容性 */.container {max-width: 600px;margin: 0 auto;font-family: Hel…

TCP网络协议

TCP粘包 1. TCP在接收数据时&#xff0c;多包数据粘在了一起 2. 原因&#xff1a; 1. TCP发送数据时&#xff0c;没有及时发走&#xff0c;会根据缓冲区数据的情况进行重新组包&#xff1b; 2. TCP接收方&#xff0c;没有及时读走缓冲区数据&#xff0c;导致缓冲区大量数…

CSDN统计个人创作总字数

前言 不是很懂爬虫&#xff0c;所以就叫deepseek写了一个 用起来很简单&#xff0c;但是有一个小问题&#xff0c;就是统计的是总字符数。代码片会被统计进去&#xff0c;Markdown语法也会被统计进去。 不过我没有太多需求&#xff0c;能大概统计一下满足以下小小的好奇心和成…