建構 Smart blaze VM 映像檔#
嵌入式 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),請依照以下步驟操作:
- 請依照《安裝 ELBE》的說明,安裝最新版本的 ELBE。
-
設定 ELBE initvm。
這是一台位於您的開發電腦上的虛擬機器,用於在受控環境中建置根檔案系統 (rootfs)。 -
設定對 ELBE initvm 的 SSH 存取權限。
-
新增您的公開 SSH 金鑰(例如,
~/.ssh/id_rsa.pub) 透過以下指令將其新增至 initvm: -
請使用以下指令測試存取權限:
-
-
安裝建置腳本所需的其他工具:
apt-get intall 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
它提供了為該虛擬機器編譯軟體所需的所有套件。這包括適用於 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/
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 結果目錄中執行此腳本(請依實際情況調整路徑):