32486
- 收藏
- 点赞
- 分享
- 举报
Qt+海思sample基础代码,快速开发必备!!
本帖最后由 ymir 于 2019-9-26 22:55 编辑
2019-09-26
其实在海思上使用Qt没有必要像该帖子的描述的方法那么复杂,而且使用帖子里描述的方式实施起来也特别的麻烦。从我发这个帖子到现在已经有四年了,我看大家还在关注这个老的帖子,真是过意不去。
Qt4.8的界面实现基于Framebuffer,因此在海思系统中,如果要使用Qt进行界面开发,你必须将Framebuffer初始化好,而初始化Fb,必须先初始化MPI系统。因此比较方便的方式就是使用海思的媒体库,编写一个媒体初始化动态库,此动态库完成MPI系统,FrameBuffer系统的配置,给Qt界面系统的运行创建环境。Qt的界面系统在QApplicatio启动之前都不会去动FrameBuffer,因此在你的QApplication对象调用exce()之前对媒体系统进行初始化动态库即可。
当然这个最终方式我早就发了帖子了,竟然没什么人看。。。
地址 [url]http://bbs.ebaina.com/forum.php?mod=viewthread&tid=10915&extra=&page=1[/url]
这是我上一个粗略的过程,记录之前走过的路,大家也可以参考一下。我也是帮助了两个网友后突发的想写这个帖子,
帮助大家在Qt的移植过程中加快步伐!
[url=http://www.ebaina.com/bbs/forum.php?mod=viewthread&tid=8036&extra=page%3D1]我的上个帖子[/url]
Qt编译过程可以参看GoodMan大神的编译过程
地址:[url=http://www.ebaina.com/bbs/forum.php?mod=viewthread&tid=8086&extra=page%3D1]嵌入式Qt编译过程[/url]
我的Qt库的编译安装路径为/opt/Qt4.8
就是在编译的时候指定 --prefix /opt/Qt4.8
编译完成后的目录大概是这样的
[code][root@bogon:1 opt]# tree Qt4.8/ -L 1
Qt4.8/
├── bin
├── include
├── lib
├── mkspecs
├── plugins
└── translations[/code]
之后将海思sample目录下的东西库拷贝到这里
[code][root@bogon:1 opt]# tree Qt4.8/ -L 1
Qt4.8/
├── bin
├── hilib // mpp 目录下的lib文件夹的内容都放在这里
├── hinclude // mpp 目录下的include下的所有文件都放在这里
├── include
├── lib
├── mkspecs
├── plugins
└── translations[/code]
因为我们的目的是在代码中复用sample下的基础代码,然而这部分代码与内核代码,以及外部驱动代码都有一定的联系我之前试着
将这部分代码抽离出来,后来没成功。考虑到可能要做的移植工作很多,最后还是决定将qt工程嵌入到samplke目录下,直接使用其
各个目录下的Makefiel文件,因为他们都已经定义好了编译规则,我们只需要参考其他的工程文件的Makeifle即可定义好我们的规则。
开动:
Qt库我就不说了,按照自己的配置也可以,只要将相应的库文件放进去就行了,库文件移植到板子的时候,只需要留下so动态库文
件即可,其余的静态库.a文件什么的,以及工具都删除即可,将库放到板子的同目录就可以了,在指定库搜索路径添加你的的动态
库路径。我之前写了个qt的测试程序,拖了几个控件,在windows上编译通过。之后我们将该工程代码放到sample目录下,大概是
这样的:
[code]
[root@bogon:1 sample]# tree -L 1
.
├── audio
├── common
├── guiclick //该目录为从测试工程目录,其中存放着代码
├── hifb
├── LIB
├── Makefile
├── Makefile.param
├── QtBuild //该目录为新建的编译目录。
├── region
├── tde
├── vda
├── vdec
├── venc
├── vio
└── work[/code]
然后在~/.bashrc 中添加一行PATH=$PATH:/opt/Qt4.8.5
运行source ~/.bahrc 使变量生效,之后运行qmake如果有正常的输出,就是配置好了,
若没有检查相应的错误。
之后就开始我们的移植之路
我们将工程文件放到sample目录下。工程目录大概这样的:
[code][root@bogon:1 sample]# tree -L 1 guiclick/
guiclick/
├── guiclick.pro
├── guiclick.pro.user
├── main.cpp
├── mainwindow.cpp
├── mainwindow.h
└── mainwindow.ui[/code]
然后我们在sample下新建一个编译目录: mkdir Qtbuild,
进入Qtbuild。
之后使用命令[root@bogon:1 QtBuild]# qmak -r ../guiclick/guiclick.pro生成Makefile
然后修改Makefile文件内容,请注意下面变更的内容,尤其注意 “=”号前面是否有”:“,“+”等符号
修改Makefile内容 变更:
[code] 9 ####### Compiler, tools and options
10 include ../Makefile.param
// 添加一行: 添加sample目录编译控制文件。
11 CC = arm-hisiv100nptl-linux-gcc
14 #CFLAGS := -pipe -O2 -Wall -W -D_REENTRANT $(DEFINES)
//因为在上层的Makefile.parram中定义了CFALGS,而我们的编译需要依赖该
//选项,所以这里修改为+=
15 CFLAGS += -pipe -O2 -Wall -W -D_REENTRANT $(DEFINES)
16 CXXFLAGS = -pipe -O2 -Wall -W -D_REENTRANT $(DEFINES)
16 CXXFLAGS = -pipe -O2 -Wall -W -D_REENTRANT $(DEFINES)
17 INCPATH := -I/opt/Qt4.8/mkspecs/qws/linux-arm-hisiv100nptl-g++ -I../guiclick -I/opt/Qt4.8/include/QtCore -I/opt/Qt4.8/include/QtNetwork -I/ opt/Qt4.8/include/QtGui -I/opt/Qt4.8/include -I. -I. -I../guiclick -I.
//这里是添加海思库的头文件支持。
18 INCPATH += -I/opt/Qt4.8/hinclud -I.
21 LIBS := $(SUBLIBS) -L/opt/Qt4.8/lib -lQtGui -L/opt/Qt4.8/lib -lQtNetwork -lQtCore -lpthread
//添加海思库文件依赖,为了方便,我们把所有的库文件都指定
22 LIBS += -L/opt/Qt4.8/hilib -lmpi -lhdmi -ltde -lanr -laec -ljpeg -lresampler -lVoiceEngine
23 AR = arm-hisiv100nptl-linux-ar cqs
86 .SUFFIXES: .o .c .cpp .cc .cxx .C
87
88 .cpp.o:
89 $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" $(MPI_LIBS) $(AUDIO_LIBA) $(JPEGD_LIBA)
// 添加这部分主要是在编译main.cpp的时候需要到这些库的支持,这些库在上层的Makefile.param中定义了
90
104
105 all: Makefile $(TARGET)
106
// 编译的目标文件依赖于公共代码,就是上层的common文件夹下的代码,使用该部分代码可以快速开发
107 $(TARGET): ui_mainwindow.h $(OBJECTS) $(COMM_OBJ)
// 添加链接参数,加入海思库文件以及公共代码的编译.o文件
108 $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(COMM_OBJ) $(LIBS)
219
220 main.o: ../guiclick/main.cpp
// CFLAG指定了common文件夹的头文件,而我们使用的sample的实例代码主要还是这部分,如果不加CFLAG
//会有hi_common.h,以及某些驱动头文件找不到的错误,在编译的时候也需要指定库
221 $(CXX) -c $(CXXFLAGS) $(CFLAGS) $(INCPATH) -o main.o ../guiclick/main.cpp
222
[/code]
之后是guiclick/main.cpp文件内容的更改,主要是在该文件中对相关内容进行初始化。代码在二楼给出
之后就是可以编译了。运行make即可编译出来了。编译出来放到板子上运行就好咯。
PDF下载:
附件:Qt库移植--基于海思平台.pdf
2019-09-26
其实在海思上使用Qt没有必要像该帖子的描述的方法那么复杂,而且使用帖子里描述的方式实施起来也特别的麻烦。从我发这个帖子到现在已经有四年了,我看大家还在关注这个老的帖子,真是过意不去。
Qt4.8的界面实现基于Framebuffer,因此在海思系统中,如果要使用Qt进行界面开发,你必须将Framebuffer初始化好,而初始化Fb,必须先初始化MPI系统。因此比较方便的方式就是使用海思的媒体库,编写一个媒体初始化动态库,此动态库完成MPI系统,FrameBuffer系统的配置,给Qt界面系统的运行创建环境。Qt的界面系统在QApplicatio启动之前都不会去动FrameBuffer,因此在你的QApplication对象调用exce()之前对媒体系统进行初始化动态库即可。
当然这个最终方式我早就发了帖子了,竟然没什么人看。。。
地址 [url]http://bbs.ebaina.com/forum.php?mod=viewthread&tid=10915&extra=&page=1[/url]
这是我上一个粗略的过程,记录之前走过的路,大家也可以参考一下。我也是帮助了两个网友后突发的想写这个帖子,
帮助大家在Qt的移植过程中加快步伐!
[url=http://www.ebaina.com/bbs/forum.php?mod=viewthread&tid=8036&extra=page%3D1]我的上个帖子[/url]
Qt编译过程可以参看GoodMan大神的编译过程
地址:[url=http://www.ebaina.com/bbs/forum.php?mod=viewthread&tid=8086&extra=page%3D1]嵌入式Qt编译过程[/url]
我的Qt库的编译安装路径为/opt/Qt4.8
就是在编译的时候指定 --prefix /opt/Qt4.8
编译完成后的目录大概是这样的
[code][root@bogon:1 opt]# tree Qt4.8/ -L 1
Qt4.8/
├── bin
├── include
├── lib
├── mkspecs
├── plugins
└── translations[/code]
之后将海思sample目录下的东西库拷贝到这里
[code][root@bogon:1 opt]# tree Qt4.8/ -L 1
Qt4.8/
├── bin
├── hilib // mpp 目录下的lib文件夹的内容都放在这里
├── hinclude // mpp 目录下的include下的所有文件都放在这里
├── include
├── lib
├── mkspecs
├── plugins
└── translations[/code]
因为我们的目的是在代码中复用sample下的基础代码,然而这部分代码与内核代码,以及外部驱动代码都有一定的联系我之前试着
将这部分代码抽离出来,后来没成功。考虑到可能要做的移植工作很多,最后还是决定将qt工程嵌入到samplke目录下,直接使用其
各个目录下的Makefiel文件,因为他们都已经定义好了编译规则,我们只需要参考其他的工程文件的Makeifle即可定义好我们的规则。
开动:
Qt库我就不说了,按照自己的配置也可以,只要将相应的库文件放进去就行了,库文件移植到板子的时候,只需要留下so动态库文
件即可,其余的静态库.a文件什么的,以及工具都删除即可,将库放到板子的同目录就可以了,在指定库搜索路径添加你的的动态
库路径。我之前写了个qt的测试程序,拖了几个控件,在windows上编译通过。之后我们将该工程代码放到sample目录下,大概是
这样的:
[code]
[root@bogon:1 sample]# tree -L 1
.
├── audio
├── common
├── guiclick //该目录为从测试工程目录,其中存放着代码
├── hifb
├── LIB
├── Makefile
├── Makefile.param
├── QtBuild //该目录为新建的编译目录。
├── region
├── tde
├── vda
├── vdec
├── venc
├── vio
└── work[/code]
然后在~/.bashrc 中添加一行PATH=$PATH:/opt/Qt4.8.5
运行source ~/.bahrc 使变量生效,之后运行qmake如果有正常的输出,就是配置好了,
若没有检查相应的错误。
之后就开始我们的移植之路
我们将工程文件放到sample目录下。工程目录大概这样的:
[code][root@bogon:1 sample]# tree -L 1 guiclick/
guiclick/
├── guiclick.pro
├── guiclick.pro.user
├── main.cpp
├── mainwindow.cpp
├── mainwindow.h
└── mainwindow.ui[/code]
然后我们在sample下新建一个编译目录: mkdir Qtbuild,
进入Qtbuild。
之后使用命令[root@bogon:1 QtBuild]# qmak -r ../guiclick/guiclick.pro生成Makefile
然后修改Makefile文件内容,请注意下面变更的内容,尤其注意 “=”号前面是否有”:“,“+”等符号
修改Makefile内容 变更:
[code] 9 ####### Compiler, tools and options
10 include ../Makefile.param
// 添加一行: 添加sample目录编译控制文件。
11 CC = arm-hisiv100nptl-linux-gcc
14 #CFLAGS := -pipe -O2 -Wall -W -D_REENTRANT $(DEFINES)
//因为在上层的Makefile.parram中定义了CFALGS,而我们的编译需要依赖该
//选项,所以这里修改为+=
15 CFLAGS += -pipe -O2 -Wall -W -D_REENTRANT $(DEFINES)
16 CXXFLAGS = -pipe -O2 -Wall -W -D_REENTRANT $(DEFINES)
16 CXXFLAGS = -pipe -O2 -Wall -W -D_REENTRANT $(DEFINES)
17 INCPATH := -I/opt/Qt4.8/mkspecs/qws/linux-arm-hisiv100nptl-g++ -I../guiclick -I/opt/Qt4.8/include/QtCore -I/opt/Qt4.8/include/QtNetwork -I/ opt/Qt4.8/include/QtGui -I/opt/Qt4.8/include -I. -I. -I../guiclick -I.
//这里是添加海思库的头文件支持。
18 INCPATH += -I/opt/Qt4.8/hinclud -I.
21 LIBS := $(SUBLIBS) -L/opt/Qt4.8/lib -lQtGui -L/opt/Qt4.8/lib -lQtNetwork -lQtCore -lpthread
//添加海思库文件依赖,为了方便,我们把所有的库文件都指定
22 LIBS += -L/opt/Qt4.8/hilib -lmpi -lhdmi -ltde -lanr -laec -ljpeg -lresampler -lVoiceEngine
23 AR = arm-hisiv100nptl-linux-ar cqs
86 .SUFFIXES: .o .c .cpp .cc .cxx .C
87
88 .cpp.o:
89 $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" $(MPI_LIBS) $(AUDIO_LIBA) $(JPEGD_LIBA)
// 添加这部分主要是在编译main.cpp的时候需要到这些库的支持,这些库在上层的Makefile.param中定义了
90
104
105 all: Makefile $(TARGET)
106
// 编译的目标文件依赖于公共代码,就是上层的common文件夹下的代码,使用该部分代码可以快速开发
107 $(TARGET): ui_mainwindow.h $(OBJECTS) $(COMM_OBJ)
// 添加链接参数,加入海思库文件以及公共代码的编译.o文件
108 $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(COMM_OBJ) $(LIBS)
219
220 main.o: ../guiclick/main.cpp
// CFLAG指定了common文件夹的头文件,而我们使用的sample的实例代码主要还是这部分,如果不加CFLAG
//会有hi_common.h,以及某些驱动头文件找不到的错误,在编译的时候也需要指定库
221 $(CXX) -c $(CXXFLAGS) $(CFLAGS) $(INCPATH) -o main.o ../guiclick/main.cpp
222
[/code]
之后是guiclick/main.cpp文件内容的更改,主要是在该文件中对相关内容进行初始化。代码在二楼给出
之后就是可以编译了。运行make即可编译出来了。编译出来放到板子上运行就好咯。
PDF下载:
附件:Qt库移植--基于海思平台.pdf

下载
我来回答
回答132个
时间排序
认可量排序
认可0
认可0
认可0
认可0
认可0
认可0
认可0
认可0
认可0
认可0
认可0
认可0
认可0
认可0
认可0
认可0
认可0
认可0
认可0
认可0
加载中···
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币
Markdown 语法
- 加粗**内容**
- 斜体*内容*
- 删除线~~内容~~
- 引用> 引用内容
- 代码`代码`
- 代码块```编程语言↵代码```
- 链接[链接标题](url)
- 无序列表- 内容
- 有序列表1. 内容
- 缩进内容
- 图片
相关问答
-
2017-08-17 11:57:34
-
2015-07-28 11:33:12
-
2013-06-24 15:45:00
-
2015-09-15 16:55:59
-
2017-04-11 10:21:01
-
2016-04-08 23:45:46
-
2015-08-14 09:54:01
-
2016-08-26 10:17:04
-
2016-11-25 17:01:55
-
2017-10-09 16:50:21
-
2015-01-30 20:24:25
-
2015-07-06 12:27:16
-
2019-07-01 17:21:35
-
2017-02-13 15:52:07
-
2016-11-04 18:55:16
-
2016-06-29 18:03:58
-
2018-12-26 21:22:40
-
2019-11-16 17:36:40
-
02017-11-24 10:40:40
无更多相似问答 去提问

点击登录
-- 积分
-- E币
提问
—
收益
—
被采纳
—
我要提问
切换马甲
上一页
下一页
举报反馈
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明
提醒
你的问题还没有最佳答案,是否结题,结题后将扣除20%的悬赏金
取消
确认
提醒
你的问题还没有最佳答案,是否结题,结题后将根据回答情况扣除相应悬赏金(1回答=1E币)
取消
确认