• 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:
      在这里插入图片描述

      在这里插入图片描述
      在这里插入图片描述

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90

    步骤五:编译引入所有化境的空Demo

      编译验证库是否都引入成功:
      在这里插入图片描述

      在这里插入图片描述

      在这里插入图片描述

      这里沟通可能时之前mpp的版本不对,替换下版本:
      在这里插入图片描述

      测试了不行 看判断 .so和.so.1两个生成的时间是一样的 ,.so.0是空0大小,经过与方案商沟通,后面给他编译的单独库给过来,大概率是版本控制没做好,引入是肯定引入成功了,第二天再解决。
      第二天重新给了所有的直接依赖的库单独打包:
      在这里插入图片描述

      重新引入,头文件用之前的,库文件用新的,逐步添加:
      在这里插入图片描述

      测试还是不行,调试库,确实没有这个函数:
      在这里插入图片描述

      协调方案上,提供我司模块化的纯引入基础函数的testSdkDemo,让方案商调通(这部分在传统开发中,一般是方案商自行testSdk验证下Qt基础环境,以确认开发的sdk能正确引入Qt,参考市面上的其他开发板方案商)。


    结论

      至此,由于将我司Qt测试的纯SDK给到方案商,那么方案商调通好,就可以了,其他sdk可以参考本文添加,当前使用了ffmpeg库进行了播放器展示,确认是ok的,本文结束。


    上一篇:《RK3588开发笔记(一):基于方案商提供的宿主机交叉编译Qt5.12.10
    下一篇:敬请期待…

  • 相关阅读:
    全排列的代码
    Chinese ​(Simplified)​ Language Pack / 中文语言包插件
    团队建设构想之测试系统篇--mediawiki部署
    Anaconda下载链接
    java.sql.SQLFeatureNotSupportedException解决方法
    C++读取注册表
    C语言——一些字符串函数的模拟实现
    在线html编辑器 富文本转为html代码
    C专家编程 第7章 对内存的思考 7.8 轻松一下---“Thing King”和“页面游戏”
    VI/VIM的使用
  • 原文地址:https://blog.csdn.net/qq21497936/article/details/133915614