借鉴QNX理念的可选内核操作系统
速览
该操作系统借鉴了QNX的设计哲学,旨在提供更高的灵活性和安全性。其核心特性在于支持可选内核,允许用户或开发者根据具体需求选择不同的内核模块。这种架构设计有望在嵌入式系统和关键任务应用中提供更优的性能与可靠性。
AI 深度解读
QSOE:一款受 QNX 启发的双内核操作系统深度解读
背景
在操作系统领域,QNX Neutrino 长期以来以其高可靠性、微内核架构以及同步消息传递 IPC(进程间通信)机制,在嵌入式系统和实时计算领域占据重要地位。然而,随着硬件架构的演进,特别是 RISC-V 生态的兴起,开发者对于能够利用现代硬件特性且保持 QNX 设计哲学的操作系统需求日益增长。
在此背景下,QSOE(QSOE Inspired Operating Environment)项目应运而生。该项目旨在构建一个受 QNX 启发的操作系统,其核心创新在于“可选内核”的设计模式。QSOE 并非单一内核的操作系统,而是提供了一个统一的用户空间和构建系统,允许用户在两种截然不同的内核之间进行选择:一个是该项目从零开始编写的微内核 Skimmer,另一个是业界知名的形式化验证微内核 seL4。
目前,QSOE 0.1 版本已作为首个公共发布版本推出,标志着这一统一双内核系统正式进入公众视野。该项目主要面向 64 位 RISC-V 架构(RV64, Sv39),并在 SiFive HiFive Unmatched (FU740) 开发板上实现了真实硬件启动,同时通过 QEMU 支持日常开发测试。
核心内容
QSOE 的设计哲学严格遵循 QNX Neutrino 的传统:内核保持极简,绝大多数功能(如驱动程序、服务、文件系统)均运行在用户空间;系统通过同步消息传递 IPC 进行通信;并采用资源管理器(Resource Manager)模型来管理服务。
双内核架构与共享用户空间
QSOE 的核心亮点在于其“双内核”变体共享同一用户空间和构建系统的设计:
- QSOE/N:基于 Skimmer 微内核。Skimmer 是该项目从零开始编写的微内核,设计上原生支持对称多处理(SMP)。
- QSOE/L:基于 seL4 微内核。seL4 是一个经过形式化验证的高安全性微内核。
尽管内核不同,但两个变体在编译后,其用户空间(Userspace)是 100% identical 的。唯一因内核不同而单独生成的组件是 taskman(任务管理器)和 libc.so(C 标准库)。在源代码层面,libc.so 约有 85% 是共享的,分歧仅出现在与内核交互的薄层接口处。
目标平台与启动流程
QSOE 主要针对 64 位 RISC-V 平台,特别是 SiFive HiFive Unmatched (FU740) 开发板。
- QEMU 环境:日常开发主要使用 QEMU。QSOE/N 需要 QEMU 11.0.1 或更高版本以支持 AIA(Advanced Interrupt Architecture)中断控制器;QSOE/L 则使用带有 virtio 根磁盘的 PLIC 机器模型。
- 真实硬件:两个变体现在均能在真实硬件上启动。
文件结构与分发
QSOE 提供源码构建和预构建二进制文件两种获取方式。主要文件包括:
- skimmer.bin:QSOE/N 的内核镜像,由引导加载程序加载。
- modpkg.cpio:共享的用户空间模块包,包含
taskman、init、C 库、Shell、驱动和工具。QSOE/N 将其作为 initrd 与skimmer.bin一起加载。 - qsoe-l-*.elf:QSOE/L 的单一自包含 ELF 文件,捆绑了
elfloader、seL4 内核、taskman和用户空间。分为 QEMU (qemu) 和 SiFive 硬件 (sifive) 两个版本。 - mrbml-riscv64.efi:QSOE 自研的引导加载程序(EFI 应用),用于在真实硬件上驱动启动菜单。
- nvme.img.gz:预构建的 QEMU 磁盘镜像,包含 EFI 分区和根文件系统,可直接启动至
mr-bml菜单。 - virtio.img.gz:仅用于 QEMU 中运行 QSOE/L 的辅助根磁盘。
安装与构建
- QEMU 快速启动:用户只需解压
nvme.img.gz(若运行 QSOE/L 则加上virtio.img.gz),并使用提供的run-nvme.sh脚本即可启动。脚本会自动选择正确的 QEMU 机器类型和固件。默认登录用户为root,密码为QSOE。 - 真实硬件安装:需要在已运行 Linux 的开发板上操作。将
mrbml-riscv64.efi放入 EFI 系统分区(ESP),并将内核文件放入/boot/qsoe/目录。通过编辑/boot/mr-bml/mr-bml.cfg配置文件来指定内核路径和根文件系统分区(mainfs=)。 - 源码构建:使用
riscv64-linux-gnu-交叉编译工具链和标准make命令。主仓库通过make prepare拉取对应标签的组件仓库,make构建两个变体,make dist生成 QEMU 磁盘镜像。整个项目采用 Apache-2.0 许可证。
文档与路线图
QSOE 提供了详细的 PDF 文档,包括设计架构、用户指南、编程手册以及 Unix/QNX 软件移植指南(特别指出了 fork()、brk() 等系统调用的差异)。
项目制定了从 0.1 到 1.0 的十阶段路线图,包括:
- 0.2:在 GK208 显卡上实现文本模式控制台,支持实时音频工作的硬件可视化。
- 0.3:引入首个可写文件系统
qrvfs,支持文件创建、删除等操作。 - 0.4:开发双面板文件管理器,作为旗舰应用。
- 0.5:支持
deva-hdmi音频设备,奠定硬实时路径的基础。 - 0.6:提供全面的合规性测试套件和音频实时包。
- 0.8:支持第二款硬件目标 SpaceMiT K3 及 AIA 中断架构。
- 0.9:推进 QNX-libc 兼容性,重新编译并运行 QNX 源工具集。
关键要点
- 双内核选择:QSOE 允许用户在自研的 Skimmer 微内核(QSOE/N)和经过形式化验证的 seL4 微内核(QSOE/L)之间选择,同时保持 100% 相同的用户空间体验。
- QNX 设计哲学:严格遵循微内核架构,内核极简,功能移至用户空间,采用同步消息传递 IPC 和资源管理器模型。
- RISC-V 原生支持:主要面向 64 位 RISC-V 架构(RV64, Sv39),已在 SiFive HiFive Unmatched 真实硬件上成功启动。
- 高度共享的代码库:两个内核变体共享构建系统和绝大部分用户空间代码,仅内核接口层的 C 库和任务管理器存在差异,极大降低了维护成本。
- 灵活的部署方式:提供预构建的 QEMU 磁盘镜像以便快速测试,同时也支持在真实硬件上通过 EFI 引导加载程序
mr-bml进行安装和启动。 - 开源许可:整个项目树采用 Apache-2.0 许可证,源代码托管在 GitLab 上。
- 明确的演进路线:从 0.1 到 1.0 有详细的里程碑规划,涵盖文件系统完善、音频实时支持、多硬件平台适配及 QNX 兼容性提升。
意义与影响
QSOE 的发布对于 RISC-V 生态系统和微内核操作系统研究具有多重意义。
首先,它证明了微内核架构在现代 RISC-V 硬件上的可行性与实用性。
