首页问答详情

海思3519开发板上移植Qt5.7遇到问题

 
leilc
leilc  发布于  2016-06-29 18:03:58
采纳率 0%
2个问答

环境: HOST: Ubuntu 14.04.1 板卡:hi3519评估板 SDK:Hi3519_SDK_V1.0.2.0 Qt版本: 5.7

我是Qt新人,目的是在3519板子上用Qt作界面。因为3519 SDK里面gcc版本太新,编译Qt4有问题(我试过4.6),因此索性用最新的5.7

目前情况:Qt交叉编译完成,用静态编译生成的控制台(console)Qt程序可以在3519板子上运行并打印出hello world。因此Qt本身的交叉编译,生成的静态库应当都没有问题。

进一步尝试界面程序(就是一个窗体空壳),步骤如下:

  1. 参照论坛nfswfx兄的帖子 http://www.ebaina.com/bbs/forum.php?mod=viewthread&tid=11722&extra=page%3D2,把他的两个.h和.cpp文件添加到程序文件夹编译,目的是能在hifb输出
  2. 把拨码开关拨到HDMI输出
  3. 运行load3519,包括hifb在内的各模块加载正常
  4. 命令行下运行界面程序 / # ./test0629 显示错误 This application failed to start because it could not find or load the Qt platform plugin "xcb" in "".

如果运行 / # ./test0629 -platform linuxfb 或者 / # ./test0629 -platform hsfb 则提示类似错误,表示没有包含linuxfb和hsfb

我的configure设置 (写的可能有问题,不知道怎么把那些不需要的模块去掉,所以逐条no或者skip):

./configure \ -prefix /usr/local/qt5.7_static \ -confirm-license \ -opensource \ -static \ -release \ -xplatform linux-arm-hisiv500-g++ \ -qt-libjpeg \ -no-opengl \ -no-xcb \ -no-largefile \ -no-accessibility \ -no-sse2 \ -nomake tests \ -nomake examples \ -nomake tools \ -no-openssl \ -no-nis \ -no-cups \ -no-dbus \ -no-sql-sqlite \ -skip qt3d \ -skip qtactiveqt \ -skip qtandroidextras \ -skip qtcanvas3d \ -skip qtcharts \ -skip qtconnectivity \ -skip qtdatavis3d \ -skip qtdeclarative \ -skip qtdoc \ -skip qtgamepad \
-skip qtgraphicaleffects \ -skip qtimageformats \ -skip qtlocation \ -skip qtmacextras \ -skip qtmultimedia \ -skip qtpurchasing \ -skip qtquickcontrols \ -skip qtquickcontrols2 \ -skip qtscript \ -skip qtscxml \ -skip qtsensors \ -skip qtserialbus \ -skip qtserialport \ -skip qtsvg \ -skip qttools \ -skip qttranslations \ -skip qtvirtualkeyboard \ -skip qtwayland \ -skip qtwebchannel \ -skip qtwebsockets \ -skip qtwebview \ -skip qtwinextras \ -skip qtx11extras \ -skip qtxmlpatterns \ -no-qpa-platform-guard

我的qmake.conf

#

qmake configuration for building with arm-hisiv500-linux-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)

leilc added

QT_QPA_DEFAULT_PLATFORM = hifb #eglfs

QMAKE_CFLAGS_RELEASE += -O2

QMAKE_CXXFLAGS_RELEASE += -O2 -march=armv7

modifications to g++.conf

QMAKE_CC = arm-hisiv500-linux-gcc QMAKE_CXX = arm-hisiv500-linux-g++ QMAKE_LINK = arm-hisiv500-linux-g++ QMAKE_LINK_SHLIB = arm-hisiv500-linux-g++

modifications to linux.conf

QMAKE_AR = arm-hisiv500-linux-ar cqs QMAKE_OBJCOPY = arm-hisiv500-linux-objcopy QMAKE_NM = arm-hisiv500-linux-nm -P QMAKE_STRIP = arm-hisiv500-linux-strip load(qt_config)

目前我有两个问题:

  1. 怎样让程序运行不报错,或者是跟hifb对接上。
  2. 如何能在外接的hdmi屏幕上显示界面

请大家赐教,十分感谢。

