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

海思3519V200ARM Linux 下移植 Qt5.8.0

一、移植背景及意义

海思3519V200是一款基于ARM架构的嵌入式芯片,广泛应用于智能安防、工业控制等领域。在这些应用场景中,对设备的图形用户界面(GUI)有着越来越高的要求。Qt5.8.0作为一个功能强大、跨平台的GUI开发框架,能够帮助开发者快速开发出美观、高效的用户界面。将其移植到海思3519V200平台上,可以极大地提升嵌入式设备的人机交互体验,满足市场需求。

二、移植准备

1.硬件环境

准备海思3519V200开发板一台,并确保其能够正常启动运行。同时,还需要一台用于交叉编译的PC主机,通常配置为x86架构的Linux系统,如Ubuntu 16.04或更高版本。

2.软件环境

在PC主机上安装适合海思3519V200的交叉编译工具链,如arm-linux-gnueabi-gcc或arm-himix200-linux-g++等。安装必要的依赖库和工具,如build-essential、libgtk2.0-dev、libudev-dev、libssl-dev等,可以通过运行以下命令进行安装:

sudo apt-get install build-essential libgtk2.0-dev libudev-dev libssl-dev

从Qt官网(Index of /archive/qt)下载适合嵌入式Linux的Qt5.8.0版本的源码包,如qt-everywhere-opensource-src-5.8.0.tar.xz,并将其传输到开发主机上并解压。

三、交叉编译

1.配置Qt源码

进入Qt源码目录,根据海思3519V200平台的特点和需求,编写一个配置脚本(如configure.sh),常用的配置选项及其含义如下:

  • -prefix:指定Qt库的安装路径,如/home/qt-5.8.0

  • -release:指定生成发布版本的Qt库,提高性能和稳定性。

  • -opensource:声明使用开源版本的Qt。

  • -confirm-license:确认接受Qt的开源协议。

  • -static:生成静态库,便于程序在板端运行,减少对库加载路径的配置。

  • -qt-zlib-qt-libpng-qt-libjpeg-qt-freetype:使用Qt库自带的zlib、libpng、libjpeg、freetype等库,避免因系统缺少这些库而导致的编译或运行问题。

  • -no-pch:不使用预编译头文件,减少编译过程中的潜在问题。

  • -no-avx-no-openssl-no-cups-no-dbus-no-opengl-no-glib:根据海思3519V200平台的特点和需求,禁用一些不必要的功能和库,如AVX指令集、OpenSSL加密库、CUPS打印系统、DBus通信框架、OpenGL图形库、Glib库等。

  • -xplatform:指定交叉编译平台,如linux-arm-himix200-g++

  • -nomake examples-nomake tests:不编译示例和测试代码,减少编译时间和生成文件的大小。

2.运行配置脚本

在终端中进入Qt源码根目录,运行以下命令使配置脚本具有执行权限,并执行该脚本:

chmod +x configure.sh
./configure.sh

配置过程中可能会提示缺少一些依赖库或工具,根据提示安装相应的依赖。

3.编译和安装

配置完成后,运行以下命令进行编译和安装:

make -jN
sudo make install

其中N为编译线程数,可根据主机性能设置。编译完成后,Qt库将被安装到指定的路径下。

四、修改LinuxFB插件

海思3519V200使用Linux Frame Buffer(LinuxFB)作为图形后端。在使用LinuxFB之前,需要先初始化MPP(Media Processing Platform)系统以及VO(Video Output)模块,否则直接打开fb会报权限不允许的错误。具体步骤如下:

1.修改插件源码

进入qt-everywhere-opensource-src-5.8.0/qtbase/src/plugins/platforms/linuxfb目录,找到qlinuxfb.cpp文件。在文件中添加MPP和VO初始化的代码,确保在打开fb设备之前完成相关的初始化工作。例如,在QLinuxFbScreen::connectToFramebuffer函数中添加以下代码:

// 初始化MPP系统
if (mpp_component_init() != 0) {qFatal("Failed to initialize MPP system");
}
// 初始化VO模块
vo_cfg_t voCfg;
voCfg.ePixFormat = VO_PIXEL_FORMAT_ARGB8888; // 根据实际需求设置像素格式
voCfg.eDynamicRange = VO_DYNAMIC_RANGE_SDR;
voCfg.eWorkMode = VO_WORK_MODE_NORMAL;
voCfg.eOutputType = VO_OUTPUT_TYPE_FB;
if (vo_init(&voCfg) != 0) {qFatal("Failed to initialize VO module");
}

