ReliefNT 5.1.0

发布日期:

2026-10-19 11:19:37 UTC

发布标签:

v5.1.0

版本提交:

09930b87355b8abbb75e39b693a6a7765ece2397

原始说明:

GitHub Release

备注

本页归档发布时的完整说明,仅转换文档格式并将旧相对链接固定到对应标签。 文中的路径、功能范围、验证结果与已知限制均指该历史版本,不代表当前版本状态或重新验收。

发布范围

  • 前一版本提交:f8f5a4908807e81cca7ed766fb6c60e7829767dc(将版本设为 5.0.0 的提交)。

  • 本次范围为该提交之后、v5.1.0 所指向的本次 5.1.0 版本提交(含)之间的有效内核变更;版本提交的完整 SHA 由发布时的标签确定。

  • 本说明仅涵盖 ReliefNT 内核仓自身的内核、UAPI、驱动、构建与开发工具变更,不涵盖 ReliefOS 桌面应用、安装器或镜像集成。

  • 比较本次源码范围。

更新内容

  • VT、TTY 与 Linux 接口: 补充标准 VT/键盘控制 ioctl、虚拟终端所有权交接和 termios OPOST 输出后处理;增加 /dev/tty0 对当前 VT 的解析。fbdev 结构布局与设备信息按 Linux ABI 补齐,包含稳定的显存映射长度、模式设置及图形设备 sysfs 链接;SVGA 帧缓冲 pitch 校验补上溢出保护。

  • evdev、PS/2 与帧缓冲刷新: evdev 使用按打开描述符独立的读取游标;缓冲区溢出时向受影响设备报告 SYN_DROPPED,再以 SYN_REPORT 结束丢失区间、丢弃可能从半帧开始的旧积压,并从新事件继续,用户态可查询按键/绝对轴状态后重同步。IRQ12 只消费 8042 辅助设备字节,避免 PS/2 鼠标路径取走键盘字节、丢失按键释放。修正 VMware SVGA FIFO/trace 更新,并增加可让出锁的周期性整帧刷新与背压恢复路径。

  • 进程、共享内存与文件映射: 实现 PR_SET_PDEATHSIG 和 PR_GET_PDEATHSIG;补充 /proc/sys/kernel/overflowuid 与 overflowgid,默认读值为 65534。已有 memfd_create 增加封印读取/添加及对写入、截断和可写映射的封印检查。System V shmget、shmat、shmdt、shmctl 的 syscall 编号在 5.0.0 起点已存在,但当时内核没有对应处理器;本区间新增了内核实现,并补上共享映射在 fork、VMA 拆分和解除映射时的生命周期维护。另修正 mprotect、brk 与 SHM VMA 扩展/拆分期间的状态处理。

  • 音频: 加入 Intel HDA 控制器、编解码器、PCM、ALSA 与 OSS 内核接口,并调整 AC97、ES1371 驱动接入内核音频层;导出对应 Linux 音频 UAPI。

  • 引导、驱动、存储与 PCI: kernel.sys 带 Multiboot2 头并由 GRUB 直接引导;启动期间提前加载 IDT、屏蔽 PIC 并修正中断应答顺序。移除可加载 .drv 模型,六种驱动内建,并公开驱动类型常量。驱动按输入、网络、声音、TTY、USB、视频及存储职责迁移;存储代码从 bootstrap 汇总构建拆到 block/、fs/、drivers/storage/ 等模块,拆分共享状态和跨模块接口并移除 unity build。PCI 初始化建立设备配置缓存,供后续查询复用,减少重复全总线枚举。

  • 调度、系统调用与时间: EEVDF 公平队列加入增强红黑树索引以辅助实体筛选;等待队列锁、单页写权限检查、管道批量复制和系统调用返回路径均有优化,管道容量由 4 KiB 增至 65535 字节。CPU ID 读取优先使用 IA32_TSC_AUX 配合 RDPID/RDTSCP,早期启动或不支持时回退 APIC 路径,避免支持该特性的 CPU 在系统调用路径上读 LAPIC MMIO。每 CPU 当前任务指针将系统调用帧捕获从任务表扫描改为 O(1),未变化的用户 FS 基址不再重复写 MSR;同一任务续跑且无信号或重调度需求时跳过完整调度轮次,唤醒的任务会在下一用户返回边界触发重调度,并在返回用户态时仅于地址空间或映射变化后重载 CR3。没有待处理信号且无需切换任务时也免去不必要的 FPU 保存/恢复。增加基于 TSC 的 tick 间时间插值、clock_gettime/clock_getres vDSO 快路径,以及身份查询和时间类系统调用的轻量分发,省去这些不访问文件描述符的路径上的标准输入物化与归属扫描;不支持或不可信的时钟路径仍回退系统调用。

  • 输入唤醒与内存访问: 修正事件等待、信号与输入设备间的唤醒和竞态处理,避免输入积压/丢失;改进等待队列锁竞争及用户缓冲区单页可写检查路径。

  • 日志与控制台: 统一内核和驱动日志等级及驱动日志回调,默认使用低饱和 ANSI 颜色;启动命令行的 logcolor=0 可从第一条内核日志关闭配色。启动日志在 boot complete 后保留于 tty1,PID 1/OpenRC 输出接续现有文本和光标位置,不清屏;日志纳入 tty1 历史,切换 VT 后仍可恢复。未显式重定向或关闭的标准输入、输出、错误共享同一个读写 /dev/console 打开描述,打开时绑定当前 VT,提供终端读写、termios、窗口尺寸和 VT ioctl,但不会自动取得控制终端。

  • 构建与开发工具: 增加锁定依赖 URL 的 fetch-check 探测和 vDSO 测试工具;移除内核源码对宿主 libc 头文件的依赖。