我来回答
13588
0
0
回答
15个
易百纳技术社区
ngswfx 发布于2016-06-29 18:48:50
本帖最后由 ngswfx 于 2016-6-29 18:50 编辑

我的那个方法,你需要先执行一个基于海思的程序,把VO以及HDMI都开启,并且要开启HIFB,自己能叠加一张图片,并且已经在HDMI显示的情况下,再开启QT程序。这时候,QT程序就可以利用HIFB显示界面了。

///一定要确保VO和HDMI开启成功,显示正常,并且HIFB也正常,你可以尝试叠加点东西,画个黑框框也行。

//由于我是在我前期的基础上调试的,这2点都可以保证,所以QT直接就出来了。

//一定先把基于海思的程序先调试通,可以在VO和HIFB 相关的demo基础上修改集成一下,贴一个bmp图也可以。对于FB0图像层,是可以几个程序都访问的,可以这么干。之不过图像会有点乱,都调试好了以后,禁止海思应用程序绘制即可。但是VO以及HIFB一定保证正常才行。

我现在写的程序,就是2个独立的程序,一个和海思SDK很紧密,就是负责解码显示等工作,另外一个就是QT的设置程序。

只要先执行解码程序,在解码程序内部,当HIFB开启成功后,我再调用QT界面程序,就可以配置参数了。
0
易百纳技术社区
ngswfx 发布于2016-06-29 18:53:44
本帖最后由 ngswfx 于 2016-6-29 19:03 编辑

你现在的这个报错,明显是少了插件,并且显示设备没打开,也就是VO没开启,HDMI没开启,到QT SDK里面找找plugin,也放到板子上去,然后注意使用:

export LD_LIBRARY_PATH=/usr/local/lib:/usr/lib:/root
export QWS_SIZE='1024X768'
export QT_QWS_FONTDIR=/root/fonts
#export QWS_USB_KEYBOARD=/dev/event0
#export QWS_USB_MOUSE=/dev/event0


这一类命令把lib以及plugin目录指定一下,不同QT版本可能不同,你可以看看其他资料。


////////另外如果你不是考虑做通用程序的话,倒是可以考虑直接在QT里面直接调用海斯的SDK,开启VO以及HIFB,这样总内存占用还会小一点。我当时之所以界面和海斯SDK剥离,主要为了让QT界面程序,能编译一次,可以运行在各个海斯芯片上,无需再次编译。
0
易百纳技术社区
leilc 发布于2016-06-30 09:08:57
[quote][url=forum.php?mod=redirect&goto=findpost&pid=32838&ptid=11795]ngswfx 发表于 2016-6-29 18:53[/url]
你现在的这个报错,明显是少了插件,并且显示设备没打开,也就是VO没开启,HDMI没开启,到QT SDK里面找找pl ...[/quote]

多谢兄弟。你的回复帮我理清了概念。

3519本身是BT1120输出,HDMI是用9024a芯片转接的。我在开发包里面没有找到如何使用这个9024a的参考设计,有可能仅仅是我没有找到而已。请问在3516上是否HDMI也是转接出来的,如何去使能它,多谢。
0
易百纳技术社区
goodman 发布于2016-06-30 09:17:40
wooshang@126.com
[quote][url=forum.php?mod=redirect&goto=findpost&pid=32838&ptid=11795]ngswfx 发表于 2016-6-29 18:53[/url]
你现在的这个报错,明显是少了插件,并且显示设备没打开,也就是VO没开启,HDMI没开启,到QT SDK里面找找pl ...[/quote]

Qt5+以上版本已经没有QWS了。
0
易百纳技术社区
goodman 发布于2016-06-30 09:22:18
wooshang@126.com
建议你用Qt4.8.6的,新的编译器编译Qt4.8.6绝对没有问题。V500的编译器是gcc5.0的?

等我抽个时间调试下Qt5.6弄个教程上来。。Qt5上的东西很多已经换了,库也大了不少。
0
易百纳技术社区
leilc 发布于2016-06-30 15:20:45
本帖最后由 leilc 于 2016-6-30 15:30 编辑

goodman兄: 找了半天没找到你的库,汗。。。我直接在论坛里面搜你名字

