QSOE Development

RSS: https://qsoe-dev.blogspot.com/feeds/posts/default?alt=rss
QSOE Dev,关于软件开发、编程与技术项目的博客。

QSOE 音频:Crystal Clear

QSOE 0.4 的验收标准只有一个:HDMI 音频提取器上能听到连续播放。作者在两天内用 SiFive HiFive Unmatched 和 SpacemiT K3 两块 RISC-V 板子、两个内核(QSOE/N 与基于 seL4 的 QSOE/L)完成首次出声。 调试过程几乎全走了弯路:musl stdio 缺少 readv,导致 Vorbis 解码器按字节发 IPC,占用心率达正常 5 倍;seL4 任务管理器内存分配看似正确却无声音,实为 GPU 未检测到显示;K3 上 DMA 取到垃圾描述符,十赫兹的继电器般噪声,最终通过对比 Linux 寄存器 dump,发现 K3 的 SRAM 对 CPU 缓存但 DMA 不查缓存,驱动需用 cbo.clean 显式回写。 核心教训:计数器只能反映软件认为正确的状态,真正判定要靠耳朵。
评论点赞收藏1 天前

qfpc:面向 QSOE 的 Pascal 编译器(基于 FPC)

qfpc 0.1 正式发布:一个基于 Free Pascal 裁剪出的 Object Pascal 编译器,专用于 QSOE 操作系统(RISC-V 64 单目标、单方言,不兼容其他系统)。 作者用 9 天从 FPC 的 59.5 万行代码中剥离出 10.3 万行,设计哲学是"一个目标、一种方言、不保留历史包袱":去掉多 CPU ifdef、多模式、代码页机制,统一 UTF-8,无泛型无 Variant,保留 COM/CORBA 接口和 inline assembler。 核心亮点是自研.qpu 单元文件格式(ELF 可重定位 + 接口段合一,类似 Rust rlib / Swift module / Delphi.dcu 的思路),以及整套 bootstrap 过程:编译器自身可自编译,RISC-V 版编译器在 qemu-user 下编译所有单元后产出与主机版逐字节一致的输出,途中还发现了一个枚举宽度未对齐的隐藏 bug。 运行时库 1.1 万行,测试 7 千行,qupkg(29 个单元)全量编译不到 1 秒,QSOE 自研链接器 7 毫秒链完 32 个目标文件。GPL-2.0-or-later 许可。
评论点赞收藏10 天前

seL4 for SpacemiT K3

The QSOE 0.3 notes say the K3 is QSOE/N only. That was true of the release set and, for the three days before it, false of the lab: on the evening of 14 September seL4 16.0.0 booted to user space on t...
评论点赞收藏14 天前

QSOE 0.3 版本发布

QSOE 0.3 发布,核心变化是让文件系统从只读变成可写并具备掉电修复能力:qrvfs 在 NVMe 上实现读写,每次挂载前跑 fscheck 修复异常,96 次掉电压力测试只产生可修复的泄漏状态。 性能方面,seL4 的 QSOE/L 之前所有线程都跑在 hart 0 上,改成 round-robin 调度后写盘压力测试从 731s 降到 162s,ls -la 从 1s 降到 0.12s;另外优化了 IPC 消息拷贝路径和 mmap 零页开销,QSOE/L 与 QSOE/N 的差距从 10 倍缩小到 2 倍出头。 架构上 taskman 接管了动态链接,不再携带独立运行时链接器, 的只读段通过共享页表位或 seL4 frame retype 让所有进程共享一份副本,spawn 内存从 200 页降到 143 页。 权限模型修复了一个安全漏洞:之前 relay 路径以 root 身份执行所有文件系统操作,现在改为携带调用者凭据。新增 StarFive VisionFive 2(JH7110)板卡支持,双内核均可启动。
评论点赞收藏14 天前

QSOE 0.2 release

The second QSOE release, v0.2, is out. As before it is a single numbered drop of both kernel variants, the boot loader, the shared userspace and libc: QSOE/N v0.26, with the custom "Skimmer" kernel. Q...
评论点赞收藏29 天前

QSOE v0.2-rc, in three release candidates

v0.1 was a singular machine. One userspace, booting on two kernels, at one console, on the board it was tuned for. Everything difficult about it was internal — the spawn-from-disk deadlock, the libc s...
评论点赞收藏36 天前

HFI BIOS 1.3 发布:支持 SpaceMiT K3 Pico ITX 开发板

HFI BIOS 1.3 发布,新增对 SpaceMiT K3 Pico ITX 开发板的支持。固件从 NOR 冷启动引导至 Linux 桌面,VideoBIOS 驱动面板,UFS 通过 SCSI 枚举,USB/PCIe/以太网均在固件层初始化后移交操作系统。 设备树由固件填写完整信息,POST 报告具体发现的存储设备名称和容量而非仅步骤状态。源码和二进制均可从 GitHub 获取。
评论点赞收藏46 天前

HFI BIOS:从想法到 K3 支持

