QT5.9移植到海思HI3520设备上运行
目录
前言:
在海思HI3520DV300上调试QT5.9.0有一小段时间了,这里将遇到的比较典型的问题做一个记录,以备后续查询,也可给同行一个参考。本人只使用过QT5.9.0这一个版本,如有描述错误欢迎指出。
说明:
QT版本:qt-everywhere-opensource-src-5.9.0
- qt-creator版本:qt-creator-opensource-linux-x86_64-4.7.0.run
- 运行设备:HI3520DV300,ARM Cortex A7 @Max. 800MHz,nand flash 128M
- 编译环境:Ubuntu16.04
- 交叉编译工具:arm-hisiv300-linux-
1.交叉编译QT源码
源代码的交叉编译需要耗费很多的时间,在我笔记本上花费了好几个小时才编译完成,其中还有几次编译不过的地方,可以谷歌搜索具体解决方法,这里提供一个我已经编译好了的产物。使用的交叉编译工具是arm-hisiv300-linux-
这里需要注意:使用我编译的install_5.9.0_arm_.tar.gz文件时,一定需要将解压出来的install文件放到/home/biao/QT/qt_to_arm/ 目录之下,应该是对我编译的目录有依赖,否则在配置qtcreater交叉编译的Qt version 时qmake没法识别,最终导致无法交叉编译工程。
2.编译海思linuxfb
在海思中,使用海思官方自带的sample进行修改。Hisilicon Framebuffer(以下简称 HiFB)是海思数字媒体处理平台提供的管理图像叠加层的模块,它基于 Linux Framebuffer 实现,在提供 Linux Framebuffer 基本功能的基础上,还扩展了一些图形层控制功能,如层间 Alpha、设置原点等
在海思开发板中,要先运行sample_hifb对设备的fb进行初始化之后才能运行QT,不然无法显示,QT会提示open /dev/fb error;
3.配置qt-creator
qt-creator的配置主要是交叉编译工具的配置,这里需要使用到上面交叉编译构建的产物install_5.9.0_arm_.tar.gz,还需要海思的交叉编译工具:arm-hisiv300-linux-
4.编译helloworld
新建一个最简单的QT工程,配置海思交叉编译,编译,构建,将生产的执行文件和sample_hifb一起拷贝到开发板中。
5.设置Hi3520运行环境
(1)拷贝运行时需要的库文件:这里为了节省空间,只拷贝有需要的库文件,还有就是有很多实际就是一个文件,通过软链接实现链接操作节省空间。
/usr/share/qt #
/usr/share/qt # ls
lib plugins
/usr/share/qt # ls ./lib/
ibQt5Core.so libQt5Gui.so libQt5Widgets.so
libQt5Core.so.5 libQt5Gui.so.5 libQt5Widgets.so.5
libQt5Core.so.5.9 libQt5Gui.so.5.9 libQt5Widgets.so.5.9
libQt5Core.so.5.9.0 libQt5Gui.so.5.9.0 libQt5Widgets.so.5.9.0
/usr/share/qt # ls ./plugins/
platforms
/usr/share/qt # ls ./plugins/platforms/
libqlinuxfb.so
(2)设置QT的运行环境:在etc/profile中添加下面内容
#添加QT库路径
LD_LIBRARY_PATH="/nfsroot:/usr/local/lib:/usr/lib:/hi3520/lib:/hi3520/lib/libmpp:/usr/share/lib:/usr/share/qt/lib"
export PATH
export LD_LIBRARY_PATH
#设置使用linuxfb,同时设置QT显示分辨率800新480
QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0:size=800x480:
export QT_QPA_PLATFORM
#设置QT平台相关文件路径
QT_QPA_PLATFORM_PLUGIN_PATH=/usr/share/qt/plugins/
export QT_QPA_PLATFORM_PLUGIN_PATH
6.运行:
注意:在我的设备上,是通过HDMI将图形数据发送给显示屏, 先运行fb,然后运行QT程序,运行如下:
/hi3520/app # chmod 777 sample_hifb
/hi3520/app # ./sample_hifb &
/hi3520/app # HDMI start success.
/hi3520/app #
/hi3520/app #
/hi3520/app # ./hellworld
【RootFs】 [Stop rootfs feed dog!]
【RootFs】 [HeartBeatCnt:600]
【RootFs】 [Exit Process 973]
运行效果如下:
注意上面的显示是乱码,这个问题在下面问题中会具体讲解。
问题分析与记录:
问题一:QT运行慢问题
我在海思HI3520DV300设备上运行,当拖动QT界面的时候,CPU使用率会非常的高,但是正常运行的时候基本上不占用CPU,初步定为是当界面刷新的瞬间占用CPU高,不确定是HI3520DV300的处理能力不行还是移植的QT哪里设置不对。
问题二:QT图层隐藏问题
在Ubuntu中我们要隐藏QT界面方法有很多,但是有些在海思HI3520中不起作用。在海思中它是按图层来出来,需要隐藏QT图层,其实不需要去设置海思的fb参数,而是直接在QT程序中使用方法三就可以实现:
/**方法1**/
// this->setWindowOpacity(0);
// this->setAttribute( Qt::WA_TranslucentBackground,true );
// this->setWindowFlags( Qt::WindowMinimizeButtonHint );
// exit(0);GuiIPCPSendHeartBeat
/**方法2**/
// this->setVisible(true);
// this->setHidden(true);
/**方法3**/
this->setHidden(true);
this->setCursor(Qt::BlankCursor); //隐藏鼠标
问题三:鼠标问题
- 要想在海思平台中运行QT,并且支持鼠标控制界面,这个需要配置内核,使内核支持你所使用的鼠标类型。在我使用的HI3520SDK中,内核默认并没有配置鼠标使用的工程。
- QT鼠标不支持热拔插,所以在需要在设备启动之前插入鼠标
- 鼠标正常配置,正常运行的时候,在/dev/input 下可以看到下面设备:
loop6 ram1 stdin
/dev # cd input/
/dev/input # ls
event0 mice mouse0
/dev/input #
event0 mice mouse0 这三个设备,少一个都不能正常运行。
问题四:字体问题
上面我们可以看到最开始运行的时候,显示的英文字符和中文字符都是乱码,这是因为我们没有将字体库的原因。
在QT5.9中,我们并不需要将字体单独的拷贝的海思HI3520设备上,也不需要设置环境变量(网上介绍的很多都是QT4的方法,需要自己拷贝库,然后配置环境变量),在QT5.9只需要在编译工程的时候将字符加载进去就可以了,QT会自动将字符库文件和可执行文件一起打包起来。
我使用的字体库是DroidSansFallback.ttf,将它添加到QT工程的资源库中,然后在程序中加载:
#include "helloworld.h"
#include <QApplication>
#include <QFontDatabase>
#include <QDebug>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QFont iconFont;
int fontId = QFontDatabase::addApplicationFont(":/new/prefix1/DroidSansFallback.ttf");
QStringList fontName = QFontDatabase::applicationFontFamilies(fontId);
if (fontName.count() > 0) {
iconFont = QFont(fontName.at(0));
} else {
qDebug() << "load DroidSansFallback.ttf error";
}
a.setFont(iconFont);
HelloWorld w;
w.show();
return a.exec();
}
该字体至此英文中文,以及各种字符图案,图案代码可以从这里查询:
http://fontawesome.dashgame.com https://fontawesome.com/cheatsheet?from=io
字体可以从这里下载:DroidSansFallback.ttf
正常显示字体的图像如下:
- 分享
- 举报
![易百纳技术社区](https://ebaina.oss-cn-hangzhou.aliyuncs.com/production/direct/resource/202306/14/empty.png)
-
浏览量:4289次2020-07-31 13:45:09
-
浏览量:1172次2023-11-04 15:07:11
-
浏览量:2392次2020-08-14 15:09:41
-
浏览量:10358次2020-08-30 00:41:53
-
浏览量:4568次2020-08-15 17:29:07
-
浏览量:4719次2020-08-11 17:39:02
-
浏览量:4593次2020-08-11 18:51:18
-
浏览量:1284次2020-08-30 00:47:29
-
浏览量:6292次2020-08-15 17:22:26
-
浏览量:1319次2020-08-30 00:47:44
-
浏览量:3564次2020-08-14 17:18:54
-
2020-11-09 12:31:13
-
浏览量:10094次2021-01-12 20:00:35
-
浏览量:582次2024-06-06 09:47:33
-
浏览量:774次2023-09-01 13:29:58
-
浏览量:1386次2023-10-12 16:48:04
-
浏览量:611次2024-01-08 18:13:05
-
浏览量:4868次2020-07-31 11:54:44
-
浏览量:572次2024-02-05 17:05:51
-
浏览量:2688次2020-08-10 09:28:54
-
广告/SPAM
-
恶意灌水
-
违规内容
-
文不对题
-
重复发帖
![易百纳技术社区](https://ebaina.oss-cn-hangzhou.aliyuncs.com/res/images/user/avatar/202310/31/BLMxWMs4kmOElw6nBebPZPj9rKYviwm0Q4bivuso.png)
易木雨
![易百纳技术社区](/img/web/choose_active.png)
![易百纳技术社区](/img/web/choose_active.png)
![易百纳技术社区](/img/web/choose_active.png)
![易百纳技术社区](/img/web/choose_active.png)
![易百纳技术社区](/img/web/choose_active.png)
![易百纳技术社区](/img/web/paywx.png)
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明