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

Smart blaze VMイメージの構築#

このトピックでは、Smart blazeカメラ用の独自のLinux VMイメージを作成する方法について説明します。

組み込みLinux開発における2つの主要な選択肢は、Debianベースの ELBE ビルドシステムと、業界標準の Yocto Linux です。これらのシステムを使用すると、カメラにアップロードできる、最適化され、軽量で再現性のあるrootfsを構築できます。

Smart blazeカメラにデフォルトで提供されているDebianシステムは、一般的なネイティブLinux開発のほとんどのコンセプトが適用できる使いやすいベースとして選択されました。これはELBEを使用して構築されています。ビルドプロセスについては、Embedded Linux Build System (ELBE) を参照してください。

デフォルトのVMは、最初は次のセクションで説明するスクリプトから作成され、pylon Supplementary package for blaze の一部として提供されます。これらのスクリプトは、インストールパスの Samples サブフォルダーの下にあります。一般的なLinuxシステムでは、これは /opt/pylon/share/pylon/Samples/blaze/smartblaze/vm です。特に断りのない限り、このトピックにおけるスクリプトおよび設定ファイルを参照する相対パスは、このディレクトリからの相対パスとなります。

VMイメージ構造#

アップロード可能なVMイメージは、次のファイルを含む tar.gz アーカイブです。

拡張子を除いたアーカイブのベース名は、カメラ上のVMイメージ名として使用されます。

名前 debian-arm64-min は、カメラ上に存在するデフォルトのVMのものです。これは、Smart blaze VM Control Webインターフェイスの Factory Reset ボタンを使用して復元できます。

vm-image.sh スクリプトは、個々のファイルを1つのVMイメージにバンドルします。

$ ./vm-image.sh --help
Usage: ./vm-image.sh [--rootfs <path>] [--kernel <path>] [--config <path>] [--image <path>]
Build a VM image tar.gz archive containing a rootfs, kernel and optional config toml file.
Defaults:
  --rootfs elbe/elbe-build-*/debian-arm64-min.qcow2
  --kernel work/_result/blazevm-arm64-kernel
  --image  work/debian-arm64-min.tar.gz

Rootfsイメージ#

サポートされているファイル名:

  • rootfs.qcow2 (QEMU QCOW2イメージ)
  • rootfs.[img|raw] (RAWイメージ)

サポートされているフォーマット:

  • RAWルートファイルシステムを含むイメージ
  • 最初のパーティションにルートファイルシステムを含むパーティションテーブルを持つイメージ(以下のELBEビルドを参照)

イメージ elbe/build-vm.sh スクリプトは、次の記述を使用して再現可能なrootfsをビルドする例を提供します: elbe/blazevm.xml。結果はサブディレクトリに出力されます: elbe/elbe-build-.

ELBEおよびその他の必要なツールのインストールについては、elbe/build-vm.shに記載されています。

カーネルイメージ#

最新のカーネルをビルドするためのシンプルなkernel.shスクリプトが用意されています。デフォルトのarm64-defconfigが使用されますが、これはサイズに最適化されていないものの、virtioベースの準仮想化に必要なすべてのドライバーが含まれています。

引数を指定せずにスクリプトを実行することで、カーネルをビルドできます。中間ファイルは./workサブディレクトリに配置され、完成したイメージは./work/_resultに配置されます。

ルートファイルシステムは qemu-system-aarch64 によって起動され、 virtio_blk サポートを含むカーネルイメージが必要です。Debianカーネルパッケージは virtio_blk をモジュールとして使用するため、適切な initrdを使用する必要があります。これはまだサポートされていません。したがって、ELBEビルドによって提供される可能性のあるDebianバイナリカーネルを使用することはできません。代わりに、静的な virtio_blk サポートを備えた独自のカーネルをビルドする必要があります。さらに、Debianバイナリカーネルは virtio_net をモジュールとして使用しますが、これではカーネルのcmdlineを介して ip= パラメータが提供される方法では機能しません。

設定ファイル#

設定ファイルには、カメラにインストールする際のイメージファイルの処理方法を制御するオプションが含まれています。

# VM Image Configuration for Basler example VMs

# Whether to inject a password in /etc/shadow before first VM image start
#  default: ""
#  "label-pw" - The password from the label is to be injected.
#  ""         - No password to inject. Image is responsible for setting a password.
password_rule = "label-pw"

# User whose password is set according to password_rule
#  default: "root"
user = "root"

# Whether to manually confirm first VM image start
#  default: false
confirm_start = true

イメージが固定パスワードを使用しており、起動確認が不要な場合は、config.tomlファイルを省略できます。

Embedded Linux Build System (ELBE)#

ELBEのインストール#

