跳转到内容
STAGING SERVER
DEVELOPMENT SERVER

构建 Smart blaze VM 镜像#

本主题介绍了如何为 Smart blaze 相机创建您自己的 Linux VM 镜像。

嵌入式 Linux 开发的两种主流选项是基于 Debian 的 ELBE 构建系统和行业标准的 Yocto Linux。借助这些系统,您可以构建一个优化、精简且可复现的 rootfs,并将其上传到相机。

Smart blaze 相机默认提供的 Debian 系统被选作易于使用的基础,适用于典型原生 Linux 开发中的大多数概念。它是使用 ELBE 构建的。构建过程在嵌入式 Linux 构建系统 (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 脚本将各个文件打包成一个 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 二进制内核并非可行方案。您需要使用静态 .sh 编译工具自行构建内核。 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 构建 VM 根文件系统所需的一切,请按照以下步骤操作:

  1. 根据安装ELBE指南安装最新版本的ELBE。
  2. 设置 ELBE initvm。
    这是您开发计算机上的一个虚拟机,用于在受控环境中构建根文件系统。

    elbe initvm create
    
  3. 准备对 ELBE initvm 的 SSH 访问权限(仅当以后使用 ELBE SDK 时才需要)。

    1. 添加您的公钥(例如,内容如下): ~/.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 中保存丢失的文件#

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