前言
上一篇項目已經構建好了Qt,板子接入mipi屏幕也跑起來了,Qt也能正常運行了,現在需要接入定製開發的sdk,sdk中使用了硬解碼等資源涉及到bsp的mpp,所以下一步就是引入mpp和sdk到Qt開發環境中,從而Qt中可以調用sdk接口進行進一步的應用結合開發了。
本文公開了Qt開發嵌入式主板應用的實際過程,提供給讀者學習參考,基本流程一致(但是有經驗的開發板方案商一般會直接提供基於SDK的Qt基礎環境Demo的虛擬機),本次算是額外走了一次過程,記錄下,僅供參考。
本文所有資料不對外提供,遵守基本的職業道德是一切的根本,重在學習熟悉解決問題的過程。
固件並沒有更新,bsp的支持包是以庫的形式提供,所以當作庫即可。
這部分需要與方案商覈對,當然也存在服務老廠這種,一開始就提供了完整的環境和文檔,本次合作的方案商對於兼容Qt這塊未弄,所以需要我們自己手動來操作。
Sdk採用的是CMake的Makefile傳統bsp開發模式:
只是純純的sdk部分打包,這個問題也是做linux開發大部分非資深容易出現的,就是給東西永遠是少東西的(最好的方式,就是自己跑一遍,避免過於的額外溝通)。
然後溝通後,我們需要包含以下的庫(其中.a是靜態庫,.so是動態庫):
運行起來,可能是libcomn.a包含後,沒有變成複雜
成功了。
這是我司模塊化開發的統一標準:
逐一引入到sdkManager.pri,有部分庫需要做處理,正常引入的就是include和lib,不拿出來了,下面單獨弄出來是需要調整修改的:
opencv的庫,有幾個版本,我們是aarch64,所以單獨糾正邏輯:
下面是mpp的庫,是bsp,但是出現2個.0,.1,溝通是兩個版本bsp,只能說運行的時候,哪一個能跑就用哪一個,錯了就換一個:
下面是ffmpeg4.0的庫,這裏大概率是符號連接,可能複製打包sdk的時候引用連接斷了,這裏直接使用文件大的進入:
完成後的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
編譯驗證庫是否都引入成功:
這裏溝通可能時之前mpp的版本不對,替換下版本:
測試了不行 看判斷 .so和.so.1兩個生成的時間是一樣的 ,.so.0是空0大小,經過與方案商溝通,後面給他編譯的單獨庫給過來,大概率是版本控制沒做好,引入是肯定引入成功了,第二天再解決。
第二天重新給了所有的直接依賴的庫單獨打包:
重新引入,頭文件用之前的,庫文件用新的,逐步添加:
測試還是不行,調試庫,確實沒有這個函數:
協調方案上,提供我司模塊化的純引入基礎函數的testSdkDemo,讓方案商調通(這部分在傳統開發中,一般是方案商自行testSdk驗證下Qt基礎環境,以確認開發的sdk能正確引入Qt,參考市面上的其他開發板方案商)。
至此,由於將我司Qt測試的純SDK給到方案商,那麼方案商調通好,就可以了,其他sdk可以參考本文添加,當前使用了ffmpeg庫進行了播放器展示,確認是ok的,本文結束。