破坏性更新

是,以下接口、构建方式和源码路径发生不兼容变化:

  • 可加载驱动: .drv 运行时装载、扫描和卸载机制及对应构建产物、drivers 构建目标已移除。mouse、serial、e1000、AC97、ES1371 和 HDA 驱动内建于 kernel.sys;驱动管理控制操作返回 -EOPNOTSUPP。驱动列表接口仍保留;驱动 kernel API 表另有扩展,不能据此认为其尺寸保持不变,详见下文验证限制。

  • 引导链: loader.elf、boot/loader/、boot handoff 头文件及 loader 专属的完整性检查配置已移除。kernel.sys 成为 Multiboot2 目标。

  • 旧名兼容头: include/leonos/、include/uapi/leonos/ 和 kernel/reliefnt/include/ntclks/ 转发头树已删除;应使用对应的 reliefos 公共头或 reliefnt 内核私有头。

  • 旧构建兼容输入: LEONOS_TEST_PYTHON、LEONOS_BUILD_OWNER 回退变量及 .leonos-out 旧输出目录标记不再识别。旧 loader 构建目标也已取消。

  • 退役组件配置: 删除 cmd 的 LEON_COMPONENT_TOOL_CMD_* Kconfig 开关及 RELIEFOS_LAYOUT_OPT_CMD 布局宏,并删除旧图形 Ping 的 LEON_COMPONENT_APP_PING_* 开关。外部配置片段和构建脚本应移除这些输入,不再依赖它们选择组件或路径。

  • 源码目录: 驱动按职责移入 drivers/input/、drivers/net/、drivers/sound/、drivers/tty/、drivers/usb/、drivers/video/ 和 drivers/storage/;存储实现拆分到 block/、fs/、firmware/ 等目录,原 drivers/bootstrap/storage/ 路径不再适用。

更新与迁移注意事项

  • 更新 GRUB 配置及自有引导脚本,改为通过 Multiboot2 直接加载 kernel.sys;不要再依赖 loader.elf 或旧 boot handoff 数据结构。

  • 自定义 .drv 驱动需纳入内核源码和链接配置,使用内建驱动描述符注册;调用驱动运行时控制接口的程序应处理 -EOPNOTSUPP。

  • 将包含路径从已删除的 leonos/ntclks 兼容树改为 include/reliefos/、include/uapi/reliefos/ 和 kernel/reliefnt/include/reliefnt/ 下的现行头文件。

  • 更新外部构建脚本引用的驱动、存储源码路径及构建目标。若脚本显式传递旧测试解释器或构建所有权变量,应改用 RELIEFOS_TEST_PYTHON、RELIEFOS_BUILD_OWNER;旧输出目录标记无法由当前清理脚本识别,建议为新版构建使用新的 O= 输出目录。

开发者提示

  • 驱动当前静态链接进 kernel.sys,存储代码按独立职责拆分并移除了 unity build;外部构建清单需与新目录和对象边界同步。

  • EEVDF 公平队列使用增强红黑树辅助索引;该实现不意味着队列的所有操作路径都具有相同的渐进复杂度。

  • vDSO 快路径受支持的时钟类型及 TSC 信任条件限制,其他情况由内核系统调用路径处理。

  • make fetch-check 用于探测依赖锁文件记录的 URL 状态,不替代依赖获取或内容校验。

  • 后续版本遵循 仓库长期发布规范:以版本提交确定 (上一版本提交, 本次版本提交] 范围,标签必须指向本次版本提交的完整 SHA;只汇总本仓有效变更并提供 compare 链接。两仓说明分别审阅,版本号和纯 merge 不列为更新;源码发布使用标签与 GitHub 自动源码归档,二进制仅在明确选择后从本版重建并附校验和及归属信息。发布说明从正文文件发布并回读核对,VMware 状态在完成前持续标明未完成。

验证与已知限制

  • 内核宿主普通、ASan、UBSan 工具测试通过;test-header-export 通过,检查 81 个头文件。

  • make test 未通过:test-abi 中 reliefos_driver_kernel_api golden 大小为 168,当前 ABI 大小为 296。当前接口增加了 PCI、DMA、IRQ、音频、日志等回调;未修改 ABI golden,也未修改音频 manifest。

  • 父仓执行 TMPDIR="$PWD/out/tmp" make O=out/xorg-vmware-debug PROFILE=debug -j4 build-info kernel 成功,构建报告的 5.1.0 数字版本宏为 5/1/0。

  • 未打包镜像、未进行 VM 运行验收;VMware 验证未完成,真实硬件未验证。构建产物不上传;区间内的历史局部验证不代表最终版本的整版验收。

获取与追溯

  • 获取 v5.1.0 标签对应的 ReliefNT 源码,以及 GitHub 为该标签自动生成的源码归档(Source code ZIP/TAR.GZ)。本次源码发布不上传旧二进制。

  • 自动源码归档不展开第三方子模块;完整构建请克隆本标签并执行 git submodule update --init --recursive,再按 README 获取锁定的构建依赖。

  • 查看源码比较。