コンテンツにスキップ
ステージングサーバー
開発サーバー

クロス開発#

このトピックでは、クロス開発向けのDebian Multiarch機能について説明します。

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 ファイルには、次の呼び出しがあります。

find_package(OpenCV)

設定するピクセルのカラーコンポーネントを指定するには、 ${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が含まれているディレクトリに移動し、ターミナルで次のコマンドを実行します。

docker build -t blaze-dev --build-arg UID=$(id -u) --build-arg GID=$(id -g) .

これにより、クロスツールチェーン、blaze用のpylon SDK、およびクロスコンパイルに適したCMake設定を備えたDebianコンテナが作成されます。

Dockerコンテナでのコマンドの実行#

開発コンテナ内でコマンドを実行するには、次のエイリアスを作成します。

alias dockerDo='docker run --rm -ti --volume $(pwd):/work --workdir /work blaze-dev'

利便性を考慮して、この行を ~/.bashrc ファイルに追加することもできます。

イメージ dockerDo エイリアスにより、現在の作業ディレクトリが一時コンテナにマウントされ、指定されたコマンドが実行されます。 dockerDo コンテナ内。マウントされたディレクトリは、コマンドの作業ディレクトリとして使用されます。コマンドは、コンテナをビルドしたユーザー(現在のユーザーである必要があります)と一致するユーザーIDでコンテナ内で実行されます。これにより、コンテナ内で作成されたファイルのパーミッションの問題を回避できます。

例:

dockerDo cmake -B build .
dockerDo cmake --build build -j$(nproc)

情報

コンテナはすでに環境変数を定義しています 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.