2.5构建Xenomai测试与演示镜像

2.5 构建Xenomai测试与演示镜像

Xenomai 提供了 xenomai-image项目来构建适用于 QEMU 和物理设备的可启动镜像,以便进行评估或测试。

如果无法满足需求,开发者可以自行进行内核、用户空间和根文件系统的制作,将在下一章节介绍。

2.5.1 xenomai-image项目框架

xenomai-image项目可以生成适用于QEMU虚拟机和真实目标设备的可启动镜像,用于运行 Xenomai 实时系统,以便进行评估或测试。

构建镜像的命令是./kas-container,它的背后是Yocto、isar 和 kas 三者协同工作的生态系统。Yocto 是底层的核心框架,提供了构建嵌入式 Linux 系统的基础功能。isar 是 Yocto 的一个简化版本,专注于快速生成镜像。kas 则是一个更高层次的工具,用于管理和编排 isar 的构建流程。

这种分层的设计使得每个工具都能在其特定的领域发挥最大的优势。Yocto 提供了强大的功能和灵活性,isar 提供了快速构建的能力,而 kas 则提供了对复杂构建流程的管理。

1. Yocto:构建嵌入式 Linux 的基石

Yocto 是一个功能强大的开源框架,为嵌入式 Linux 系统的构建提供了坚实的基础。Yocto 的核心在于其灵活的构建系统,它允许开发者通过定义清晰的构建步骤和依赖关系来创建高度定制化的 Linux 发行版。

Yocto 的构建流程由 BitBake 引擎驱动,它能够解析复杂的依赖关系,并按照预定义的规则执行构建任务。这种模块化的设计使得开发者可以轻松地添加或移除功能,以满足特定项目的需求。

然而,Yocto 的灵活性也带来了复杂性。对于一些简单的项目或快速迭代的场景,Yocto 的配置和构建过程可能显得过于繁琐。这就引出了 isar 和 kas 的存在的必要性。

2. isar:简化 Yocto 构建

isar 是 Yocto 的一个扩展,它旨在简化嵌入式 Linux 镜像的构建过程。isar 特别适合那些需要快速生成镜像的场景,比如演示或测试环境。它通过引入一些简化的配置选项和预定义的模板,降低了使用 Yocto 的门槛。

isar 的一个显著特点是它能够直接从 Debian 仓库拉取二进制包,而不是从源码构建所有软件包。这种设计大大缩短了构建时间,使得开发者可以更快地看到结果。

尽管 isar 提供了简化,但它并没有脱离 Yocto 的核心框架。isar 仍然依赖 Yocto 的基础设施,比如 BitBake 引擎和构建目录结构。这种依赖关系使得 isar 能够在保持 Yocto 强大功能的同时,提供更友好的用户体验。

3. kas:构建流程的编排者

kas 是这个生态系统中的编排者。它是一个独立的工具,专注于简化和管理复杂的构建流程。kas 通过 YAML 文件定义构建任务,使得构建配置更加清晰和易于管理。

kas 的强大之处在于它能够同时管理多个构建配置。无论是针对不同硬件平台的镜像,还是包含不同功能选项的构建任务,kas 都能轻松应对。这种能力使得它在 CI/CD 环境中特别有用,因为它能够自动化复杂的构建流程。

kas 与 Yocto 和 isar 的关系是协作的。它可以用来管理 Yocto 或 isar 的构建流程,为开发者提供一个统一的配置界面。通过 kas,开发者可以更高效地利用 Yocto 和 isar 的功能,而不必担心底层的复杂性。

2.5.2 构建目标镜像
1. 构建

安装 Docker 并确保您有启动容器的权限。

接下来,调用配置菜单以选择所需的镜像配置并开始构建:

bash 复制代码
./kas-container menu

第一次运行,会从ghcr.io/siemens/kas/kas-isar拉取容器镜像。

