在交叉編譯過程中,我們需要在PC端設定設備的運行環境,以確保編譯出的應用程式能夠在設備端正常運行。在Astra平台上,只需安裝一個toolchain軟體包即可完成環境部署。相關的toolchain可以透過Astra的GitHub頁面下載(版本 v1.5.0 發佈 · synaptics-astra/sdk)。然而,如果您新增了功能,則需要自行編譯一個包含新增功能的toolchain軟體包,以確保相關環境能夠支援這些功能。編譯步驟詳見文件(Astra Yocto Linux 開發者指南 — Synaptics Astra SDK 使用者指南 1.5.0 文件)
雖然 toolchain 的安裝是基本步驟,但重點在於如何編譯一個程式。我們可以參考官方提供的 AI 相關應用程式原始碼(synaptics-astra/synap-framework 在 v1.5.0)。該原始碼使用CMake腳本進行編譯,但需要指定toolchain目錄才能生成可執行的程式。
設定toolchain的目錄:
在synap-framework目錄下的CMakeLists.txt文件中,新增設定
set(CMAKE_INSTALL_INCLUDEDIR include)
set(CMAKE_INSTALL_LIBDIR lib)
set(CMAKE_INSTALL_PREFIX toolchain_4_0_17/sysroots/cortexa55-poky-linux/usr)
其中,`CMAKE_INSTALL_PREFIX` 指向 toolchain 的目錄。完成設定後,編譯出的軟體即可在設備端執行。
將需要的庫添加到編譯中:
儘管程式可以編譯,但有時所需的庫檔案可能無法正確連結。這時需要在CMake腳本中手動添加相關路徑。例如,機器視覺常用的OpenCV庫,雖然預設的Yocto專案已包含該功能,但官方範例未使用到,因此需要手動連結。幸運的是,`synap-framework/cmake/modules`目錄中提供了連結腳本,但部分連結地址可能與toolchain路徑不匹配,需要進行以下修改:
a. 修改標頭檔案路徑的資料夾路徑:
target_include_directories(opencv_core INTERFACE ${SYNAP_SYSROOT_INCLUDEDIR}/opencv4)
b. 將所有 `.a` 庫檔案替換為 `.so` 庫檔案
c. 在`synap-framework`目錄下的`CMakeLists.txt`檔案中添加:
cmake find_package(OpenCV REQUIRED
添加自己的程式:
假設我們需要編寫一個名為 `ai_test_app` 的程式,步驟如下:
a. 複製 `synap-framework/app` 目錄中的一個資料夾,並重新命名為 `ai_test_app`。
b. 根據需求修改其中的原始碼和`CMakeLists.txt`腳本。
c. 在synap-framework/app目錄下的CMakeLists.txt文件中添加add_subdirectory(ai_test_app)
編譯程式:
a. 執行 toolchain 的環境設定腳本:
. toolchain_4_0_17/environment-setup-cortexa73-poky-linux
b. 在 synap-framework 目錄中執行(build 是輸出路徑,-D 後面接的是相關參數的設定)
cmake -B build -DCMAKE_BUILD_TYPE=Debug
c. 然後再執行cmake --build build -j16
d. 在 build/app/ai_test_app 的目錄下就可以找到 ai_test_app 執行檔
e. 將這個ai_test_app執行檔放到Astra平台上就可以執行了
以上是本期部落格文章的全部內容,若有疑問請在文章下方留言評論,或者聯繫我們,我們會盡量安排處理喔(o´ω`o)و。感謝大家的瀏覽,我們下期再見!
FAQ 1:什麼是toolchain?
A1:Toolchain 是用於交叉編譯的工具鏈,包含編譯器、連結器等工具,協助生成適用於目標設備的可執行檔案。
常見問題 2:Astra 平台的算力如何?
A2:Astra 平台目前使用 SL1680,約 8TOPS 算力,SL1640,約 1.6TOPS 算力。
FAQ 3:CMakeLists.txt 文件的作用是什麼?
A3:CMakeLists.txt 是 CMake 的配置檔,用於定義專案的編譯規則、相依關係和輸出路徑。
FAQ 4:編譯時出現錯誤如何排查?
A4: 檢查CMake腳本設定是否正確,確認toolchain路徑是否匹配,並查看編譯日誌中的具體錯誤資訊。
FAQ 5:執行文件放到設備中無法運行?
A5:使用 chmod +x 為檔案添加執行權限試試看
評論