建置 Smart blaze 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,請遵循以下步驟:
- 根據安裝 ELBE 安裝最新版本的 elbe。
-
設定 ELBE initvm。
這是您開發電腦上的一個虛擬機器,用於在受控環境中建置 rootfs。 -
準備連線至 ELBE initvm 的 SSH 存取權(僅在使用後續的 ELBE SDK 時需要)。
-
將您的公開 SSH 金鑰(例如
~/.ssh/id_rsa.pub的內容)透過以下指令新增至 initvm: -
使用此指令測試存取:
-
-
安裝建置腳本所需的其他工具:
apt-get install qemu-utils
使用 ELBE 建立根檔案系統#
若要使用 ELBE 建置根檔案系統,請按照上述說明設定 ELBE。然後執行 elbe/build-vm.sh。
使用 ELBE 建立 SDK#
除了 VM rootfs 之外,還可以建立 Yocto 風格的 SDK:
其結果是位於子目錄中的自解壓縮腳本 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/
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 結果目錄呼叫此腳本(請相應調整路徑):