海思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和海思技术的不断发展,需要持续关注新技术和新特性,以进一步提升嵌入式系统的性能和用户体验。