目前Qt我暂时放一边,想先用海思的sample程序点亮HDMI输出,然后再弄Qt输出到hifb。3519的输出cvbs和BT1120,  HDMI是通过9024a芯片转的

我的步骤:

1. 把load3519脚本中加上
insmod extdrv/sil9024.ko norm=12

同时修改hifb.ko的参数为
insmod hifb.ko viedo="hifb:vram0_size:16200"  # 1080p x 4 x 2

2. 运行mpp_big-little/sample/hifb下面的sample_hifb,出来两个选项:
0)vo cvbs output, default
1) vo BT1120 output

我修改代码,把这句
g_enVoIntfType = VO_INTF_BT1120
改成了
g_enVoIntfType = VO_INTF_HDMI

本来CVBS输出时候,运行程序打印信息正常,仅仅是HDMI无输出(本来就应该无输出,此时输出是BT1120)。改了这一句之后,运行出错,输出:

**********************************************************
[SAMPLE_COMM_VO_StartDev] -189: failed with 0xa00f8008!
[SAMPLE_HIFB_DoubleBufMode] -1999: start vo dev failed with -1!

对应代码段:

HI_S32 SAMPLE_COMM_VO_StartDev(VO_DEV VoDev, VO_PUB_ATTR_S* pstPubAttr)
{
    HI_S32 s32Ret = HI_SUCCESS;
    //printf("-----------------dev:%d\n", VoDev);
    s32Ret = HI_MPI_VO_SetPubAttr(VoDev, pstPubAttr);
    if (s32Ret != HI_SUCCESS)
    {
        SAMPLE_PRT("failed with %#x!\n", s32Ret);
        return HI_FAILURE;
    }

    s32Ret = HI_MPI_VO_Enable(VoDev);
    if (s32Ret != HI_SUCCESS)
    {
        SAMPLE_PRT("failed with %#x!\n", s32Ret);
        return HI_FAILURE;
    }



    s32Ret = SAMPLE_COMM_VO_StartDev(VoDev, &stPubAttr);
    if (HI_SUCCESS != s32Ret)
    {
        SAMPLE_PRT("start vo dev failed with %d!\n", s32Ret);
        goto SAMPLE_HIFB_DoubleBufMode_0;
    }

通过lsmod,看到9024模块已经加载了。不知道什么原因导致VO_INTF_HDMI参数传下去之后运行出错。但目前还没找到解决方案。有哪位兄弟碰到过这个问题,多谢。

0
易百纳技术社区
leilc 发布于2016-06-30 15:27:58
本帖最后由 leilc 于 2016-6-30 16:36 编辑

在pinmux_3519里面,

看到

#i2c3 -> aic31/9024
i2c3_pin_mux()
{
        himm 0x1204009c 0x1;        #0:GPIO6_3        1:I2C3_SDA
        himm 0x120400a0 0x1;        #0:GPIO6_4        1:I2C3_SCL
}

设置也没有问题,9024需要I2C。

修改了hifb_sample.c程序。例程本来是rgba1555格式,修改为rgba8888格式之后运行不再报错,但仍然在HDMI显示器上没有输出。
0
易百纳技术社区
ngswfx 发布于2016-07-05 01:03:08
本帖最后由 ngswfx 于 2016-7-17 02:55 编辑

刚发现一个问题,我把tde驱动的默认参数弄成320 *240 qt界面就显示不出来了,你设置时候也注意一下,少走弯路:

//////////////////////////////////////
注意:  下面2个最好都配置好,tde也要配置的大一些,否则QT打开容易失败,我弄成320 *240就不行
insmod hi3520D_tde.ko g_u32TdeTmpBufW=1920 g_u32TdeTmpBufH=1080
insmod hifb.ko video="hifb:vram0_size:8100,vram1_size:32,vram2_size:32,vram3_size:32" softcursor="off" u32VcmpBufNum=2



//////////////////////后续的测试表明,这里无需管tde问题,当时估计牵扯其他改动,所以异常了
0
易百纳技术社区
leilc 发布于2016-07-05 22:25:32
[quote][url=forum.php?mod=redirect&goto=findpost&pid=33192&ptid=11795]ngswfx 发表于 2016-7-5 01:03[/url]
刚发现一个问题,我把tde驱动的默认参数弄成320 *240 qt界面就显示不出来了,你设置时候也注意一下,少走弯 ...[/quote]

多谢。我再试试。

0
易百纳技术社区
leilc 发布于2016-07-12 10:17:03
[quote][url=forum.php?mod=redirect&goto=findpost&pid=32859&ptid=11795]goodman 发表于 2016-6-30 09:22[/url]
建议你用Qt4.8.6的,新的编译器编译Qt4.8.6绝对没有问题。V500的编译器是gcc5.0的?

等我抽个时间调试下 ...[/quote]

goodman兄好:

v500的编译器是gcc 4.9.4
忘了ngswfx兄还是谁提到你有裁剪好的Qt4.8.6的库,请问能分享不?
多谢。
0
易百纳技术社区
leilc 发布于2016-07-12 10:19:03
[quote][url=forum.php?mod=redirect&goto=findpost&pid=32838&ptid=11795]ngswfx 发表于 2016-6-29 18:53[/url]
你现在的这个报错,明显是少了插件,并且显示设备没打开,也就是VO没开启,HDMI没开启,到QT SDK里面找找pl ...[/quote]

前两周做别的事情的耽误了。HDMI有输出了。
是我太挫了,3519的板子的HDMI是用9024芯片转的,我没执行pinmux那个脚本,因此i2c没有配置给9024。。。
0
易百纳技术社区
cy_ygs 发布于2016-12-26 16:12:58
学习下,支持
0
易百纳技术社区
qn1534754405 发布于2019-08-09 08:22:19
请问移植完之后你的环境变量怎么配置的,我运行qt程序移植提示没有linuxfb插件
0
易百纳技术社区
天道酬勤 发布于2019-08-13 10:52:47
xcb 这个问题是plugin 吗? 为什么我把这个放在开发板上  还是xcb 报错
0
易百纳技术社区
ericbin 发布于2019-08-13 13:31:29
qt应该没有这么难吧
0

Markdown 语法

  • 加粗 **内容**
  • 斜体 *内容*
  • 删除线 ~~内容~~
  • 引用 > 引用内容
  • 代码 `代码`
  • 代码块 ```编程语言↵代码```
  • 链接 [链接标题](url)
  • 无序列表 - 内容
  • 有序列表 1. 内容
  • 缩进 内容
  • 图片 ![alt](url)

Markdown 语法

  • 加粗 **内容**
  • 斜体 *内容*
  • 删除线 ~~内容~~
  • 引用 > 引用内容
  • 代码 `代码`
  • 代码块 ```编程语言↵代码```
  • 链接 [链接标题](url)
  • 无序列表 - 内容
  • 有序列表 1. 内容
  • 缩进 内容
  • 图片 ![alt](url)
+ 添加网盘链接/附件
或将文件直接拖到这里
悬赏:
EBC
网盘
* 网盘链接:
* 提取码:
悬赏:
EBC
Loading...
易百纳技术社区
确定要删除此文章、专栏、评论吗?
确定
取消
易百纳技术社区
易百纳技术社区
在专栏模块发布专栏,可获得其他E友的打赏
易百纳技术社区
回答悬赏问答,被题主采纳后即可获得悬赏金
易百纳技术社区
在上传资料时,有价值的资料可设置为付费资源
易百纳技术社区
达到一定金额,收益即可提现~
收益也可用来充值ebc,下载资料、兑换礼品更容易
易百纳技术社区
活动规则
  • 1.周任务为周期性任务,每周周一00:00刷新,上周完成的任务不会累计到本周,本周需要从头开始任务,当前任务完成后才可以完成下一个任务
  • 2.发布的专栏与资料需要与平台的板块有相关性,禁止注水,专栏/资料任务以审核通过的篇数为准
  • 3.任务完成后,现金奖励直接打款到微信账户;EBC/收益将自动发放到个人账户,可前往“我的钱包”查看;其他奖励请联系客服兑换
  • 4.每周最后三个任务将会有以下奖品掉落:社区热卖开发板、小米音响、视频年度会员、京东卡、华为手机等等
易百纳技术社区
升级提醒
易百纳技术社区

恭喜您由入门

社区送出礼品一份

请填写您的收件地址,礼品将在3个工作日寄出

易百纳技术社区