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

建構 Smart blaze VM 映像檔#

本主題說明如何為 Smart Blaze 攝影機建立專屬的Linux 虛擬機器映像檔。

嵌入式 Linux 開發的兩大主流選項,分別是基於 Debian 的ELBE建置系統,以及業界標準的 Yocto Linux。透過這些系統,您可以建置出經過優化、精簡且可重現的根檔案系統(rootfs),並將其上傳至攝影機。

Smart Blaze 攝影機預設搭載的 Debian 系統,被選為一個易於使用的基礎平台,其中可套用多數典型原生Linux 開發的概念。該系統是透過 ELBE 進行編譯的。相關建置流程請參閱「嵌入式Linux 建置系統(ELBE)」一節。

預設的 VM 最初是根據以下各節所述的腳本建立的,並作為pylon 的 blaze 補充套件的一部分提供。您可以在安裝路徑的Samples子資料夾下找到這些腳本。在典型的Linux 系統中,此路徑為/opt/pylon/share/pylon/Samples/blaze/smartblaze/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 此腳本提供了一個範例,說明如何根據 elbe/blazevm.xml. 結果會輸出至子目錄中 elbe/elbe-build-.

關於安裝 ELBE 及其他所需工具的說明,請參閱elbe/build-vm.sh。

核心映像#

有一個簡單的kernel.sh腳本,可用於編譯最新的核心。該腳本採用預設的arm64-defconfig,雖然未針對大小進行優化,但包含了基於 virtio 的半虛擬化所需的所有驅動程式。

您可以不帶任何參數執行該腳本來編譯核心。中間檔案會存放於./work子目錄中,而編譯完成的核心映像則會存放於./work/_result 中。

rootfs 是由 qemu-system-aarch64 並且需要一個包含以下內容的內核映像: virtio_blk 支援。Debian 核心套件使用 virtio_blk 作為一個需要使用適當的 initrd. 此功能目前尚未支援。因此,無法使用 ELBE 編譯版本所提供的 Debian 二進位核心。相反地,您需要自行編譯具有靜態連結的 virtio_blk 支援。此外,Debian 的二進位核心使用 virtio_net 作為一個模組,這與 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 建立虛擬機器根檔案系統 (rootfs),請依照以下步驟操作:

  1. 請依照《安裝 ELBE》的說明,安裝最新版本的 ELBE。
  2. 設定 ELBE initvm。
    這是一台位於您的開發電腦上的虛擬機器,用於在受控環境中建置根檔案系統 (rootfs)。

    elbe initvm create
    
  3. 設定對 ELBE initvm 的 SSH 存取權限。

    1. 新增您的公開 SSH 金鑰(例如, ~/.ssh/id_rsa.pub) 透過以下指令將其新增至 initvm:

      elbe/enable-initvm-ssh.sh
      
    2. 請使用以下指令測試存取權限:

      elbe initvm ssh
      
  4. 安裝建置腳本所需的其他工具: apt-get intall 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

它提供了為該虛擬機器編譯軟體所需的所有套件。這包括適用於 arm64 的 gcc 交叉編譯器,以及所有 -dev 與虛擬機器中可用套件相對應的開發套件。它提供了用於編譯和連結的標頭檔及相關函式庫,以及用於自動查找這些檔案的 pkgconfig 和 cmake 檔案。

在 ELBE SDK 中儲存遺失的檔案#

SDK 目標 sysroot 中缺少 pylon 套件及 blaze 範例的部分檔案。在建構 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

檔案已複製到 sysroot ELBE 結果目錄下的子目錄。

安裝 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}"