2.重新编译插件

修改完成后,重新编译LinuxFB插件:

make
make install

此时,LinuxFB插件将适配海思3519V200平台,能够正确地与设备的图形硬件进行交互。

五、开发板移植

1.复制文件

将安装好的Qt库和相关文件复制到海思3519V200开发板的文件系统中对应的位置,一般为/usr/local/qt5.8.0

2.配置环境变量

在开发板的/etc/profile文件中添加以下环境变量配置:

export QTDIR=/usr/local/qt5.8.0
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

执行source /etc/profile命令使环境变量生效。

六、测试

1.运行示例程序

在开发板上运行Qt的示例程序进行测试。可以使用以下命令启动示例程序:

export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0:size=1920X1080
/usr/local/qt5.8.0/examples/widgets/widgets/mainwindow

如果程序能够正常显示图形界面并响应用户操作,说明Qt移植成功。

2.编写和编译自己的程序

自行编写一个简单的Qt应用程序,在.pro文件中添加海思相关的库和头文件。使用qmake生成Makefile,然后编译生成可执行文件,并将其复制到开发板上运行。例如,编写一个简单的main.cpp文件:

#include <QApplication>
#include <QWidget>int main(int argc, char *argv[])
{QApplication app(argc, argv);QWidget window;window.resize(800, 480);window.show();return app.exec();
}

创建一个test.pro文件:

QT       += core gui
TARGET = test
TEMPLATE = app
SOURCES += main.cpp
HEADERS  += 

使用以下命令生成Makefile并编译:

/usr/local/qt5.8.0/bin/qmake test.pro -o Makefile
make

将生成的test可执行文件复制到开发板上,并运行:

export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0:size=1920X1080
./test

如果能够正常显示一个窗口,说明Qt移植成功。

七、总结与展望

在海思3519V200 ARM Linux下成功移植Qt5.8.0,为嵌入式设备开发丰富的图形界面提供了强大的支持。通过合理的配置和编译,以及对LinuxFB插件的修改,可以确保Qt在海思3519V200平台上稳定运行。在后续的开发工作中,可以基于移植好的Qt开发各种嵌入式应用,如智能安防监控界面、工业控制操作面板等。同时,随着Qt和海思技术的不断发展,需要持续关注新技术和新特性,以进一步提升嵌入式系统的性能和用户体验。

相关文章:

  • 死链对网站的影响精准引流客源的方法可靠吗
  • 做羞羞的事情的网站苏州网站制作
  • 天津网站公司如何制作网页链接教程
  • 温州手机网站建设wmwl百度知道网页版地址
  • 企业网站重要性全网引流推广 价格
  • 做网站的公司 成都/扬州seo博客
  • EPT(Efficient Prompt Tuning)方法,旨在解决提示调优(Prompt Tuning)中效率与准确性平衡和跨任务一致性的问题
  • Android studio进阶开发(六)--如何用真机通过okhttp连接服务器
  • 20250526惠普HP锐14 AMD锐龙 14英寸轻薄笔记本电脑(八核R7-7730U)的显卡驱动下载
  • Linux_编辑器Vim基本使用
  • 【iOS】 锁
  • Linux(Centos 7.6)命令详解:tar
  • jEasyUI 表单的 CRUD 应用
  • pgsql 一些用法
  • 【C++指南】string(四):编码
  • Android 架构演进之路:从 MVC 到 MVI,拥抱单向数据流的革命
  • 手机发热怎么办?
  • 网络安全全知识图谱:威胁、防护、管理与发展趋势详解
  • 【后端高阶面经:缓存篇】37、高并发系统缓存性能优化:从本地到分布式的全链路设计
  • 上海市计算机学会竞赛平台2025年5月月赛丙组手机充电
  • C语言| 拷贝传递(指针控制内存单元)
  • ROS2学习(12)------ROS2 分布式通信说明
  • 深入解析Spring Boot与Spring Security整合实现JWT认证
  • Vue 前端全方位性能优化指南
  • Java常用API
  • WireShark网络抓包—详细教程