クロス開発#
Debian Multiarch#
Debianプロジェクトは、AMD64やARM64など、複数のコンピュータアーキテクチャ向けにパッケージリポジトリを維持管理しています。これらは、AMD64開発ホストからSmart blazeなどのARM64デバイスをターゲットにしたクロス開発に関連しています。Debianでは、両方のアーキテクチャのパッケージが同じリポジトリURLから入手できるため、ビルド依存関係として異なるアーキテクチャのパッケージを簡単にインストールできます。
情報
Ubuntuでは、ARM64リポジトリは別のubuntu-portsリポジトリにあります。
Multiarch機能を使用すると、クロスツールチェーンで使用するための外部アーキテクチャ用パッケージをインストールできます。ライブラリパッケージの-devバリアントは、それらのパッケージに対してビルドするために必要なヘッダーとライブラリを提供するため、通常最も重要です。デバッグのために、デバッグシンボル(-dbgまたは-dbgsym)と、個別に対応するソースパッケージをインストールすることもできます。
クロス開発ツールチェーンは、crossbuild-essential-arm64パッケージによって提供されます。
ネイティブ開発#
アプリケーション開発では、まずターゲットVM(または別のARM64マシン)上でネイティブにアプリケーションをビルドしてテストし、その後AMD64開発ホストからクロスコンパイルするのが最も便利です。
Dockerコンテナを使用したクロスビルド#
上記のMultiarchの概念は、Smart blaze SDKに含まれているクロスビルド用のDockerコンテナで示されています。コンテナには、クロス開発ツールチェーン、pylon SDKの開発ファイル、およびpylon Supplementary Package for blazeが含まれています。コンテナには、ARM64実行ファイルをクロスビルドするためのCMakeツールチェーンファイルが事前設定されています。コンテナの設定については、開発用Dockerコンテナを参照してください。
独自のソフトウェアをビルドするには、Dockerfileを拡張して必要な <packagename>-dev:arm64 依存関係をインストールします。ほとんどの場合、これらはCMake内の対応する find_package 呼び出しを使用して統合できます。たとえば、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開発コンテナのビルド#
pylon Supplementary Package for blazeには、クロス開発コンテナを設定するためのDockerfileが含まれています。通常のLinuxシステムでは、これは /opt/pylon/share/pylon/Samples/blaze/smartblaze/vm/container/Dockerfile です。コンテナをビルドするには、Dockerfileが含まれているディレクトリに移動し、ターミナルで次のコマンドを実行します。
これにより、クロスツールチェーン、blaze用のpylon SDK、およびクロスコンパイルに適したCMake設定を備えたDebianコンテナが作成されます。
Dockerコンテナでのコマンドの実行#
開発コンテナ内でコマンドを実行するには、次のエイリアスを作成します。
利便性を考慮して、この行を ~/.bashrc ファイルに追加することもできます。
イメージ dockerDo エイリアスにより、現在の作業ディレクトリが一時コンテナにマウントされ、指定されたコマンドが実行されます。 dockerDo コンテナ内。マウントされたディレクトリは、コマンドの作業ディレクトリとして使用されます。コマンドは、コンテナをビルドしたユーザー(現在のユーザーである必要があります)と一致するユーザーIDでコンテナ内で実行されます。これにより、コンテナ内で作成されたファイルのパーミッションの問題を回避できます。
例:
情報
コンテナはすでに環境変数を定義しています CMAKE_TOOLCHAIN_FILEこれにより、開発コンテナに含まれるARM64クロスコンパイラツールチェーンを使用するようにCMakeに指示されます。
ELBE SDK (Embedded Linux Build Environment) を使用したクロスビルド#
Dockerコンテナやrootfsおよびクロスビルド環境の重複したパッケージデータを回避するために、rootfsと同じソースである elbe/blazevm.xml からYoctoスタイルのSDKを作成できます。詳細については、Building an SDK with ELBEを参照してください。
CMakeプロジェクトの場合は、blazeサンプルプロジェクトで以下に示すようにELBE SDKを使用します。インストール環境に合わせてCMakeツールチェーンファイルのパスを調整してください。通常のLinuxシステムでは、これは /opt/pylon/share/pylon/Samples/blaze/smartblaze/vm/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)
カメラ上のVMの管理#
VMのインターネットアクセスを設定したら、次を使用してパッケージをインストールできます apt-get または pip install。または、 elbe/blazevm.xml 設定ファイルを拡張して、ゼロから新しいルートファイルシステムをビルドすることもできます。
ターゲットVM上のランタイムライブラリ
DockerコンテナまたはELBE SDKを使用してソフトウェアをビルドし、VMにインストールする場合は、すべてのランタイム依存関係が存在することを確認してください。すべての <packagename>-dev:arm64 クロスビルド環境にインストールしたパッケージに対応するライブラリパッケージをターゲットのルートファイルシステムにインストールします。OpenCV の場合、必要なパッケージはモジュールに分割されています。blaze サンプルには、 libopencv-calib3d, libopencv-core, libopencv-highgui, libopencv-imgcodecsおよび libopencv-imgproc.