RK3588开发笔记(二):基于方案商提供sdk搭建引入mpp和sdk的宿主机交叉编译Qt5.12.10环境
前言
上一篇项目已经构建好了Qt,板子接入mipi屏幕也跑起来了,Qt也能正常运行了,现在需要接入定制开发的sdk,sdk中使用了硬解码等资源涉及到bsp的mpp,所以下一步就是引入mpp和sdk到Qt开发环境中,从而Qt中可以调用sdk接口进行进一步的应用结合开发了。
注意
本文公开了Qt开发嵌入式主板应用的实际过程,提供给读者学习参考,基本流程一致(但是有经验的开发板方案商一般会直接提供基于SDK的Qt基础环境Demo的虚拟机),本次算是额外走了一次过程,记录下,仅供参考。
本文所有资料不对外提供,遵守基本的职业道德是一切的根本,重在学习熟悉解决问题的过程。
说明
固件并没有更新,bsp的支持包是以库的形式提供,所以当作库即可。
Qt融入SDK
步骤一:分析sdk构成
这部分需要与方案商核对,当然也存在服务老厂这种,一开始就提供了完整的环境和文档,本次合作的方案商对于兼容Qt这块未弄,所以需要我们自己手动来操作。
Sdk采用的是CMake的Makefile传统bsp开发模式:
只是纯纯的sdk部分打包,这个问题也是做linux开发大部分非资深容易出现的,就是给东西永远是少东西的(最好的方式,就是自己跑一遍,避免过于的额外沟通)。
然后沟通后,我们需要包含以下的库(其中.a是静态库,.so是动态库):
步骤二:进入libcomn.a通用库,简单测试通过
运行起来,可能是libcomn.a包含后,没有变成复杂
成功了。
步骤三:sdk引入单独模块化
这是我司模块化开发的统一标准:
步骤四:引入所有的库
逐一引入到sdkManager.pri,有部分库需要做处理,正常引入的就是include和lib,不拿出来了,下面单独弄出来是需要调整修改的:
opencv库
opencv的库,有几个版本,我们是aarch64,所以单独纠正逻辑:
mpp(支持bsp开发)
下面是mpp的库,是bsp,但是出现2个.0,.1,沟通是两个版本bsp,只能说运行的时候,哪一个能跑就用哪一个,错了就换一个:
ffmpeg库
下面是ffmpeg4.0的库,这里大概率是符号连接,可能复制打包sdk的时候引用连接断了,这里直接使用文件大的进入:
sdkManager.pri
完成后的sdkManager.pri:
INCLUDEPATH += $$PWD
DEPENDPATH += $$PWD
# comn
INCLUDEPATH += $$PWD/sdk/comn/include
LIBS += -L$$PWD/sdk/comn/lib \
-lcomn
# xzsDevice
INCLUDEPATH += $$PWD/sdk/xzsDevice/include
LIBS += -L$$PWD/sdk/xzsDevice/lib \
-lrtsp_util \
-lXzsDevice
# sqlite3
INCLUDEPATH += $$PWD/sdk/sqlite3/include
LIBS += -L$$PWD/sdk/sqlite3/lib \
-lsqlite3
# Rockit
INCLUDEPATH += $$PWD/sdk/Rockit/include
LIBS += -L$$PWD/sdk/Rockit/lib \
-lasound \
-ldrm \
-lgraphic_lsf \
-ljpeg \
-lmali \
-lpanoStitchApp \
-lrga \
-lrkaiq \
-lrkgfx_avs \
-lrknn_api \
-lRkSwCac \
-lrockchip_mpp \
-lrockit \
-lturbojpeg
# opencv
INCLUDEPATH += $$PWD/sdk/opencv/opencv-linux-aarch64/include
LIBS += -L$$PWD/sdk/opencv/opencv-linux-aarch64/lib \
-llibjpeg-turbo \
-lopencv_calib3d \
-lopencv_core \
-lopencv_dnn \
-lopencv_features2d \
-lopencv_imgcodecs \
-lopencv_imgproc \
-lopencv_video
# mpp
INCLUDEPATH += $$PWD/sdk/mpp/include
LIBS += -L$$PWD/sdk/mpp/Linux/aarch64/lib \
-lrockchip_mpp
# MediaStore
INCLUDEPATH += $$PWD/sdk/MediaStore/include
LIBS += -L$$PWD/sdk/MediaStore/lib \
-lMediaStore \
-lMediaStoreClient \
-lsqlite3
# MediaReader
INCLUDEPATH += $$PWD/sdk/MediaReader/include
LIBS += -L$$PWD/sdk/MediaReader/lib \
-lMediaReader
# jsoncpp-1.9.5
INCLUDEPATH += $$PWD/sdk/jsoncpp-1.9.5/include
LIBS += -L$$PWD/sdk/jsoncpp-1.9.5/lib \
-ljsoncpp
# HiDevice
INCLUDEPATH += $$PWD/sdk/HiDevice/include
LIBS += -L$$PWD/sdk/HiDevice/lib \
-lHiDevice
# ffmpeg-4.0
INCLUDEPATH += $$PWD/sdk/ffmpeg-4.0/include
LIBS += -L$$PWD/sdk/ffmpeg-4.0/lib \
-lavcodec-58 \
-lavdevice-58 \
-lavfilter-7 \
-lavformat-58 \
-lavutil-56 \
-lpostproc-55 \
-lswresample-3 \
-lswscale-5
HEADERS += \
$$PWD/sdkManager.h
步骤五:编译引入所有化境的空Demo
编译验证库是否都引入成功:
这里沟通可能时之前mpp的版本不对,替换下版本:
测试了不行 看判断 .so和.so.1两个生成的时间是一样的 ,.so.0是空0大小,经过与方案商沟通,后面给他编译的单独库给过来,大概率是版本控制没做好,引入是肯定引入成功了,第二天再解决。
第二天重新给了所有的直接依赖的库单独打包:
重新引入,头文件用之前的,库文件用新的,逐步添加:
测试还是不行,调试库,确实没有这个函数:
协调方案上,提供我司模块化的纯引入基础函数的testSdkDemo,让方案商调通(这部分在传统开发中,一般是方案商自行testSdk验证下Qt基础环境,以确认开发的sdk能正确引入Qt,参考市面上的其他开发板方案商)。
结论
至此,由于将我司Qt测试的纯SDK给到方案商,那么方案商调通好,就可以了,其他sdk可以参考本文添加,当前使用了ffmpeg库进行了播放器展示,确认是ok的,本文结束。
RK3588开发笔记(二):基于方案商提供sdk搭建引入mpp和sdk的宿主机交叉编译Qt5.12.10环境的更多相关文章
- 运维开发笔记整理-基于类的视图(CBV)
运维开发笔记整理-基于类的视图(CBV) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.FBV与CBV 1>.什么是FBV FBC(function base views ...
- Django开发笔记二
Django开发笔记一 Django开发笔记二 Django开发笔记三 Django开发笔记四 Django开发笔记五 Django开发笔记六 1.xadmin添加主题.修改标题页脚和收起左侧菜单 # ...
- VS2017+QT5.12.10+QGIS3.16环境搭建及开发全流程
题记:大力发展生产力,助力高效采集.(转载请注明出处https://www.cnblogs.com/1024bytes/p/15477374.html) 本篇随笔分为五个部分: 一.获取QGIS3.1 ...
- 开发笔记:基于EntityFramework.Extended用EF实现指定字段的更新
今天在将一个项目中使用存储过程的遗留代码迁移至新的架构时,遇到了一个问题——如何用EF实现数据库中指定字段的更新(根据UserId更新Users表中的FaceUrl与AvatarUrl字段)? 原先调 ...
- SDL开发笔记(二):音频基础介绍、使用SDL播放音频
若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...
- EasyUI 开发笔记(二)
接上篇 :EasyUI 开发笔记(一) (http://www.cnblogs.com/yiayi/p/3485258.html) 这期就简单介绍下, easyui 的 list 展示, 在easy ...
- zlib开发笔记(三):zlib库介绍、在ubuntu上进行arm平台交叉编译
前言 方便做嵌入式arm的交叉移植zlib库. Zlib库 zlib被设计为一个免费的,通用的,法律上不受限制的-即不受任何专利保护的无损数据压缩库,几乎可以在任何计算机硬件和操作系统上使 ...
- STM32学习笔记(二) 基于STM32-GPIO的流水灯实现
学会了如何新建一个工程模板,下面就要开始动手实践了.像c/c++中经典的入门代码"hello world"一样,流水灯作为最简单的硬件设备在单片机领域也是入门首推.如果你已经有了一 ...
- Vue-cli开发笔记二----------接口调用、配置全局变量
我做的一个项目,本身是没用任何框架,纯手写的前端及数据交互,项目已经完结.最近学Vue,于是借用这个项目,改装成vue项目. (一)接口问题:使用axios的调用方法,proxyTable解决开发环境 ...
- openwrt开发笔记二:树莓派刷openwrt
前言及准备 本笔记适用于第一次给树莓派刷openwrt系统的玩家,对刷机过程及注意事项进行了记录,刷机之后对openwrt进行一些简单配置. 使用openwrt源码制作固件需要花费一点时间. 平台环境 ...
随机推荐
- GS7 备份恢复之后客户端登录报错的解决方法:COM 类工厂中 CLISID 为 xxxx的组建失败, 原因是出现了一下错误 8000401a
1. 最近需要创建一个用户的数据库应用信息, 备份恢复之后发现有时候一些环境无法使用. COM 类工厂中 CLISID 为 xxxx的组建失败, 原因是出现了一下错误 8000401a 错误图片为 2 ...
- Find -mtime 的图解
- Docker与虚拟化技术浅析第一弹之docker与Kubernetes
1 前言 Docker是一个开源的引擎,可以轻松地为任何应用创建一个轻量级的. 可移植的.自给自足的容器.开发者在笔记本电脑上编译测试通过的容器可以批量地在生产环境中部署,包括VMs (虚拟机).ba ...
- 2023年了,做SEO还有必要吗?
作者:京东科技 吴磊 搜索引擎工作原理 在搜索引擎网站的后台会有一个非常庞大的数据库,里面存储了海量的关键词,而每个关键词又对应着很多网址,这些网址是被称之为"搜索引擎蜘蛛"或&q ...
- 兄弟组件互相传递值-this.$bus.$emit与this.$bus.$on
B组件向C组件传递一个值. 一种组件间通信的方式, 适用于任意的组件间通信. 适用于任意的组件间通信. 适用于任意的组件间通信. 通过this.$bus.$emit('事件名',数据)进行提供数据 通 ...
- 几种方法验证unity是否为development build
我在月初接入了uwa的性能测试SDK,需要提交一个development build的游戏安装包给uwa进行真人真机测试,本文说下如何判断安装包是否为development build. 直观上判断 ...
- vim 从嫌弃到依赖(12)——打开及保存文件
在前几篇文章中,我们从vim各种模式的使用着手介绍了vim如何进行文本本身的编辑.也通过缓冲区列表的介绍了解到了vim是如何进行打开文件的管理.这篇我们将会着眼于文件的打开和保存的基本操作.通过这篇的 ...
- TienChin 渠道管理-添加渠道页面开发
略过,前面已将渠道管理的 index.vue 文件内容全部粘贴给你们了.
- 数据共享Manager(Python)
from multiprocessing import Process,Manager,Lock def change_dic(dic,lock): with lock: dic['count'] - ...
- 如何在 macOS Sonoma 虚拟机中安装 VMware Tools
vmware-tools VMware Tools 简介 VMware Tools 中包含一系列服务和模块,可在 VMware 产品中实现多种功能,从而使用户能够更好地管理客户机操作系统,以及与客户机 ...