跨平台開發#
Debian 多架構支援#
Debian 專案維護了適用於多種電腦架構的套件儲存庫,包括 AMD64 和 ARM64。這些儲存庫對於從 AMD64 開發主機針對 Smart Blaze 等 ARM64 裝置進行跨平台開發至關重要。在 Debian 系統上,這兩種架構的套件皆可透過相同的儲存庫網址取得,因此能方便地將不同架構的套件安裝為建置依賴項。
資訊
在 Ubuntu 上,ARM64 套件庫位於獨立的ubuntu-ports套件庫中。
透過 Multiarch 功能,您可以安裝其他架構的套件,並搭配跨平台工具鏈使用。函式庫套件的-dev版本通常最為相關,因為它們提供了建置這些套件所需的標頭檔和函式庫。若需進行除錯,您也可以安裝除錯符號(-dbg或-dbgsym),並另行安裝對應的原始碼套件。
此跨平台開發工具鏈由crossbuild-essential-arm64套件提供。
原生開發#
在應用程式開發方面,最方便的做法是先在目標虛擬機器(或其他 ARM64 機器)上以原生方式建置並測試您的應用程式,然後再從您的 AMD64 開發主機進行交叉編譯。
使用 Docker 容器進行跨建構#
上述的多架構(Multiarch)概念,已透過 Smart Blaze SDK 中包含的跨平台編譯 Docker 容器進行示範。該容器包含跨平台開發工具鏈、Pylon SDK 的開發檔案,以及pylon Supplementary Package for blaze 。此容器已預先配置了用於跨平台編譯 ARM64 可執行檔的 CMake 工具鏈檔案。有關設定此容器的詳細資訊,請參閱《開發用 Docker 容器》。
若要自行建置軟體,請擴充 Dockerfile 以安裝所需的 <packagename>-dev:arm64 依賴項。在大多數情況下,可透過相應的 find_package 在 CMake 中的呼叫。例如,Docker 容器包含 libopencv-dev 套件。在 blaze 範例中 CMakeLists.txt 檔案中,您會發現以下呼叫:
請使用 ${OpenCV_INCLUDE_DIRS} 變數與 target_include_directories() 及 ${OpenCV_LIBS} 變數與 target_link_libraries(). 某些套件(例如 Boost)也會匯出一個 CMake 目標。在這種情況下,只需在 target_link_libraries(),它也會自動設定包含路徑。
如果您的依賴項無法以 Debian 套件形式取得,但支援 CMake,請使用FetchContent模組從原始碼進行編譯。在此情況下,請依照專案文件中的說明,在 Docker 容器中安裝所需的建置依賴項。如果該函式庫不支援 CMake,您可以使用更通用的ExternalProject模組。
用於開發的 Docker 容器#
若要為這台相機開發軟體,您可以建立一個 Docker 容器,其中包含跨平台開發工具鏈以及所有必要的套件。
若要安裝 Docker 引擎,請依照docs.docker.com 上的說明操作。
建立 Smart Blaze 開發容器#
在此版本中,您已收到一個包含 Dockerfile 的壓縮檔。請在解壓縮後的檔案中,前往包含 Dockerfile 的目錄。若要建置容器,請在終端機中執行以下指令:
這會建立一個包含交叉編譯工具鏈、Blaze 的 Pylon SDK,以及適用於交叉編譯的 CMake 設定的 Debian 容器。
在 Docker 容器中執行指令#
若要在開發容器內執行指令,請建立以下別名:
為了方便起見,您可以將這行指令加入您的~/.bashrc檔案中。
當 dockerDo alias 會將當前工作目錄掛載至一個臨時容器中,並執行其後所指定的指令 dockerDo 在容器內部。掛載的目錄將作為該指令的工作目錄。該指令將在容器內部以與建置該容器的使用者(應為當前使用者)相符的使用者 ID 執行。此舉可避免容器內部所建立的檔案出現權限問題。
範例:
資訊
該容器已定義了該環境變數 CMAKE_TOOLCHAIN_FILE,此設定會指示 CMake 使用開發容器中內建的 ARM64 交叉編譯工具鏈。
使用 ELBE SDK(嵌入式Linux 建置環境)進行跨平台建置#
為避免使用 Docker 容器,並防止 rootfs 和跨平台建置環境中的套件資料重複,可基於與 rootfs 相同的原始檔elbe/blazevm.xml,建立一個採用「Yocto 」風格的 SDK。如需更多資訊,請參閱《使用 ELBE 建置 SDK》。
對於 CMake 專案,請參照以下範例,在 Blaze 範例專案中使用 ELBE SDK。請根據您的安裝環境調整 CMake 工具鏈檔案的路徑。如果您使用的是已解壓縮的 Smart Blaze SDK,而非 Pylon 範例目錄,該工具鏈檔案通常位於該 SDK 目錄下的elbe/cross-toolchain.cmake。
cd /opt/pylon/share/pylon/Samples/blaze/cpp/FirstSample/
. /opt/elbe-sdk-aarch64-linux-gnu-BlazeVM-1.2/environment-setup-elbe-aarch64-linux-gnu-BlazeVM-1.2
export CMAKE_TOOLCHAIN_FILE=/opt/pylon/share/pylon/Samples/blaze/smartblaze/vm/elbe/cross-toolchain.cmake
cmake -B build .
cmake --build build -j$(nproc)
在攝影機上管理虛擬機器#
在為您的虛擬機器設定好網際網路連線後,您可以使用 apt-get 或 pip install. 此外,您也可以擴展該 elbe/blazevm.xml 配置檔,用於從頭開始建置新的根檔案系統。
目標虛擬機器上的執行時期函式庫
當您使用 Docker 容器或 ELBE SDK 建置軟體,並將其安裝在虛擬機器上時,請確保所有執行時依賴項均已就緒。對於每個 <packagename>-dev:arm64 在跨平台建置環境中安裝的套件,請將對應的函式庫套件安裝至目標根檔案系統中。對於 OpenCV,所需的套件已分為多個模組。至於 blaze 範例,您需要 libopencv-calib3d, libopencv-core, libopencv-highgui, libopencv-imgcodecs以及 libopencv-imgproc.