ELBEをインストールし、ELBEを使用してVMルートファイルシステムをビルドするための環境を設定するには、次の手順に従います。

  1. Installing ELBEに従って、最新のelbeバージョンをインストールします。
  2. ELBE initvmを設定します。
    これは、制御された環境内でルートファイルシステムをビルドするために開発用コンピューター上で使用される仮想マシンです。

    elbe initvm create
    
  3. ELBE initvmへのSSHアクセスを準備します(後でELBE SDKを使用する場合のみ必要です)。

    1. パブリックSSHキー(例: ~/.ssh/id_rsa.pubの内容)を次のコマンドでinitvmに追加します。

      elbe/enable-initvm-ssh.sh
      
    2. 次のコマンドでアクセスをテストします。

      elbe initvm ssh
      
  4. ビルドスクリプトに必要な追加ツールをインストールします。 apt-get install qemu-utils

ELBEを使用したルートファイルシステムの構築#

ELBEを使用してルートファイルシステムをビルドするには、上記の説明に従ってELBEを設定します。次に、elbe/build-vm.shを実行します。

ELBEを使用したSDKの構築#

VMルートファイルシステムに加えて、YoctoスタイルのSDKを作成できます。

elbe/build-vm.sh --build-sdk --skip-build-bin --skip-build-sources

その結果、次のサブディレクトリに自己解凍型スクリプトが生成されます。 elbe/elbe-build-:
setup-elbe-sdk-aarch64-linux-gnu-BlazeVM-1.2.sh

これにより、VM用のソフトウェアをビルドするために必要なすべてのパッケージが提供されます。これには、arm64用gccクロスコンパイラや、 -dev VMで使用可能なパッケージに対応するすべての開発パッケージが含まれます。ビルドおよびリンク用のヘッダーファイルと関連ライブラリに加え、これらを自動的に検出するためのpkgconfigファイルとcmakeファイルが提供されます。

ELBE SDKでの不足ファイルの保存#

pylonパッケージとblazeサンプルの一部のファイルが、SDKターゲットのsysrootに不足しています。ELBE SDKのビルド後、これらをELBE initvmからローカルのsysrootディレクトリに一度コピーする必要があります。

これが機能するように、ELBE initvmへのSSHアクセスが設定されていることを確認してください。

設定 --project-dir initvm内のELBEプロジェクトディレクトリに(例: /var/cache/elbe/、 ./build-vm.sh または elbe-build-/log.txtを使用します。

elbe/save-missing-sdk-files.sh --project-dir /var/cache/elbe/XXX --result-dir elbe/elbe-build-YYYYMMDD-HHMMSS

ファイルは、ELBE結果ディレクトリの sysroot サブディレクトリにコピーされます。

ELBE SDKのインストール#

$ LATEST_ELBE_RESULT_DIR=$(ls -dt elbe/elbe-build-* | head -n1)
$ cd ${LATEST_ELBE_RESULT_DIR}
$ chmod +x setup-elbe-sdk-aarch64-linux-gnu-BlazeVM-1.2.sh
$ ./setup-elbe-sdk-aarch64-linux-gnu-BlazeVM-1.2.sh
ELBE BlazeVM 1.2 SDK installer
==============================
Enter target directory for SDK (default: /opt/elbe-sdk-aarch64-linux-gnu-BlazeVM-1.2):
You are about to install the SDK to "/opt/elbe-sdk-aarch64-linux-gnu-BlazeVM-1.2". Proceed[Y/n]?
Extracting SDK............................................................................................done
Setting it up...SKIP /opt/elbe-sdk-aarch64-linux-gnu-BlazeVM-1.2/sysroots/host/usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
SDK has been successfully set up and is ready to be used.
Each time you wish to use the SDK in a new shell session, you need to source the environment setup script e.g.
 $ . /opt/elbe-sdk-aarch64-linux-gnu-BlazeVM-1.2/environment-setup-elbe-aarch64-linux-gnu-BlazeVM-1.2

SDKのインストール後、ELBE結果ディレクトリにある不足ファイルを、インストール済みのSDKに手動で追加する必要があります。

デフォルトの環境設定スクリプトは、SDKをデフォルトパスにインストールした場合の上のセクション(/opt/elbe-sdk-aarch64-linux-gnu-BlazeVM-1.2/environment-setup-elbe-aarch64-linux-gnu-BlazeVM-1.2)のデフォルト名になります。別の場所にSDKをインストールした場合は、それに応じてパスを調整してください。

対応するELBE結果ディレクトリからこのスクリプトを呼び出します(パスを適宜調整してください):

. /opt/elbe-sdk-aarch64-linux-gnu-BlazeVM-1.2/environment-setup-elbe-aarch64-linux-gnu-BlazeVM-1.2
cd elbe/elbe-build-YYYMMDD-HHMMSS
../fix-sdk.sh "${SDKTARGETSYSROOT}"