RK3588开发笔记(二):基于方案商提供sdk搭建引入mpp和sdk的宿主机交叉编译Qt5.12.10环境

若该文为原创文章,转载请注明原文出处

本文章博客地址:https://hpzwl.blog.csdn.net/article/details/133915614

红胖子网络科技博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中...

瑞芯微开发专栏

上一篇:《RK3588开发笔记(一):基于方案商提供的宿主机交叉编译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:

  

  

  

cpp 复制代码
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开发笔记(一):基于方案商提供的宿主机交叉编译Qt5.12.10

下一篇:敬请期待...

相关推荐
尘中远1 小时前
【Qwt 7.0 系列】快速入门与核心新特性概览 —— 更现代的 Qt 数据可视化库
qt·数据可视化·绘图·qwt·科学绘图
初阳7853 小时前
【Qt】系统相关(3)——多线程
qt
初阳7856 小时前
【Qt】系统相关(2)——文件
开发语言·qt
尘中远20 小时前
【Qwt 7.0 系列】坐标轴与刻度系统 —— 刻度引擎、网格、图例与刻度朝内
qt·数据可视化·qcustomplot·qwt·工业软件·科学绘图
sycmancia1 天前
Qt——多线程间的互斥
开发语言·qt
尘中远1 天前
【Qwt 7.0 系列】常用图表类型实战 —— 柱状图、散点图、箱线图与直方图
qt·qwt·工业软件·科学绘图
尘中远1 天前
【Qwt 7.0 系列】交互功能详解 —— 平移、缩放、坐标轴交互与数据拾取
qt·数据可视化·绘图·qcustomplot·qwt·科学绘图
sycmancia1 天前
Qt——进程与线程的概念
qt
郝学胜-神的一滴1 天前
Qt 高级编程 034:深耕QWidget底层内核—彻底吃透无边框窗口设计核心原理
开发语言·c++·qt·程序人生·软件开发·用户界面
尘中远1 天前
【Qwt 7.0 系列】3D 数据可视化 —— OpenGL 高性能三维绘图
qt·3d·qcustomplot·qwt·科学绘图·高性能绘图