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的,本文結束。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章