复制代码
Trying to pull ghcr.io/siemens/kas/kas-isar:4.5...
Getting image source signatures
Copying blob a2318d6c47ec done   |
Copying blob d97b73ef598b done   |
Copying blob dc3e56e5a95e done   |
Copying blob f67b547c31f1 done   |
Copying blob 09c9309f2778 done   |
Copying blob d7db0619004a done   |
Copying blob c6273b82ad41 done   |
Copying blob c3a6a7089d00 done   |
Copying config 143f9fe1e0 done   |

拉取完毕后,会弹出Xenomai Reference Images菜单界面。

在菜单中根据需求选择后,执行Build开始构建。对于中国用户来说,由于网络的原因,构建会失败,例如遇到如下原因:

bash 复制代码
2025-04-12 11:27:41 - INFO     - kas 4.5 started
2025-04-12 12:11:53 - INFO     - Saving configuration as /work/.config.yaml
2025-04-12 12:11:53 - INFO     - Using /repo as root for repository xenomai
2025-04-12 12:11:53 - INFO     - Cloning repository isar
2025-04-12 12:12:14 - ERROR    - Command "/work$ git clone -q https://github.com/ilbers/isar.git /work/isar" failed
--- Error summary ---
fatal: unable to access 'https://github.com/ilbers/isar.git/': Failed to connect to github.com port 443 after 21113 ms: Couldn't connect to server

2025-04-12 12:12:14 - ERROR    - fetch repos failed: error code 128

实际上,在整个构建过程中,会访问多个国外网址,例如:

bash 复制代码
https://github.com/ilbers/isar.git
git://source.denx.de/xenomai/linux-dovetail.git
https://source.denx.de/Xenomai/xenomai4/linux-evl.git
https://source.denx.de/Xenomai/xenomai4/libevl.git
https://github.com/raspberrypi/firmware/archive/${PV}.tar.gz
......
2. 构建并运行QEMU镜像

如果您构建了一个 QEMU AMD64 镜像,可以使用以下命令运行:

bash 复制代码
start-qemu.sh x86

您也可以在命令行中选择所需的镜像配置。例如,要构建启用了调试选项的 QEMU AMD64 目标,可以这样调用 kas-container

bash 复制代码
./kas-container build kas.yml:board-qemu-amd64.yml:opt-debug.yml
3. 构建并运行物理目标镜像

此仓库包含适用于 x86 (board-x86-64-efi.yml)、armhf (board-beagle-bone-black.yml) 和 arm64 (board-hikey.yml) 目标的配方。

每个物理目标设备都会在 build/tmp/deploy/images/ 下生成可启动的镜像。例如,要将 HiKey 镜像写入 SD 卡,可以运行:

bash 复制代码
dd if=build/tmp/deploy/images/hikey/demo-image-hikey-xenomai-demo-hikey.wic \
   of=/dev/<medium-device> bs=1M status=progress
相关推荐
随机昵称_1234561 小时前
postgresql连接报错Invalid SCRAM client initialization
数据库·postgresql
Fuly10242 小时前
langchain基础教程(6)---构建知识库--②向量数据库-milvus
数据库·langchain·milvus
TDengine (老段)2 小时前
TDengine IDMP 产品路线图
大数据·数据库·人工智能·ai·时序数据库·tdengine·涛思数据
刺客xs4 小时前
MySQL数据库----通配符,正则表达式
数据库·mysql·正则表达式
无限大.4 小时前
计算机十万个为什么--数据库索引
数据库·oracle
思成不止于此4 小时前
MySQL 数据操作:增删改核心语法全解析
数据库·笔记·学习·mysql
得物技术4 小时前
数据库AI方向探索-MCP原理解析&DB方向实战|得物技术
数据库
Arva .4 小时前
MySQL 的锁类型有哪些
数据库·mysql
APIshop5 小时前
微店关键词搜索商品列表 API 实战:micro.item_search 全流程指南
数据库