Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
qrv — QRV 操作系统 | Kitploit
工具/GitHubGitHub/r-tty/qrv
嵌入式系统安全硬件安全论文与研究学习与教育精选资源
GitHubr-tty/qrv

qrv

QRV 操作系统

查看仓库
24144个月前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

QRV — 一种基于 QNX Neutrino 的操作系统,面向 64 位 RISC-V 重新构想

QRV 是对 QNX Neutrino 6.4 操作系统 的一种从底层进行的适配和重新实现,面向现代 64 位硬件,以 RISC-V (rv64g) 为主要架构,x86-64 为次要目标。该项目始于 2020 年圣诞夜。名称 QRV 刻意避免与 QNX 商标产生任何关联。

QRV 是一个 完整的操作系统,而不仅仅是一个内核。微内核是其核心——但大部分工作都投入到了围绕它的一切之中。最引人注目的是 taskman,即用户态进程/内存/路径管理器(QNX 的 procnto),它被深度重写并提升出内核,移入用户空间;与之相伴,C 库、设备驱动程序、文件系统、动态加载器和系统服务器均已移植,实现了 64 位清洁化,并且在许多地方进行了实质性的重写。微内核的设计很小;QRV 的主体是围绕它的操作系统。

这不是一个仅仅在新编译器上编译旧代码的分支。这是一个逐模块仔细移植到真正的 LP64 模型的过程,拆除了专有的 procnto 边界,替换了 IFS/启动机制,并且——在最近的版本中——完全移除了内核的大内核锁,并将进程/内存/路径管理器移出内核,进入一个用户模式服务器。

本 README 描述的是 QRV v0.43。

开发博客(包含移植的完整故事)位于 **https://r-tty.blogspot.com**。一份书籍长度的叙述,《QRV 移植故事》,存在于源代码树的 doc/tex/PortingStory/ 下。

QRV 是在与 Claude Code(Anthropic 的智能编码工具)紧密合作下开发的——许多移植、SMP 调试和文档(包括本 README)都是以人-AI 结对编程的方式进行的,与作者并肩工作。


目录

  1. 什么是 QRV
  2. 许可
  3. 获取源代码:obtain_proj.sh 与 os/ 树
  4. 系统架构
  5. Taskman 与 TM_PRIV 特权系统调用
  6. 大内核锁——及其移除
  7. 存储:devb-nvme 与 fs-qrv
  8. 用户空间
  9. 构建与运行
  10. 在真实硬件上运行
  11. 结束语:为什么一个自由克隆至关重要

1. 什么是 QRV

QNX 是一个 微内核 实时操作系统,其核心理念是 同步消息传递。在 QNX 中,内核本身非常小——它知道如何调度线程、传递消息、发送信号、处理定时器和中断,除此之外几乎不做其他事。一个单体内核会放在 内核内部 的所有东西——进程管理器、内存管理器、文件系统、设备驱动程序、网络栈——都在普通的用户进程(称为 资源管理器)中运行,它们通过同样的 发送 / 接收 / 回复 IPC 原语相互通信以及与客户端通信。

这种架构正是 QNX 优雅的原因,也是 QRV 所保留的。一个想要打开文件的程序发送一条消息;文件系统服务器接收它,完成工作,然后回复。内核只负责协调会合。结果是:一个驱动程序可以崩溃并在不关闭内核的情况下重新启动,可信计算基以数十 KB 计,而“内核”与“应用程序”之间的边界是一条消息,而不是一个充满系统调用的特权墙。

QRV 采用 2009 年时期的 QNX Neutrino 6.4 社区源代码,并将该设计向前推进:

  • 64 位清洁 (LP64)。 每个指针和大小类型都是 64 位;该移植会追踪并修复 32 位代码中普遍存在的 int/uint32_t/pid_t 在指针上的截断问题。
  • RISC-V 优先。 主要目标平台是 qemu-system-riscv64(virt 机器)和 SiFive Unmatched (FU740) 开发板。x86-64 保持可构建,作为可移植性检查。
  • 没有专有边界。 没有 IFS 和 mkifs(QRV 改用标准的 CPIO 格式);没有独立的启动/内核拆分(启动代码直接与内核链接);没有 callout 和迷你驱动程序。
  • 现代构建。 类似 Linux 的 Kconfig 配置、增量内核链接(模块逐个添加和测试,而不是一次性扔给链接器进行 32→64 转换),以及交叉编译器工具链(riscv64-linux-gnu-gcc)。
  • 重命名、去商标化的词汇表。 procnto 在整个代码中变为 taskman(任务管理器);所有“Neutrino”引用均被清除。

QRV 不 实现 fork()(程序通过 posix_spawn() 启动),并且 没有请求分页和交换空间——这与 QNX 在其 8.0 一代中做出的选择相同。


2. 许可

