跳至內容
測試伺服器
開發伺服器

建置 Smart blaze VM 映像檔#

本主題說明如何為 Smart blaze 相機建立您自己的 Linux VM 映像。

嵌入式 linux 開發的兩種主流選擇是以 Debian 為基礎的 ELBE 建置系統和業界標準的 Yocto Linux。透過這些系統,您可以建置最佳化、精簡且可重複產生的 rootfs,並將其上傳至相機。

作為 Smart blaze 相機預設提供的 Debian 系統被選為易於使用的基礎,大多數典型原生 Linux 開發的概念都適用於此。它是使用 ELBE 建置的。建置過程說明於 Embedded Linux Build System (ELBE)。

預設的 VM 最初是根據以下各節所述的腳本建立,並作為pylon 的 blaze 補充套件的一部分提供。您可以在安裝路徑的Samples子資料夾下找到這些腳本。在典型的Linux 系統中,此路徑為/opt/pylon/share/pylon/Samples/blaze/smartblaze/vm。除非另有說明,本主題中提及的腳本和設定檔的相對路徑均以此目錄為基準。

VM 映像結構#

可上傳的虛擬機器映像檔是一個tar.gz壓縮檔,其中包含以下檔案:

檔案庫的基礎名稱(不含副檔名)將作為攝影機上的 VM 映像檔名稱。

名稱「debian-arm64-min」屬於相機上預設的虛擬機器。可透過 Smart Blaze VM Control 網頁介面中的「還原出廠設定」按鈕將其還原。

vm-image.sh腳本會將個別檔案整合成一個虛擬機器映像檔:

$ ./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.qcow2(QEMU QCOW2 映像檔)
  • rootfs.[img|raw](原始映像)

支援的格式:

  • 包含原始根檔案系統的映像檔
  • 包含分區表的映像檔,其根檔案系統位於第一個分區中(請參閱下方的 ELBE 建置)

影像 elbe/build-vm.sh 指令碼提供了一個範例,使用中的描述來建置可重現的 rootfs elbe/blazevm.xml。結果將輸出至子目錄 elbe/elbe-build-.

安裝 ELBE 與其他必要工具的說明請參閱 elbe/build-vm.sh。

核心映像檔#

有一個簡單的 kernel.sh 用於建置最新核心的指令碼。這裡使用了預設的 arm64-defconfig,它並未針對大小進行最佳化,但包含了針對 virtio 準虛擬化(paravirtualization)的所有必要驅動程式。

您只需在不帶引數的情況下執行該指令碼即可建置核心。中介檔案會放置在 ./work 子目錄中,而完成的映像檔則會放置在 ./work/_result 中。

根檔案系統(rootfs)由以下指令啟動: 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 檔案。

嵌入式 Linux 建置系統 (ELBE)#

安裝 ELBE#

若要安裝 ELBE 並完成所有設定以使用 ELBE 建置 VM rootfs,請遵循以下步驟:

  1. 根據安裝 ELBE 安裝最新版本的 elbe。
  2. 設定 ELBE initvm。
    這是您開發電腦上的一個虛擬機器,用於在受控環境中建置 rootfs。

    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 rootfs 之外,還可以建立 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}"