
QSOE 系统资讯
QSOE 是一款受 QNX 启发的操作系统,具备可选择的内核。2026 年 6 月,QSOE 0.1 版本已发布,这是统一双内核系统的首个公开版本。
QSOE 变体情况
QSOE 有两种变体,它们共享一个用户空间和一个构建系统。QSOE/N 运行在专门为该项目从头编写的微内核 Skimmer(设计支持 SMP)上;QSOE/L 则以 seL4 作为内核。编译后,这两种变体都会提供可直接在如 U - Boot 加载器中使用的内核和 initrd 文件。两种变体的用户空间完全相同;每个内核特有的部分只有任务管理器 `taskman` 和 C 库 `libc.so` ,C 库在源代码层面约 85% 是共享的,仅在与内核交互的薄层有所不同。该设计遵循 QNX Neutrino 的传统:小内核,其余功能都在用户空间;采用同步消息传递 IPC;服务使用资源管理器模型。QSOE 目标是在 SiFive HiFive Unmatched (`FU740`) 上运行 64 位 RISC - V (`RV64`, `Sv39`) ,日常开发使用 QEMU。目前,两种 QSOE 变体都能在真实硬件上启动。该系统根据 Apache - 2.0 许可证发布。
QSOE 下载方式
QSOE 可以从源代码构建,也可以安装预构建的二进制文件。每个版本的现成镜像都发布在指定处(当前版本:0.1)。文件如下:
- [`skimmer.bin`]:Skimmer 微内核,即 QSOE/N 变体的内核。这是一个原始二进制镜像,由引导加载器(或 QEMU)与下面的用户空间包一起加载。
- [`modpkg.cpio`]:模块包,即共享的 QSOE 用户空间(任务管理器、`init`、C 库、shell、驱动程序和实用工具),以 CPIO 存档形式存在。QSOE/N 将其作为 initrd 与 `skimmer.bin` 一起启动。
- [`qsoe - l - qemu.elf`]:QSOE/L 变体(基于 seL4 内核),是适用于 QEMU `virt` 机器的单个自包含 ELF 文件。它将 elfloader、seL4 内核、任务管理器和用户空间捆绑在一起,启动时无需其他文件。
- [`qsoe - l - sifive.elf`]:同样的 QSOE/L 镜像,为 SiFive HiFive Unmatched (FU740) 开发板构建。
- [`mrbml - riscv64.efi`]:mr - bml,QSOE 自己的引导加载器(适用于 RISC - V 的 EFI 应用程序)。它可以加载任何一种变体,并在真实硬件上驱动引导菜单。
- [`nvme.img.gz`]:一个可直接运行的自引导 QEMU 磁盘镜像(GPT)。其 EFI 分区包含 `mr - bml`,磁盘根目录包含两个内核,因此 QEMU 可直接进入 mr - bml 菜单,无需 `- kernel` 参数。这是查看 QSOE 运行的最快方式。
- [`virtio.img.gz`]:仅在 QEMU 下运行 QSOE/L 时使用的配套根磁盘(原生 seL4 早于 QEMU 的 NVMe 所需的中断控制器,因此它从 virtio 磁盘挂载根目录)。QSOE/N 或真实硬件不需要此文件。
简而言之,要在 QEMU 中运行,下载 `nvme.img.gz`(如果需要 QSOE/L,还需下载 `virtio.img.gz`),并参考在 QEMU 下运行部分。要安装到真实硬件上,需要 `mrbml - riscv64.efi` 加上内核 —— QSOE/N 使用 `skimmer.bin` + `modpkg.cpio`,QSOE/L 使用 `qsoe - l - *.elf` 镜像之一 —— 并参考安装部分。
在 QEMU 下运行 QSOE
这是查看 QSOE 运行的最快方式,无需硬件,也无需处理 `- kernel` 参数。下载的 `nvme.img` 是一个自引导 UEFI 磁盘:QEMU 的固件从该磁盘运行 `mr - bml`,mr - bml 的菜单可直接从磁盘启动任意一种变体。
所需条件
- `qemu - system - riscv64`:QSOE/N 需要版本 11.0.1 或更高(其 NVMe 需要 AIA 中断控制器)。
- edk2 RISC - V UEFI 固件:在 Debian/Ubuntu 系统上,可通过 `qemu - efi - riscv64` 包获取。
- 来自 [os] 仓库的启动器 `[run - nvme.sh]`:它会为每种变体配置合适的 QEMU 机器、固件和磁盘,无需手动操作。
运行步骤
# 解压镜像(如果需要 QSOE/L,添加 virtio.img.gz)gunzip nvme.img.gz virtio.img.gz# 将启动器指向镜像,并从菜单中选择一个变体NVME_IMG=./nvme.img VIRTIO_IMG=./virtio.img ./run - nvme.sh可以传递 `n` 或 `l` 跳过菜单(`./run - nvme.sh n`)。脚本会自动选择匹配的 QEMU 机器 —— QSOE/N 使用带有 NVMe 根目录的 AIA 机器,QSOE/L 使用带有 virtio 根磁盘的 PLIC 机器。mr - bml 菜单和系统控制台都会显示在终端上,选择一个变体后,系统会启动到 `login:` 提示符。使用用户名 `root` 和密码 `QSOE` 登录。
QSOE 安装方法
适用于真实硬件和真实磁盘。QSOE 0.1 可在 SiFive HiFive Unmatched (FU740) 上启动,未来目标是 SpaceMiT K3。此安装过程假设开发板已运行 Linux,需要将文件放置在现有的 EFI 和引导分区上,因此需要熟悉开发板的固件。引导模型很简单:mr - bml 位于 EFI 系统分区;它从 ext2/3/4 分区读取菜单和内核;所选变体随后从 fs - qrv 分区挂载自己的根目录。
安装步骤
- 将 `mrbml - riscv64.efi` 复制到 ESP 中,命名为 `EFI/BOOT/BOOTRISCV64.EFI`(UEFI 可移动媒体路径),或者使用 `efibootmgr` 将其注册为引导条目。
- 在引导/根文件系统上创建 `/boot/qsoe/` 目录,并将内核复制到该目录:QSOE/N 使用 `skimmer.bin` + `modpkg.cpio`,QSOE/L 使用 `qsoe - l - sifive.elf`。
- 创建 `/boot/mr - bml/mr - bml.cfg` 文件,每种变体对应一个条目,例如:
# /boot/mr - bml/mr - bml.cfg — 根据磁盘调整 mainfs= 分区menuentry 'QSOE/N (Skimmer)' { kernel /boot/qsoe/skimmer.bin mainfs=/dev/nvme0n1p8 modpkg /boot/qsoe/modpkg.cpio}menuentry 'QSOE/L (seL4)' { kernel /boot/qsoe/qsoe - l - sifive.elf mainfs=/dev/nvme0n1p8}`mainfs=` 指定了包含 QSOE 根文件系统(fs - qrv)的分区,需将其设置为开发板上分配给 QSOE 的分区。在真实硬件上,没有 QEMU virtio 分区的区别,两种变体都直接驱动 NVMe 磁盘。
从源代码构建 QSOE
QSOE 使用 `riscv64 - linux - gnu -` 交叉工具链(rv64gc)和标准 `make` 进行构建,QEMU 可用于测试。主仓库负责协调构建过程,并拉取与发布标签匹配的组件仓库。
git clone https://gitlab.com/qsoe/oscd osmake prepare # 获取此标签对应的组件(详见 component.list)make # 构建两种变体:先 QSOE/N,再 QSOE/Lmake dist # 可选:生成 QEMU 磁盘镜像(nvme.img.gz, virtio.img.gz)QSOE/L 在 `make prepare` 过程中还会浅克隆 seL4 内核。构建过程会生成下载列表中的所有文件。整个项目遵循 Apache - 2.0 许可证,源代码位于指定处。
QSOE 文档情况
QSOE 手册以 PDF 格式与版本一同发布:
- [`Design.pdf`]:架构文档,介绍双内核模型、任务管理器、IPC 和资源管理器设计。
- [`UserGuide.pdf`]:用户指南,涵盖安装、shell、基本命令、文本编辑器和实用工具。
- [`ProgrammingBook.pdf`]:编程手册,包括资源服务器框架章节。
- [`AppPortingGuide.pdf`]:应用移植指南,介绍如何将 Unix(和 QNX)软件移植到 QSOE,包括 `fork()`、`brk()`、`select()` 等的处理。
QSOE 路线图规划
人们常说 Linux 内核没有路线图,但 QSOE 有。从当前的 0.1 版本到统一的 1.0 版本,规划了十个版本。这是一个工作计划,而非承诺,随着工作推进,里程碑可能会调整。
- `0.1`:首次公开版本。双内核基础,共享用户空间,`/usr` 目录下为只读 `fs - qrv`,支持交互式 getty + 登录,源代码开放。(当前版本)
- `0.2`:在 GK208(“Kepler”)上实现文本模式控制台,可在设备上显示,便于在硬件上查看实时音频工作,而不仅通过串口查看。
- `0.3`:首个可写文件系统:qrvfs 支持文件创建/删除、`O_CREAT`/`O_TRUNC`、`realpath` 和符号链接解析。
- `0.4`:经典的双面板文件管理器:QSOE 的旗舰应用,全面测试可写文件系统和用户空间。
- `0.5`:首个 `deva - hdmi` 音频设备,为硬实时路径奠定优先级/中断/调度基础。
- `0.6`:全面的一致性套件和音频实时包(在 N 核系统上支持最多 N 个硬实时任务)。
- `0.7`:临近时确定具体内容。
- `0.8`:第二个硬件目标(SpaceMiT K3,RVA23 类)和 AIA 中断架构(IMSIC/APLIC),使 MSI/MSI - X 在各开发板上统一工作。
- `0.9`:推动 QNX - libc 兼容性:重新编译并运行一组 QNX 源代码实用工具,填补剩余的 libc 差距。
- `1.0`:首个稳定版本:API 与 QNX 6.x 相当,旨在移植 QNX 用户空间软件(`fork` → `posix_spawn`)。
其他相关项目
早期及相关工作:
- [GateMate PC]:基于 Cologne Chip GateMate FPGA 构建的个人计算机。
- [GateMate System/359]:受 IBM S/360 启发的 FPGA 计算系统实现,具备 I/O 通道和强大的宏汇编器。
- [QRV]:QNX 到 RISC - V 的移植(历史项目),为 QSOE/N 提供了硬件启动经验。
QSOE 服务内容
提供底层和系统软件的咨询与开发服务:
- 基于微内核的操作系统
- 系统库和底层运行时
- 实时应用的虚拟化
- RISC - V 系统启动
- FPGA 的 AI 辅助开发
服务范围从专注的启动工作到长期的架构设计和实现。欢迎联系讨论具体需求。
关于 QSOE 系统
QSOE 系统是 Yuri Zaporozhets 的独立项目。Yuri Zaporozhets 是一位拥有 25 年以上底层软件开发经验的系统软件开发者,曾参与内核、操作系统、运行时以及相关硬件启动工作。
联系 QSOE
电子邮件是联系的最佳方式。
邮箱地址及其他相关平台信息可获取。
QSOE 系统未来会如何发展,能否顺利达成路线图中的目标呢?
6

被折叠的 条评论
为什么被折叠?



