一个受QNX启发的、具有可选内核的操作系统

Hacker News Top 产品

摘要

QSOE 0.1,一个受QNX启发、具有可选内核(Skimmer微内核或seL4)的操作系统已发布。它面向64位RISC-V硬件,采用Apache-2.0许可证。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/06/28 22:59

# QSOE 系统 来源:https://qsoe.net/ ## QSOE 一款受 QNX 启发、支持可切换内核的操作系统。 **新闻:** QSOE 0.1 发布 —— 统一双内核系统的首个公开版本(2026 年 6 月)。阅读公告 → (https://qsoe-dev.blogspot.com/2026/06/qsoe-project-v01-is-released.html) QSOE 提供两个变体,它们共享同一个用户空间和同一套构建系统。QSOE/N 运行在 **Skimmer** 上 —— 一个为此项目从头编写的微内核(天生支持 SMP);QSOE/L 则使用 **seL4** 作为其内核。 两个变体编译后,都会提供可直接用于(例如)U-Boot 加载器的内核和 initrd 文件。两个变体的用户空间 **100% 相同**;唯一按内核分别产出的是 `taskman`(任务管理器)和 `libc.so`(C 语言库)—— 后者在源码层面约 85% 共享,仅在对接内核的薄层处有所差异。 该设计遵循 QNX Neutrino 的传统:一个微内核,其余所有功能位于用户空间,同步消息传递 IPC,以及采用资源管理器模型的服务。 QSOE 面向 SiFive HiFive Unmatched(`FU740`)上的 64 位 RISC-V(`RV64`、`Sv39`),日常开发使用 QEMU。两个 QSOE 变体现在都能在真实硬件上启动。采用 Apache-2.0 许可发布。 下载QSOE 可以从源码构建,或从预编译的二进制文件安装。每个发布的预制镜像发布在 github.com/qsoe-dev/dl (https://github.com/qsoe-dev/dl)(当前版本:**0.1**)。相关文件如下: - `skimmer.bin` (https://github.com/qsoe-dev/dl/raw/main/releases/0.1/bin/skimmer.bin) —— Skimmer 微内核:**QSOE/N** 变体的内核。一个原始二进制镜像,由引导加载程序(或 QEMU)与下面的用户空间包一同加载。 - `modpkg.cpio` (https://github.com/qsoe-dev/dl/raw/main/releases/0.1/bin/modpkg.cpio) —— 模块包:共享的 QSOE 用户空间(taskman、`init`、C 语言库、Shell、驱动和实用程序),打包为 CPIO 归档。**QSOE/N** 将其作为 initrd 与 `skimmer.bin` 一同启动。 - `qsoe-l-qemu.elf` (https://github.com/qsoe-dev/dl/raw/main/releases/0.1/bin/qsoe-l-qemu.elf) —— **QSOE/L** 变体(基于 seL4 内核)作为单个自包含 ELF 文件,用于 QEMU `virt` 机器。它捆绑了 elfloader、seL4 内核、taskman 和用户空间 —— 无需其他文件即可启动。 - `qsoe-l-sifive.elf` (https://github.com/qsoe-dev/dl/raw/main/releases/0.1/bin/qsoe-l-sifive.elf) —— 相同的 QSOE/L 镜像,为 SiFive HiFive Unmatched(FU740)板编译。 - `mrbml-riscv64.efi` (https://github.com/qsoe-dev/dl/raw/main/releases/0.1/bin/mrbml-riscv64.efi) —— **mr-bml**,QSOE 自己的引导加载程序(RISC-V 的 EFI 应用程序)。它可以加载任一变体,并在真实硬件上驱动启动菜单。 - `nvme.img.gz` (https://github.com/qsoe-dev/dl/raw/main/releases/0.1/bin/nvme.img.gz) —— 一个开箱即用、自启动的 QEMU 磁盘镜像(GPT)。其 EFI 分区包含 `mr-bml`,磁盘上的根分区包含两个内核 —— 因此 QEMU 直接启动到 mr-bml 菜单,无需 `-kernel` 参数。体验 QSOE 的最快方式;参见下文**在 QEMU 下运行**。 - `virtio.img.gz` (https://github.com/qsoe-dev/dl/raw/main/releases/0.1/bin/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 的最快方式 —— 无需硬件,无需摆弄 `-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 仓库 (https://gitlab.com/qsoe/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:` 提示符。使用密码 `QSOE` 以 `root` 身份登录。 安装真实的硬件,真实的磁盘。QSOE 0.1 可在 SiFive HiFive Unmatched(FU740)上启动;SpaceMiT K3 是未来的目标。假设你有一块已运行 Linux 的板子 —— 你将把文件放到其现有的 EFI 和启动分区上,因此需要熟悉该板子的固件。 启动模型很简单:**mr-bml** 位于 EFI 系统分区;它从一个 **ext2/3/4** 分区读取菜单和内核;选中的变体随后从一个 **fs-qrv** 分区挂载自己的根文件系统。 #### 步骤 1. 将 `mrbml-riscv64.efi` 复制到你的 ESP 中,路径为 `EFI/BOOT/BOOTRISCV64.EFI`(UEFI 可移动介质路径),或者使用 `efibootmgr` 将其注册为一个启动项。 2. 在你的启动/根文件系统上创建 `/boot/qsoe/` 目录,并将内核复制到该目录下:QSOE/N 使用 `skimmer.bin` + `modpkg.cpio`,QSOE/L 使用 `qsoe-l-sifive.elf`。 3. 创建 `/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 使用 `riscv64-linux-gnu-` 交叉工具链(rv64gc)和标准 `make` 构建;QEMU 可用于测试。总览仓库负责协调构建,并拉取与其发布标签匹配的组件仓库。 `` git clone https://gitlab.com/qsoe/os cd os make prepare # 获取此标签对应的组件(参见 component.list) make # 构建两个变体:先 QSOE/N,再 QSOE/L make dist # 可选:生成 QEMU 磁盘镜像(nvme.img.gz、virtio.img.gz) `` QSOE/L 会在 `make prepare` 期间额外浅克隆 seL4 内核。构建产物正好是下载列表中的那些文件。整个代码树使用 Apache-2.0 许可;源码托管在 gitlab.com/qsoe (https://gitlab.com/qsoe)。 文档QSOE 手册,随各版本以 PDF 形式发布: - `Design.pdf` (https://github.com/qsoe-dev/doc/raw/main/Design.pdf) —— 架构:双内核模型、taskman、IPC 和资源管理器设计。 - `UserGuide.pdf` (https://github.com/qsoe-dev/doc/raw/main/UserGuide.pdf) —— 安装、Shell、基本命令、文本编辑器和实用程序。 - `ProgrammingBook.pdf` (https://github.com/qsoe-dev/doc/raw/main/ProgrammingBook.pdf) —— QSOE 编程,包括**资源服务器框架**章节。 - `AppPortingGuide.pdf` (https://github.com/qsoe-dev/doc/raw/main/AppPortingGuide.pdf) —— 将 Unix(及 QNX)软件移植到 QSOE:需要注意的事项 —— 没有 `fork()`、没有 `brk()`、`select()` 需通过 `poll()` 实现,以及其他内容。 路线图常有人说 Linux 内核没有路线图。但 QSOE 有 —— 从今天的 **0.1** 到统一的 **1.0** 之间的十个版本已经规划好。这是一个工作计划,而非承诺:里程碑可能会随着实际开发揭示下一步重点而有所调整。 - `0.1` —— **第一个公开发布版。** 双内核基础、共享用户空间、只读 `fs-qrv` 挂载于 `/usr`、交互式 getty + 登录、源码开放。*(当前版本)* - `0.2` —— 在 GK208(“Kepler”)上实现文本模式控制台:可观察的设备端显示,使得实时音频工作可以在硬件上被看到,而不只是通过串口。 - `0.3` —— 首个可写文件系统:qrvfs 增加文件创建/删除、`O_CREAT`/`O_TRUNC`、`realpath` 和符号链接解析。 - `0.4` —— 经典的双面板文件管理器:QSOE 的旗舰应用,端到端地锻炼可写文件系统和用户空间。 - `0.5` —— 首个 `deva-hdmi` 音频设备,为硬实时路径所需的优先级/中断/调度打下基础。 - `0.6` —— 全面的合规性测试套件,以及音频实时包(在 N-CPU 系统上支持最多 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 (https://gitlab.com/gatemate/pc) —— 基于 Cologne Chip GateMate FPGA 的个人计算机。 - GateMate System/359 (https://gitlab.com/gatemate/s359) —— 一个受 IBM S/360 启发的 FPGA 计算系统实现,带有 I/O 通道和强大的宏汇编器。 - QRV (https://qsoe.net/qrv.html) —— QNX 到 RISC-V 的移植(历史项目);为 QSOE/N 的硬件启动提供了经验教训。 ## 服务 低层及系统软件的咨询与开发。 - 基于微内核的操作系统 - 系统库与低层运行时 - 面向实时应用的虚拟化 - RISC-V 系统启动 - FPGA 辅助开发 服务范围涵盖从聚焦的启动工作到长期的架构与实现。联系我讨论具体范围。 ## 关于 QSOE Systems 是 **Yuri Zaporozhets** 的独立实践项目,他是一位拥有 25 年以上底层软件开发经验的系统软件开发者 —— 包括内核、操作系统、运行时,以及其下的硬件启动工作。 ## 联系方式 邮件是联系我的最佳方式。 [[email protected]](mailto:[email protected])

相似文章

QSOE: 受QNX启发的双内核架构操作系统

Hacker News Top

QSOE项目v0.1发布,提供与QNX兼容的操作系统,包含两种微内核变体(自定义Skimmer内核和基于seL4的内核),共享用户空间,并支持SiFive Unmatched RISC-V硬件。

一人,双内核,与大量RISC-V

Hacker News Top

QRV Systems的Yuri Zaporozhets在FPGA上构建了一台基于RISC-V的个人计算机和一台大型机,并两次重写了QNX。他最新的操作系统QSOE正在FOSS世界中引起关注。

QBE – 编译器后端

Hacker News Top

QBE 是一个紧凑的、爱好级别的编译器后端,仅用 10% 的代码即可实现工业级优化编译器 70% 的性能,支持 amd64、arm64 和 riscv64,并采用简单的基于 SSA 的中间语言。

@no_stp_on_snek: 如果你想试试,可以在这里找到:

X AI KOLs Following

这是一个 llama.cpp 的分支,集成了 TurboQuant+,用于先进的 KV 缓存和权重量化,支持跨后端内核(Apple Silicon、NVIDIA CUDA、AMD ROCm、Vulkan),并被 LocalAI、Chronara 和 AtomicChat 用于生产环境。