QRV 受 两个许可证同时管辖,理解它们的区别在您构建或重新发布任何东西之前至关重要。

  • QRV 自身的代码采用 Apache License 2.0。 本项目从头编写的所有内容——RISC-V 移植、新的构建系统、用户态 taskman 拆分、无锁内核重写、我们创作的驱动程序和工具——均为 Apache 2.0。全文见 LICENSE.txt。

  • QNX 衍生代码采用 BlackBerry QNX Community License (QCL) 2.0。 QRV 中源自 2009 年 QNX Neutrino 社区源代码的部分仍受 QCL 管辖,该许可证仅允许对衍生源码进行 非商业和学术使用。QRV 不会,也不能重新许可 QNX 的代码。

这种双重许可的现实正是 为什么此仓库不包含一个可直接构建的源码树 的原因。我们不被允许重新分发 QNX 衍生源码。因此,本仓库不提供代码,而是提供一个 配方(见下一节):一张每个 QNX 文件去往何处的映射,加上用于转换它的 QRV 补丁。您自行从公共镜像获取上游的 QNX 社区源代码,配方会在您的机器上重建 QRV 树。您的副本归您所有;我们仅重新分发我们自己拥有 Apache 许可的补丁和元数据。

QRV 还包含了在其他宽松许可证下的代码——例如从 FreeBSD 采用的 BSD 许可组件(用于替换老旧的 QNX 模块)、一个源自 xv6 的 MIT 许可 virtio 块驱动程序,以及作为系统 shell 的 MirBSD Korn shell (mksh)。WHAT_IS_WHAT.md 是权威的、按组件细分的许可证和来源说明——当您对某个特定文件或子系统不确定时,请查阅它。

最后,仓库中包含 PETITION.md:一份向 QNX Software Systems 和 BlackBerry 发出的公开请求,希望将历史上 2007–2009 年的 Neutrino 源代码在经 OSI 批准的宽松许可证下重新发布。如果您希望这项工作的基础有一天能完全自由,该文档就是您可以加上自己签名的地方。


3. 获取源代码:obtain_proj.sh 与 os/ 树

由于 QNX 衍生源代码无法在此重新分发,此仓库是一个 源码重建分发版。它包含:

文件/目录用途
obtain_proj.sh重建脚本——运行它。
placement.txt将每个上游 QNX 路径映射到其 QRV 路径(约 680 条记录)。
patches/QRV 补丁系列,LZ4 压缩,以及一个 series 顺序文件。
LICENSE.txtApache License 2.0。
WHAT_IS_WHAT.md按组件细分的许可证和来源说明。
PETITION.md重新许可证请愿书。

脚本的操作```

$ ./obtain_proj.sh

1. **克隆上游 QNX 社区镜像** (`github.com/vocho/openqnx`,
   浅克隆)。
2. **放置文件** 根据 `placement.txt`,将每个上游
   文件复制到其在 `os/` 下的 QRV 位置。它会报告放置、
   已存在或缺失的文件数量。
3. **删除克隆** 在放置完成后。
4. **应用 QRV 补丁系列** 按顺序从 `patches/series` 应用。每个
   补丁是 LZ4 压缩的 (`*.patch.lz4`),并使用
   `lz4cat … | patch -p1` 应用。补丁带有当前
   发布的版本。
5. **设置可执行权限** 针对少数需要此权限的脚本
   (例如 `emu.sh`、`host_tools/mkgpt.py`)。

所需的工具是 `git`、`patch` 和 `lz4cat` (来自 `lz4`
软件包);脚本会提前检查它们,并告诉您如何安装
任何缺失的工具。

最终产物是 **`os/`** —— 一个完整、可构建的 QRV 源代码树:```
os/
├── kernel/          Everything linked into the qrv-kernel binary
│   ├── arch/riscv/     RISC-V port: vectors, traps, SBI, context switch,
│   │   ├── startup/        arch-specific startup (head.S, mmu.c, …)
│   │   ├── platform/       qemu_virt/, unmatched/
│   │   └── include/        context.h, cpu_paging.h, sbi.h, …
│   ├── startup/         arch-independent startup (hardware_init, smp, …)
│   ├── nano/            core nanokernel: messaging, scheduling, sync, xfer
│   ├── kext/            kernel extensions (kerexts)
│   └── include/         kernel-internal headers
├── taskman/         The Task Manager (QNX's "procnto"), a user-mode server
│   ├── sys/            system manager: main, ELF loader, support
│   ├── proc/           process manager: spawn, wait, …
│   ├── mem/            memory manager: page tables, physical allocator
│   │   └── pageman/        page-granularity virtual-memory operations
│   └── path/           path manager: namespace, /dev/*, /proc/*
├── lib/             C library and runtime
├── include/         User-space-visible headers (the public ABI)
├── userland/        Shell, utilities, drivers, servers (resource managers)
├── servers/         pci, slogger
├── dev/             Device drivers (virtio block, 8250 UART, …)
├── boot/            Boot artifacts and deploy helpers
├── host_tools/      Host-side tooling (mkgpt.py, …)
├── doc/             Documentation, incl. The QRV Porting Story (LaTeX)
├── Kconfig, Makefile, def.mk, common.mk, emu.sh

从那里,cd os && make 构建系统(参见 §9)。


4. 系统架构

下载工具