HFI BIOS 项目六周内从第一个 commit 跑到支持两款不同 RISC-V 主板。最初尝试在 RISC-V 上模拟 x86 VBIOS 来驱动 NVIDIA GK208 显卡,发现是在用庞大机器避免写驱动,于是改为原生驱动。 关键转折是把视频接口变成契约——VideoBIOS Module,BIOS 只负责加载,不关心具体硬件。K3 板子上没有字符发生器,模块直接借一个 CPU hart 跑字体渲染,抽象依然成立。 三个 bug 都是同一类问题:冷启动时某个硬件引脚处于默认功能 0,导致显示、PCIe 复位、以太网 PHY 全部失效。
评论点赞收藏48 天前

jmcc:在 RISC-V 64 上运行的便携式 C 编译器

jmcc(Johnson-Magnusson C Compiler)成功编译整个 QSOE/N 微内核并在真实 RISC-V 64 硬件上启动,整个工具链不含 GCC。作者用 Claude Code 辅助将 pcc 移植到 RISC-V 64,解决了 MIPS 遗留指令、原子操作、64 位 ABI 等一系列问题。 pcc 由 Bell Labs 的 Stephen Johnson 在 1970 年代中期编写,是 C 和 Unix 早期传播的关键工具。Anders Magnusson 在 2000 年代中期重写了一半以上代码,使其可移植到现代架构。 作者的新工作是在此基础上添加 RISC-V 64 后端,最终实现全系统无 GCC 编译并启动到 root shell。
评论点赞收藏52 天前

QSOE/N v0.18:新增第二块开发板和第二套编译器

QSOE/N 操作系统 v0.18 新增 SpacemiT K3 芯片支持和 jmcc 编译器,修复了多处底层 bug。K3 的 DRAM 从 4 GiB 起始、16 核异构(8 个 X100 + 8 个 A100 AI 核),中断几何与 QEMU virt 完全不同。 jmcc 编译器不依赖 GCC 的 PIE 和 GOT 便利,暴露了 loader 跳过 R_RISCV_COPY relocation、线程 gp 设置错误等隐藏 bug。
评论点赞收藏52 天前

一个免费的类QNX操作系统(2003)

作者回顾2003年发起的RadiOS项目,这是一个兼容QNX的微内核操作系统。如今该理念演变为QSOE,支持64位RISC-V架构,可在真实硬件上运行。 文章展示了从汇编语言到现代RISC-V架构的技术演进历程,体现了长期技术追求的延续性。
评论点赞收藏102 天前

QSOE/L:首次从真实存储启动引发的死锁排查

作者在将 QSOE/L 移植到真实 NVMe 存储时遇到启动死锁。通过对比 QEMU 和另一版本 QSOE/N 的行为差异,排除了常见的指令缓存一致性 Bug。 最终定位到 taskman 进程在等待文件系统响应时,因同步机制循环依赖导致死锁。文章详细展示了利用硬件差异进行故障排除的工程思路。
评论点赞收藏105 天前

QSOE/L:在 seL4 上运行相同的用户空间

作者展示了如何在 seL4 微内核上构建兼容 QNX 的用户空间,重点解决了 IPC 限制、能力泄漏和 SMP 同步等底层工程难题。 通过重构任务管理器和内存回收机制,实现了进程的稳定创建与销毁,并在 QEMU 中完成了从启动到 Shell 交互的全流程验证。
评论点赞收藏112 天前

QSOE/N 第三部分:在 HiFive Unmatched 真机上首次启动

作者记录了将自研微内核 QSOE/N 从 QEMU 模拟器移植到 SiFive HiFive Unmatched 真机的过程。文章详细分析了五个主要障碍,包括镜像头格式、PCI 兼容性、物理内存管理及 CPU 拓扑识别等问题。 重点解决了 RISC-V 架构特有的指令缓存一致性(fence.i)和线程调度问题。最终成功在真机上获得交互式 Shell,并提到开发过程中使用了 Claude Code 辅助。
评论点赞收藏117 天前

QSOE/N 第二部分:从微内核到完整操作系统

作者详细记录了将 Skimmer 微内核扩展为完整操作系统 QSOE/N 的过程,实现了进程管理、C 库及驱动。核心创新在于将 POSIX 文件描述符直接映射为内核连接 ID,使读写操作无需经过 taskman 系统进程,从而优化了性能。 文章还深入剖析了多进程地址空间切换、同步对象 Bug 修复以及 POSIX 兼容性测试套件的实现细节。这是系列文章的第二部分,展示了在 QEMU 环境下构建类 QNX 系统的工程实践。
评论点赞收藏119 天前

QSOE/N 第一部分:证明核心(Skimmer v0.1–v0.5)

作者从零开始为64位RISC-V编写微内核Skimmer,结合DragonFly BSD并发模型与QNX IPC设计。通过v0.1到v0.5迭代,解决了SMP竞争、中断处理和同步IPC等核心问题。 文章详细记录了从基础引导到复杂压力测试的全过程,包括具体的Bug修复和调试方法论,证明了内核核心的稳定性。
评论点赞收藏120 天前

QSOE操作系统的诞生始末

作者讲述开发类QNX操作系统QSOE的起源。因争取QNX源码开源未果,决定基于形式化验证微内核seL4进行移植,并随后开发了自定义内核Skimmer以支持多核并发。 项目采用双内核架构,用户态代码完全共享。文中详细记录了从构思、命名到技术选型及早期实现的完整过程,包含大量底层系统设计细节。
评论点赞收藏128 天前

登录芦苇

登录后关注作者、收藏内容和参与讨论。