从这里开始
入门
构建 NoWayOS 的开发容器并运行其可点击演示,每一帧都经过检查,无需任何硬件,也无需了解 seL4。
NoWayOS 在一个固定版本的开发容器中构建,因此您的机器本身几乎不需要准备什么。本页带您从零开始,直到运行演示。下一页会在 QEMU 中启动一个真正的 seL4 系统,再后面的一页则会把它放到 Raspberry Pi 5 上。
您需要准备什么
- Podman 和 GNU Make。Docker 也可以:在每条
make命令中加上ENGINE=docker。 - git,用于克隆代码仓库。
- 您的机器上无需 Rust,也无需 seL4 工具。 Rust 工具链、Microkit SDK 和 QEMU 都在开发容器中,并固定为确切版本。
在 macOS 上,Podman 在虚拟机中运行容器。只需创建并启动一次,为它分配几个 CPU 和数 GB 内存,例如:
podman machine init --cpus 4 --memory 8192
podman machine start
NoWayOS 在 Apple 芯片(arm64)上开发。在 x86-64 上,开发镜像的软件包同样经过版本固定和审查,但该镜像尚未在那里完成端到端的构建和测试。
给 NoWayOS 一个专属文件夹
开发容器挂载的是您克隆目录的上一级文件夹,这样并排克隆的代码仓库就可以相互依赖着构建。请先为它们建一个文件夹:
mkdir nowayos-work && cd nowayos-work
git clone https://github.com/NoWayOS/nowayos.git
cd nowayos
构建开发容器
make container
这会构建固定版本的开发镜像:Rust 工具链、Microkit SDK、QEMU 和各种检查工具。首次构建需要几分钟(在搭载 Apple 芯片的 Mac 上不到四分钟),生成的镜像约 4.7 GB。每当 tools/container/Containerfile 发生变化,请重新运行它;其他所有目标都会拒绝在过时的镜像上运行,并告诉您原因。
运行演示
make demo
演示是一个小型表单应用,带有一段由轻触、点击和按键组成的脚本化会话。它以主机模拟的方式运行,不涉及 seL4 和 QEMU,并用 NoWayOS 真正的 UI 核心和渲染器绘制每一步的画面。每一帧都会与一张核准图像比对,运行结束时会显示:
demo: PASS - … steps, every frame as approved
只要有任何一帧相差哪怕一个像素,运行就会指出是哪一步,并判定失败。
四处看看
make # every target, with a line on each
make test # unit, property, doc and golden-image tests
make lint # rustfmt, then clippy with warnings as errors
每个目标都在开发容器中运行,并会替您启动容器。代码仓库中的 DEVELOPING.md 列出了全部目标以及代码的布局。
如果出了问题
error: … was not built from the current … Containerfile:自您构建以来,容器的定义已经改变。请按消息提示,再次运行make container。- 无法连接 Podman:在 macOS 上,用
podman machine start启动它的虚拟机。 - 构建时内存不足:为 Podman 的虚拟机分配更多内存。完整的关卡
make ci会运行模型检查证明,所需内存远多于演示(检查与证据)。