技术专栏
海思Hi3516DV300 QT移植详解
1.qt的选择与下载
wget http://download.qt.io/archive/qt/5.12/5.12.8/single/qt-everywhere-src-5.12.8.tar.xz tar xf qt-everywhere-src-5.12.8.tar.xz
2.创建海思的qmake.conf
cp /opt/qt-everywhere-src-5.12.8/qtbase/mkspecs/linux-arm-gnueabi-g++/ /opt/qteverywhere-src-5.12.8/qtbase/mkspecs/arm-himix200-linux-g++ -rf
vi /opt/qt-everywhere-src-5.12.8/qtbase/mkspecs/arm-himix200-linux-g++/qmake.conf
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.开始编译
./configure -prefix ../qt5.12.8_hi3516dv300 -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 armhimix200-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
make install
4.海思framebuffer的qt移植
cd /opt/qt-everywhere-src-5.12.8/qtbase/src/plugins/platforms/linuxfb
vim linuxfb.pro
linuxfb.pro内容如下:
TARGET = qlinuxfb
DEFINES += QT_NO_FOREACH
QT += \
core-private gui-private \
service_support-private eventdispatcher_support-private \
fontdatabase_support-private fb_support-private
qtHaveModule(input_support-private): \
QT += input_support-private
SOURCES = main.cpp \
qlinuxfbintegration.cpp \
qlinuxfbscreen.cpp
HEADERS = qlinuxfbintegration.h \
qlinuxfbscreen.h
qtHaveModule(kms_support-private) {
QT += kms_support-private
SOURCES += qlinuxfbdrmscreen.cpp
HEADERS += qlinuxfbdrmscreen.h
}
INCLUDEPATH += /HardDisk/hisilicon/hi3516dv300-ipc-v20/smp/a7_linux/mpp/include
unix:LIBS += -Wl,--start-group /HardDisk/hisilicon/hi3516dv300-ipcv20/smp/a7_linux/mpp/lib/libsvpruntime.a \
/HardDisk/hisilicon/hi3516dv300-ipc-v20/smp/a7_linux/mpp/lib/libhi_cipher.a \
/HardDisk/hisilicon/hi3516dv300-ipc-v20/smp/a7_linux/mpp/lib/libupvqe.a \
/HardDisk/hisilicon/hi3516dv300-ipc-v20/smp/a7_linux/mpp/lib/libsns_imx307_2l.a \
/HardDisk/hisilicon/hi3516dv300-ipc-v20/smp/a7_linux/mpp/lib/libmpi.a \
/HardDisk/hisilicon/hi3516dv300-ipc-v20/smp/a7_linux/mpp/lib/lib_hiawb_natura.a \
/HardDisk/hisilicon/hi3516dv300-ipc-v20/smp/a7_linux/mpp/lib/lib_hidrc.a \
/HardDisk/hisilicon/hi3516dv300-ipc-v20/smp/a7_linux/mpp/lib/lib_hiawb.a \
/HardDisk/hisilicon/hi3516dv300-ipc-v20/smp/a7_linux/mpp/lib/libsns_imx307.a \
/HardDisk/hisilicon/hi3516dv300-ipc-v20/smp/a7_linux/mpp/lib/lib_hiae.a \
/HardDisk/hisilicon/hi3516dv300-ipc-v20/smp/a7_linux/mpp/lib/libdnvqe.a \
/HardDisk/hisilicon/hi3516dv300-ipc-v20/smp/a7_linux/mpp/lib/libnnie.a \
/HardDisk/hisilicon/hi3516dv300-ipc-v20/smp/a7_linux/mpp/lib/libhifisheyecalibrate.a \
/HardDisk/hisilicon/hi3516dv300-ipc-v20/smp/a7_linux/mpp/lib/libtde.a \
/HardDisk/hisilicon/hi3516dv300-ipc-v20/smp/a7_linux/mpp/lib/libVoiceEngine.a \
/HardDisk/hisilicon/hi3516dv300-ipc-v20/smp/a7_linux/mpp/lib/libsecurec.a \
/HardDisk/hisilicon/hi3516dv300-ipc-v20/smp/a7_linux/mpp/lib/lib_hildci.a \
/HardDisk/hisilicon/hi3516dv300-ipc-v20/smp/a7_linux/mpp/lib/libhdmi.a \
/HardDisk/hisilicon/hi3516dv300-ipc-v20/smp/a7_linux/mpp/lib/libmd.a \
/HardDisk/hisilicon/hi3516dv300-ipc-v20/smp/a7_linux/mpp/lib/libive.a \
/HardDisk/hisilicon/hi3516dv300-ipc-v20/smp/a7_linux/mpp/lib/libisp.a \
/HardDisk/hisilicon/hi3516dv300-ipc-v20/smp/a7_linux/mpp/lib/lib_hidehaze.a -lm -Wl,--
end-group
OTHER_FILES += linuxfb.json
PLUGIN_TYPE = platforms
PLUGIN_CLASS_NAME = QLinuxFbIntegrationPlugin
!equals(TARGET, $$QT_DEFAULT_QPA_PLUGIN): PLUGIN_EXTENDS = -
load(qt_plugin)
qlinuxfbscreen.cpp新增以下内容
#include "hi_type.h"
#include "hifb.h"
#include "mpi_vo.h"
#include "hi_comm_vo.h"
static struct fb_bitfield s_r16 = {10, 5, 0};
static struct fb_bitfield s_g16 = {5, 5, 0};
static struct fb_bitfield s_b16 = {0, 5, 0};
static struct fb_bitfield s_a16 = {15, 1, 0};
static struct fb_bitfield s_a32 = {24, 8, 0};
static struct fb_bitfield s_r32 = {16, 8, 0};
static struct fb_bitfield s_g32 = {8, 8, 0};
static struct fb_bitfield s_b32 = {0, 8, 0};
#define SCREEN_WIDTH 800
#define SCREEN_HEIGHT 1280
qInfo("FBIOGET_VSCREENINFO: %dx%d", vinfo.xres, vinfo.yres);
// add by wei
/* 1. disable HIFB show */
HI_BOOL bShow = HI_FALSE;
if (ioctl(mFbFd, FBIOPUT_SHOW_HIFB, &bShow) < 0)
{
qErrnoWarning("FBIOPUT_SHOW_HIFB failed!\n");
return false;
}
/* 2. set the screen original position */
HIFB_POINT_S stPoint = {0, 0};
if (ioctl(mFbFd, FBIOPUT_SCREEN_ORIGIN_HIFB, &stPoint) < 0)
{
qErrnoWarning("set screen original show position failed!\n");
close(mFbFd);
return false;
}
/* **********************************************************
*3. modify the variable screen info
* the screen size: IMAGE_WIDTH*IMAGE_HEIGHT
* the virtual screen size: VIR_SCREEN_WIDTH*VIR_SCREEN_HEIGHT
* (which equals to VIR_SCREEN_WIDTH*(IMAGE_HEIGHT*2))
* the pixel format: ARGB1555
**************************************************************/
HIFB_COLOR_FMT_E enClrFmt = HIFB_FMT_ARGB8888;
switch (enClrFmt)
{
case HIFB_FMT_ARGB8888:
vinfo.transp = s_a32;
vinfo.red = s_r32;
vinfo.green = s_g32;
vinfo.blue = s_b32;
vinfo.bits_per_pixel = 32;
break;
default:
vinfo.transp = s_a16;
vinfo.red = s_r16;
vinfo.green = s_g16;
vinfo.blue = s_b16;
vinfo.bits_per_pixel = 16;
break;
}
HI_BOOL bDoubleBuffer = HI_TRUE;
HI_U32 u32Width = SCREEN_WIDTH;
HI_U32 u32Height = SCREEN_HEIGHT;
switch(bDoubleBuffer)
{
case HI_FALSE:
{
vinfo.xres_virtual = u32Width;
vinfo.yres_virtual = u32Height;
vinfo.xres = u32Width;
vinfo.yres = u32Height;
}
break;
default:
{
vinfo.xres_virtual = u32Width;
vinfo.yres_virtual = u32Height * 2;
vinfo.xres = u32Width;
vinfo.yres = u32Height;
break;
}
}
vinfo.activate = FB_ACTIVATE_NOW;
/* 4. set the variable screen information */
if (ioctl(mFbFd, FBIOPUT_VSCREENINFO, &vinfo) < 0)
{
qErrnoWarning("Put variable screen info failed!\n");
close(mFbFd);
return false;
}
qInfo("FBIOPUT_VSCREENINFO: %dx%d", vinfo.xres, vinfo.yres);
/* 5. get the fix screen information */
if (ioctl(mFbFd, FBIOGET_FSCREENINFO, &finfo) < 0)
{
qErrnoWarning("Get fix screen info failed!\n");
close(mFbFd);
return false;
}
/* 6. fix some lcd color's bug */
VO_CSC_S stVoCSC;
if (HI_MPI_VO_GetGraphicLayerCSC(0, &stVoCSC) == HI_SUCCESS)
{
if(stVoCSC.enCscMatrix != VO_CSC_MATRIX_IDENTITY)
{
stVoCSC.enCscMatrix = VO_CSC_MATRIX_IDENTITY;
if(HI_MPI_VO_SetGraphicLayerCSC(0, &stVoCSC) != HI_SUCCESS)
{
qErrnoWarning("CSC failed!\n");
}
else
{
qInfo("HI_MPI_VO_SetVideoLayerCSC success!");
}
}
}
/* 7. it's time to play */
bShow = HI_TRUE;
if (ioctl(mFbFd, FBIOPUT_SHOW_HIFB, &bShow) < 0)
{
qErrnoWarning("FBIOPUT_SHOW_HIFB failed!\n");
close(mFbFd);
return false;
}
#if 0 // no need
if (ioctl(mFbFd, FBIOPAN_DISPLAY, &vinfo) < 0)
{
qErrnoWarning("FBIOPAN_DISPLAY failed!\n");
close(mFbFd);
return false;
}
#endif
qInfo("[HI3516DV300]HIFB init ok!");
重新生成liblinuxfb.so库
…/…/…/…/bin/qmake
make
将qt-everywhere-src-5.12.8/qtbase/plugins/platforms/下生成的libqlinuxfb.so拷贝到安装目录下plugins/platforms/下,替换原有liblinuxfb.so
5.编译demo
cd /opt/qt-everywhere-src-5.12.8/qtbase/examples/widgets/graphicsview/collidingmice
../../../../bin/qmake make
6.运行demo
1)打包编译好的qttar -czvf qt5.12.8_hi3516dv300.tgz qt5.12.8_hi3516dv300
将qt5.12.8_hi3516dv300.tgz拷贝到板端并解压
将编译好的collidingmice拷贝到板端
2)环境变量配置
export QT_QPA_PLATFORM_PLUGIN_PATH=/nfsroot/qt5.12.8_hi3516dv300/plugins
export QT_QPA_FONTDIR=/nfsroot/qt5.12.8_hi3516dv300/fonts
export QWS_MOUSE_PROTO="tslib:/dev/input/mice mouseman:/dev/input/mice"
export LD_LIBRARY_PATH=/nfsroot/qt5.12.8_hi3516dv300/lib:LD_LIBRARY_PATH
export QT_QPA_PLATFORM=linuxfb:tty=/dev/fb0
export
QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0:size=800x1280:offset=0x0:nographicsmodeswitch
3)运行demo
./collidingmice
参考:
https://blog.csdn.net/cocoron/article/details/105662856
https://blog.csdn.net/cocoron/article/details/105664829
声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
红包
1
收藏
评论
打赏
- 分享
- 举报
评论
1个
手气红包
-
lzt404 2024-07-07 13:26:35回复 举报请问移植QT后hdmi输出的颜色正常吗?我这边的不太正常
相关专栏
-
浏览量:1253次2024-01-08 16:49:01
-
浏览量:782次2024-02-05 17:05:51
-
浏览量:1092次2024-01-22 17:02:06
-
浏览量:1186次2024-01-13 18:14:30
-
浏览量:4828次2020-09-30 18:01:11
-
浏览量:8341次2022-06-01 10:01:04
-
浏览量:5118次2023-03-20 13:32:44
-
浏览量:3135次2023-10-13 17:55:36
-
浏览量:2277次2023-07-12 15:22:31
-
浏览量:3607次2022-10-13 17:29:06
-
浏览量:2489次2023-06-28 15:57:28
-
浏览量:1509次2023-11-06 11:04:59
-
浏览量:1503次2023-06-12 14:18:20
-
浏览量:14788次2020-12-18 17:44:33
-
浏览量:2800次2022-10-14 10:34:46
-
浏览量:2146次2024-01-18 15:07:54
-
浏览量:1008次2023-09-01 13:29:58
-
浏览量:4482次2020-07-31 13:45:09
-
浏览量:4861次2022-10-17 20:51:39
置顶时间设置
结束时间
删除原因
-
广告/SPAM
-
恶意灌水
-
违规内容
-
文不对题
-
重复发帖
打赏作者
tomato
您的支持将鼓励我继续创作!
打赏金额:
¥1
¥5
¥10
¥50
¥100
支付方式:
微信支付
打赏成功!
感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~
举报反馈
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明
审核成功
发布时间设置
发布时间:
请选择发布时间设置
是否关联周任务-专栏模块
审核失败
失败原因
请选择失败原因
备注
请输入备注