Repository navigation
Releases
ReliefNT 5.3.2
ReliefNT 5.3.2
更新内容
- 新增原生 PCIe
e1000e网卡驱动,支持 Intel 82574L/82574IT 与 82583V,并由现有网络服务统一管理设备。 - 新增可调度内核线程与工作队列,支持并行、合并及延迟工作;改进常驻管道 I/O 并行度和 FIFO 打开路由。
- 按 CPU 缓存物理地址位宽,减少重复读取和同步;写保护缺页在并发 COW 处理已完成时重新检查并继续,而不是误报故障。
- 修复 netlink multipart dump 的完成报文边界,并使
ppoll支持调用期间的临时 signal mask。 - 实现
RLIMIT_FSIZE对文件写入的限制,并扩展 mount/bind 实例支持,为多个系统实例隔离挂载关系。 - 移除已退役产品激活身份辅助接口,并修正 GNU Unifont 构建下载来源。
破坏性更新
- 是,涉及内核内部 ABI、模块配套和一项已退役的私有接口。 内核、initramfs、树外模块、符号版本及 ABI 清单必须使用同一版本;旧
.ko和 prepared SDK 不能与本版混用。移除的产品激活身份 helper 不再提供,依赖它的程序须改用标准系统信息接口。没有改变既有 syscall 编号或磁盘文件系统格式。
更新与迁移注意事项
- 本次为源码 Release,只提供标签和 GitHub 自动源码归档,不附预编译内核、模块、SDK 或镜像。使用 v5.3.2 对应配置执行
olddefconfig,并重新构建完整内核与 initramfs;树外模块须使用本版Module.symvers和 prepared SDK。 e1000e的设备表仅覆盖 Intel 82574L/82574IT 与 82583V。验证范围包括 QEMU 对 82574L 的模拟和 82583V host model;不应据此推断其他同属 e1000e 家族的设备或实体网卡已验证。- 新增 mount/bind 实例能力扩展挂载关系的隔离语义;更新时应使用匹配的用户态、内核和启动配置。
RLIMIT_FSIZE对超出限制的写入返回文件大小错误,应用应检查短写及EFBIG。 - 本版验证包含版本生成、字符串与数字宏、工具和 ownership 检查,以及 14 个 host smoke suites。该检查不等于完整系统启动、QEMU 全量回归或运行时驱动验收;VMware、实体硬件和长期稳定性尚未完成验收。
开发者提示
configs/build-version为 5.3.2,生成的版本数字字段为 5/3/2;EXTRAVERSION、LOCALVERSION 和模块 ABI 后缀仍分别处理,并遵守完整 release 长度限制。- 内核实现、UAPI、模块接口、探针和手册归属本仓;ReliefOS 桌面、打包、RPR 与镜像流程归主仓。保留既有 ABI golden,不以重生成基线掩盖差异。
- 本次范围为 ReliefNT v5.3.1 提交 d4e365b 之后至 v5.3.2 标签指向的版本提交;仅汇总本仓最终生效内容,排除 ReliefOS 应用、打包及纯合并。下一版以该版本提交为起点。
ReliefNT 5.3.1
更新内容
-
新增 Linux inotify 文件事件接口:实现 inode 监听、按用户配额、完整事件记录、重命名 cookie、队列溢出恢复和可写 sysctl;支持共享打开文件描述、poll/epoll、权限检查及监听对象的删除、卸载生命周期,导出对应 Linux UAPI。
-
改进高负载调度与执行路径:合并远端重新调度 IPI,使用各 CPU 本地 LAPIC 抢占和 ACPI PM 公平时间计数,减少延迟 PIT 中断导致的运行时间漏计;无 I/O 私有缺页保留完整用户返回检查,文件 I/O 在原有安全边界按工作预算让出。
-
修正同属主 PRIO_PROCESS 优先级调整权限和 evdev 事件代际处理,使桌面优先级策略、重复输入和等待唤醒符合现行接口语义;不新增实时调度或整个 syscall 的硬实时保证。
-
优化 SVGA 软件扫描输出:减少分散损伤区域的重复上传,使用适合显存的像素复制,并为经过校验的 SVGA 像素窗口配置 PAT write-combining;设备控制寄存器、FIFO、fence、VT 与 DMA 所有权边界保持受控。
-
新增 xHCI USB2/USB3 Hub、多级路由与下游设备热插拔:支持 Hub 端口供电、复位、状态变更和过流处理,USB2 multi-TT Hub 使用 single-TT 模式;TT 控制传输、子树移除及控制器模块卸载保留真实设备和在途资源生命周期。
-
新增 VFS 正/负名称缓存:只缓存成功与 ENOENT,按已审计文件系统的变更代际和设备写入代际校验;直接块写入同时失效原生文件系统缓存,设备撤销后恢复实时查询,权限仍逐次检查。缓存采用 512 KiB 分配载荷预算及 LRU,不固定 inode、挂载或模块引用;有界回收不会饿死文件页与 swap 回收。
-
补充 inotify、调度、PAT、xHCI Hub 和名称缓存的原生探针、宿主回归与文档;修复独立版本检查遗漏 VFS 缓存链接对象的问题,以及缓存文档的标题格式。
破坏性更新
- 是,仅涉及内核内部 ABI 和模块配套。 内部 VFS、文件系统与块设备接口有扩展,旧 .ko 和 prepared SDK 必须随新内核重新构建;不改变已有用户态 syscall 编号或磁盘文件系统格式。新增 inotify 是 Linux 接口扩展,不属于 POSIX 接口。
更新与迁移注意事项
-
本次为正式源码 Release,只提供标签及 GitHub 自动源码归档,不附预编译内核、模块或 SDK。使用 v5.3.1 和锁定依赖重新构建;内核、initramfs、模块、符号及 ABI 清单必须配套更新。
-
旧配置执行 olddefconfig 后核对 y/m/n;defconfig 默认仍将生产部件内置。树外模块需使用本版本对应的 Module.symvers 和 prepared SDK,不忽略 vermagic 或类型 CRC 校验。
-
inotify 目录监听不递归;收到 IN_Q_OVERFLOW 必须重新扫描。动态文件系统和未明确声明代际能力的提供者继续实时查询,名称缓存不会代替授权或改变文件句柄身份。
-
xHCI Hub 的 BOT 存储和 boot HID 延续既有设备范围,不包含 UAS、通用 HID 报告解释器、USB 音视频等时传输、USB4 或 Type-C/PD。真实 HS/SS Hub、物理 USB 设备和 10/20 Gb/s 链路尚未完成硬件验证。
-
既有功能验证覆盖 QEMU 中的 ext4/tmpfs inotify、编译负载桌面交互、两级 Hub 键鼠和存储、热移除及模块生命周期。名称查询微基准在相同用户态、2 vCPU、1024 MiB 的 QEMU/KVM 下,ext4 现有/缺失名称吞吐约为对照的 1.55/1.67 倍;不代表整体编译提速或其他平台性能承诺。
-
本次发行检查版本生成、5/3/1 数字宏、后缀处理、procfs 夹具和严格文档构建;没有为本标签重建内核/镜像或重跑全部运行测试。历史单项结果不等于整版复验。VMware 验证未完成,物理硬件和长期稳定性未完成验收。
-
扩展 rootfs 宿主套件仍有一项既有 UTS 夹具编译错误:rootfs_uts_test.c 引用了已移除的 linux_uts_load_hostname。该夹具未在本次发行中修改;不将此项算作通过。
开发者提示
-
基础版本为 5.3.1,生成数字字段为 5/3/1;EXTRAVERSION、LOCALVERSION 和模块 ABI 身份后缀独立生成,完整 release 继续遵守 31 字节限制。
-
新文件事件头通过正式 headers_install 导出,内部名称缓存与块设备代际接口不成为稳定用户态 ABI。按各目录 Kbuild 构建;内核实现、测试与手册继续由本仓持有。
-
原始 ABI golden 未重生成。定向回归与接口对照不表示完整 Linux/POSIX 认证;调度优先级、软件上传和文件缓存优化也不表示已经完成 VMware 图形或硬实时验收。
-
更新范围为 5.3.0 版本提交 3082fb4 之后至本次版本提交;仅记录本仓最终有效更新,不包含 ReliefOS 应用、桌面和镜像打包。下一版以本次版本提交为起点。
ReliefNT 5.3.0
ReliefNT 5.3.0
更新内容
- 新增针对 ReliefNT 编译的 Linux 风格 .ko 可加载模块:使用原版 Kbuild/modpost、ELF64 重定位、导出符号类型 CRC、vermagic、参数和依赖校验,实现 init_module、finit_module、delete_module 及 /proc/modules、/sys/module 状态视图。defconfig 默认内置,支持独立生命周期的部件可选 y/m/n。
- 模块、设备、打开文件、挂载、VMA、IRQ、DMA 和在途回调统一保留实现 owner;引用未排空或硬件停止失败时拒绝释放。增加模块安装清单、树外模块构建及匹配的 prepared SDK,并支持薄 newc initramfs 的早期启动。
- 新增 EHCI USB 2.0 与 xHCI USB 3.x 主机驱动,支持 BOT/SCSI U 盘、boot HID 键盘及相对鼠标、热移除和读写保护。块层增加经校验的 DOS MBR/EBR 分区识别,并保留 GPT 校验。
- 重构物理内存拓扑、稀疏元数据及早期页表,解除原有 16 GiB 管理范围限制;物理直映射与设备 MMIO 使用独立窗口,DMA 分配按设备地址能力约束。小对象堆使用可回收 slab,减少连续页分配和持锁清零开销。
- 增加 clean 页缓存回收、私有匿名页换出/换入、Linux version 1 swap 文件及分区、swapoff 恢复和 OOM 选择。提供真实 /proc/swaps、meminfo、vmstat 与 sysinfo 统计;当前 swap 后端限于具备所需同步 I/O 契约的 AHCI SATA。
- 完善 MADV_DONTNEED、mincore、mlock/munlock 及共享匿名 backing 生命周期;JIT 权限转换、远端 TLB/CPU 同步和 exec 映像准入按实际映射处理,内存不足保留明确错误与可恢复状态。
- 将对象、管道、PTY、epoll、共享匿名文件及网络注册表改为按需分配,修正 select 位图范围、管道容量/原子写入、memfd 稀疏页面与 seals;完善 TCP 排队发送、重传、超时、半关闭和最后引用关闭后的发送生命周期。
- 新增 IPv6 双栈主机协议栈,覆盖 UDP/TCP/raw ICMPv6、邻居发现、重复地址检测、SLAAC、扩展首部、源端分片与重组。提供 Linux AF_INET6、辅助数据、IPv4 映射地址、rtnetlink 地址/路由管理及 IPv6 proc 视图。
- 扩展 procfs 的进程/线程、映射、文件描述符、系统资源、磁盘、网络与 OOM 视图,按对象身份、权限和快照规则输出,避免旧固定展示范围截断真实资源。
- 增加执行锁等待、持有和关中断窗口的可控统计,并允许符合条件的独占地址空间私有页故障并行处理;保留执行写事务、共享 MM、信号及任务生命周期的同步边界。
- 修复 vmwgfx FIFO 背压、资源退休及 GPU 所有权路径;暂时拥塞返回可重试状态,简单 KMS PRESENT 避免通用渲染元数据分配,减少重复唤醒、清零和呈现开销。
- 增加可选 VGA 文本控制台,移除旧 Desktop/windowd 的内核专用授权与接口;整理独立内核 Kconfig、Sphinx 手册和原生测试归属,修复宿主测试登记及夹具依赖,恢复独立 CI 门禁。
破坏性更新
是,涉及内核模块、驱动 ABI、已退休接口及内部开发路径。
- .ko 必须针对匹配的 ReliefNT 配置、工具链、导出类型 CRC 和完整版本重新编译;不兼容 Linux 原版二进制模块或全部 Linux 内部 API,不提供忽略版本/CRC 的强制加载。
- 驱动服务表为版本 2,扩展字段按大小校验,旧版本描述符在初始化前拒绝。保留历史前缀不等于旧驱动二进制兼容。
- 旧桌面角色、窗口服务专用接口和相关授权已移除;设备操作使用现行文件权限、Linux capability 和公开 UAPI,不能继续依赖已退休的桌面身份。
- Kconfig 仅承载内核实际消费的配置;依赖已删除选项、旧文档位置或私有结构布局的脚本、补丁和树外模块需要迁移。
更新与迁移注意事项
- 本次为 正式源码 Release,不附预编译内核、模块或 SDK。使用标签源码和锁定依赖重新构建,保持内核、符号、UAPI、模块与配套用户态一致;ReliefOS 独立发布系统集成。
- 在新的 O 目录构建;复用配置时执行 olddefconfig,核对所需驱动的 y/m/n。默认生产部件内置,启动核心保持内置;模块化根设备需要由操作系统提供匹配的 initramfs 和依赖闭包。
- swap 需要显式准备并启用,内核选项本身不创建交换空间。当前仅支持经准入的 AHCI SATA 文件或块后端;NVMe、USB 等后端不支持,普通文件必须完整分配。共享、设备、锁定或 pinned 页面等不属于当前换出范围,swapoff 可能因内存或 I/O 问题失败并保留活动区域。
- USB 支持范围为已实现的 BOT 存储及 boot HID;xHCI 不支持 Hub 路由,尚无 UAS、等时传输或任意 HID 描述符解释器。SuperSpeedPlus 速率解析不等于实测 10/20 Gbit/s 链路或吞吐认证。
- IPv6 为主机实现,不提供路由转发、IPsec 或全部组播扩展;DNS/RDNSS 与 DHCPv6 客户端属于用户态。链路本地地址需要接口区域,地址/路由管理与 raw socket 分别受对应 capability 限制。
- 64 TiB 是直映射窗口设计上限,不是已验证 RAM 容量。内存回收、OOM、执行锁及 GPU 改进不构成桌面延迟、实时性或统一吞吐承诺。
- 本次发布核对版本生成、数字宏和严格文档构建,内核编译及宿主回归由版本提交的 CI 验证。历史单项 QEMU 结果不等于本标签整版复验;VMware 验证未完成,物理硬件、长期稳定性和完整本机自举未完成验收。
开发者提示
- 基础版本为 5.3.0,生成数字字段为 5/3/0;EXTRAVERSION/LOCALVERSION 与原生模块 ABI 后缀独立生成,完整 release 仍受 31 字节上限约束。
- 使用根 Make、各目录 Kbuild、Module.symvers 和正式 headers_install 输出;prepared SDK 必须与内核 ABI 匹配,不能通过改写版本字符串冒充匹配。
- 执行锁统计是 ReliefNT 自身的采样接口,不等同 Linux lockstat;启用采样会产生开销,报告时保留配置、平台和对照。
- 原始 ABI golden 未重生成;版本 2 的追加驱动字段由独立夹具检查。定向宿主及 Linux ABI 测试通过不表示完整 POSIX/Linux 认证,未实现功能继续返回明确错误。
- 本说明覆盖内核 5.1.2 版本提交 6ed7a28 之后至本标签的有效更新,不含 ReliefOS 应用、桌面和镜像打包;下一版以本次版本提交为起点。
ReliefNT 5.1.2
ReliefNT 5.1.2
更新内容
启动、存储与文件系统
- 增加 Legacy BIOS Multiboot2 保护模式入口:检查 CPU 特性,建立页表与栈后进入共享 64 位内核。BIOS/EFI 交接解析检查边界、对齐和溢出,保留 EFI 信息指针完整宽度,失败不发布部分结果。
- 增加 GPT PARTUUID 根分区选择,在设备发现后解析显式身份;缺失、畸形或重复身份拒绝自动回退到其他磁盘。
- 修正 Linux
BLKROGETioctl 编码,消除内核私有 timerfd/eventfd 标志与O_SYNC/O_TMPFILE的冲突;同步写入完成实际刷新并传播错误。独占块设备打开正确识别已挂载分区,避免匿名光盘/RAM 挂载误占其他磁盘。 - 块写入按打开时的 DAC、描述符访问模式授权,移除旧桌面角色门槛;
O_PATH不能写入,BLKRRPART重读分区表要求 LinuxCAP_SYS_ADMIN。 - FAT 目录改为按需有界分配,解除旧每目录 64 项限制;修正未对齐 UTF-16 长文件名读取及目录扩展的尾部标记,保留原有磁盘格式与元数据校验。
Linux 系统调用、调度与性能
execve/execveat按 Linux x86_64 的软栈限制计算参数总预算,动态保存参数与环境,检查单串和指针开销。新映像、参数和初始栈准备成功后才提交,失败保留旧进程状态;fork、exec 和退出按实际所有权管理参数副本。- 初始用户栈按实际布局增长,保留
RLIMIT_STACK、RLIMIT_AS与不可执行页面检查。支持utimensat(fd, NULL, times, 0),文件在改名或 unlink 后仍按描述符引用的 inode 更新,拒绝O_PATH。 - 副核使用 ACPI PM 时钟校准 LAPIC 抢占定时器;各核 busy/idle 与任务 CPU 时间改按统一 USER_HZ 时钟结算,避免统计随副核中断频率变化。校准失败记录原因并保留回退。
- 在已有执行事务内完成符合条件的 syscall 返回,内部停驻期间保留
pselect临时信号掩码;允许仍被映射或引用的文件页超出空闲缓存预算,同时保持共享映射一致性。 readv/writev直接调用共享标量读写后端,避免递归进入大分发栈帧,保留校验、部分结果、偏移和等待重试语义。DRM 资源退休与 exec 维护增加保守的空队列提示,减少无工作时的锁开销。
控制台与诊断
- 在内核只读数据中内置 ReliefOS 启动图标,按发现的逻辑 CPU 数量在 framebuffer 顶部绘制,自动留距、换行或缩放;保留文本行,用户态启动前移除图标并恢复完整控制台。
- Kernel panic 改为醒目的文字诊断:在当前文本 VT 输出;GUI 中从左上角绘制,仅文字字符格覆盖黑底,保留其余桌面像素。输出异常、寄存器、CPU/任务、内核版本和构建身份,并保留串口诊断。
- 紧急输出以有界 NMI 等待停止其他在线 CPU,绕过普通控制台/显卡锁和动态分配;图形区域写满后停止绘制,完整诊断仍写入串口和 VT 历史。
构建与源码组织
- 内核、vDSO、宿主工具与头文件导出改用固定的 Linux 6.12 Kbuild/Kconfig,保留公开产物名称,移除旧构建与配置前端。
- 将混合职责的大文件拆分到架构、调度、系统调用、内存、块层、文件系统、网络、驱动及声音等目录。各代码目录的 Kbuild 只列本地对象和直接子目录,生产源文件独立编译;这不引入可加载模块。
- 明确公开 UAPI 与私有头文件边界,增加源码迁移映射、本地 Kbuild/对象覆盖和上游引擎摘要检查;恢复曾被忽略规则排除的页缓存源码,并增加 CI 构建输入审计。
破坏性更新
是,涉及纠正后的 ioctl、管理权限与内部构建接口。
BLKROGET从错误的_IOR(0x12, 94, int)改为 Linux 规定的_IO(0x12, 94)。使用旧 ReliefNT 头编译并固化旧请求值的工具需以当前 UAPI 重编译。- 块设备访问依赖文件权限、有效描述符和相应 Linux capability;依赖已退休桌面角色授权,或在没有
CAP_SYS_ADMIN时重读分区表的程序需调整。 - 内核私有头、旧单文件源码路径、旧配置前端及自研构建规则已迁移或删除。外部源码补丁、白盒测试和内部结构消费者需按新目录调整;私有符号不构成稳定 ABI。
- 本版不是完整 ABI 认证。既有驱动接口 golden 为 168 字节、实际结构为 296 字节的问题仍保留,没有通过重生成 golden 掩盖差异。
更新与迁移注意事项
- 本次为源码 Release,不提供预编译内核。使用标签源码、锁定依赖和实际配置重新构建,保持
kernel.sys、调试符号、导出 UAPI 与配套用户态一致。 - 使用新的
O目录和 Kconfig 配置验证迁移,内部路径参照模块说明。产物仍位于O/generated/system/{kernel.sys,kernel.debug,kerneldebug.sys},父仓通过安装清单消费。 - BIOS 入口需要支持相应 CPU 特性的机器与正确的 Multiboot2 引导器;本仓不负责生成 ReliefOS ISO 或安装引导器。显式 PARTUUID 必须唯一且对应目标 GPT root,旧内核回滚不能假定支持新菜单。
- 更新 SDK 和使用块 ioctl 的程序,核对设备 DAC 与 capability 策略。FAT 改动没有改变磁盘格式,仍需在更新或操作分区前备份数据。
- 已有分项 QEMU 启动、安装配套和系统调用验证不等于本标签的整版迁移认证。VMware 验证未完成,物理硬件未验证;编译压力下桌面交互、长期运行和全部恢复场景仍未完成验收。
- 保留现有高地址 PCI MMIO 限制:默认 OVMF 的某些 NVMe BAR 超出 direct map 范围时,设备不能初始化。不能把低地址布局中的成功推广到所有硬件拓扑。
- 驱动 ABI golden、部分旧测试 fixture 及完整自举仍有已知未完成项;未改变 golden 或既有音频策略,不宣称总测试或全部 Linux/POSIX 一致性检查通过。
开发者提示
- 基础版本为
5.1.2,生成的数字字段为5/1/2;EXTRAVERSION与LOCALVERSION继续独立追加,并保留字符和长度校验。 - 使用根 GNU Make 入口、各级 Kbuild 和仓库工具链配置;需 GNU Make 4.3 或更新版本。新增源文件必须登记到所属目录 Kbuild,公开头仍通过
headers_install白名单导出。 make test-module-layout检查模块边界、源码覆盖及引擎摘要;启动解析、徽标、panic、vDSO 和头导出各有独立测试。宿主夹具、内核编译与来宾运行须分开报告,配套 ReliefOS 的测试工具不算作本仓源码交付。- 默认 8 MiB 软栈限制下 exec 参数预算为 2 MiB;总预算最低 128 KiB、最高 6 MiB,单串最多 128 KiB(含 NUL),另计指针等开销。细节见 exec 参数契约。
- CPU 时间精度仍为 10 ms,本次校准不代表完整的用户/内核/子进程时间拆分。吞吐和锁开销改进受负载与虚拟机条件影响,没有达到或承诺统一的 5 GB/s 指标。
- 本说明覆盖内核 5.1.1 版本提交
d561d4c8b296153723677c6b63497eb8867d024d之后至本标签的有效变更,不包含主仓应用、桌面或镜像打包。下一版以本次版本提交为区间起点。
ReliefNT 5.1.1
ReliefNT 5.1.1
发布范围
- 上一版本基线:
5.1.0的版本提交09930b87355b8abbb75e39b693a6a7765ece2397。 - 本次版本:
5.1.1,终点为v5.1.1指向的本次版本提交;完整提交身份以该标签为准。 - 更新区间为
(上一版本提交, 本次版本提交],起点不含、终点包含。仅总结 ReliefNT 内核、驱动、UAPI 和本仓开发输入的有效变化;合并去重,不包括 ReliefOS 应用、桌面配置、安装器或镜像打包。 - 本次是正式源码 Release,提供标签、中文说明及 GitHub 自动源码归档,不附内核二进制或系统镜像。
更新内容
DRM、vmwgfx 与图形资源
- 为 VMware SVGA-II 增加 Linux 兼容 DRM 设备层:按设备和能力公开
/dev/dri/card0、/dev/dri/renderD128,实现文件/主设备认证、受拥有者约束的缓冲区与表面、传统 KMS、framebuffer 及 fence 等接口,并补充 PCI/DRM sysfs 信息。 - 增加适配上游 Mesa 的有界 VGPU9 vmwgfx 路线:能力协商、资源与上下文、验证后的 execbuf 命令提交、着色器、查询和同步;支持同一设备内的 PRIME 表面引用交换。该接口不承诺跨设备 DMA-BUF 导入、挂接或通用 Linux DRM 全量兼容。
- 加强 GMR、guest-backed 对象/MOB 和提交中资源的生命周期管理;关闭句柄、异常退出或解除映射时按使用状态延迟回收。无可运行任务时,在独立调度服务栈上推进有界资源退休,避免在活动陷阱返回栈上执行终结器。
- 改进 fbdev 模式验证、framebuffer 与 DRM 映射衔接;补充
FB_ACTIVATE_*常量,以及asm/ioctl.h、drm.h、drm_mode.h、vmwgfx_drm.h的公开导出。设备节点默认权限为0660、组 GID 44。
同步、缓存与调度
- 将非 lazy vmwgfx fence 重试合并为有界、可中断的轮询批次,保持 fence 身份、超时 cookie、截止时间和信号/重启语义;减少批次元数据分配,避免将大量小重试转换为不必要的调度开销。
- 对经过验证的 VMware BAR/FIFO 路径准备并核对 write-back 映射,补充 PCI 资源/页缓存属性处理;保留必要的 flush 通知、查询同步和资源引用,合并待提交的 KMS damage 区域。
- 成功安装捕获信号的用户栈帧后唤醒可中断任务,避免被信号打断的无超时 futex 等待使 Xorg 长期停驻。DRM 同步阶段结合可中断性处理信号,避免在仍被设备使用时提前释放对象。
描述符、映射与异常隔离
- 补充 DRM 所需的描述符、close-on-exec、文件共享、内存映射与保护/解除映射语义,维护 fork 及 VMA 变化期间的对象引用、边界和写权限。
- 增加按目标任务页表进行受检查的用户内存复制,避免依赖当前 CR3 读取其他任务地址;非法范围或缺页失败返回明确错误。
- 用户态一般保护异常(#GP)转为强制
SIGSEGV并走正常用户调度路径,使用完整陷阱帧;内核态 #GP 继续保留致命异常策略,不把过期 CR2 当作用户 #GP 的故障地址。 - 文本 VT 历史恢复先在同布局 RAM 表面完成重放,再提交到可见 framebuffer,降低恢复过程中逐次重绘的显示开销。
破坏性更新
否(相对于 5.1.0 已发布源码中的既有公开 UAPI)。 本区间没有删除既有公开头或缩减已有线协议结构;主要新增 DRM/vmwgfx 接口与内部正确性、性能修复。
- 新 DRM 节点有明确权限和能力条件,应用不能假定 render 节点总存在、任意 DRM ioctl 都受支持或任意 GPU 都可用。
- 同设备 PRIME 不等于通用跨设备共享;不支持的请求应处理明确错误并选择适合的软件路线。
- 这不是全量 ABI 认证:现有
reliefos_driver_kernel_api的 golden 仍与实际结构不一致,见下文。该问题在 5.1.0 已记录,本次没有通过修改 golden 掩盖它。
更新与迁移注意事项
- 获取本标签源码并重新构建内核,保持实际启动的
kernel.sys、导出的 UAPI 和配套用户态版本一致;本源码 Release 不提供可直接替换的预编译文件。 - 需要 VMware 3D 路线时核对虚拟显卡与宿主能力;缺少相应能力时应保留二维 framebuffer 或软件渲染回退,不强行公开不可用的 render 节点。
- 使用
/dev/dri/的账户需得到 GID 44 的组授权。现有账户库、自定义设备策略和不同 GID 映射应人工合并;账户创建与桌面配置由 ReliefOS 主仓负责。 - 更新导出白名单和 SDK 后重新编译图形用户态;按已实现的有界接口使用缓冲区、表面、fence 和同设备 PRIME,保留错误、超时和中断处理。
- 现有安装原地替换内核、全部应用组合及真实硬件迁移未完成整版验证。先在独立副本检查启动、VT 往返、设备权限、资源回收和软件回退。
开发者提示
- 生产入口为本仓根 GNU Make,产物为
kernel.sys、kernel.debug、kerneldebug.sys;内核与驱动编译由本仓负责,不消费父仓私有实现。 - 基础版本为
5.1.1,数字字段为5/1/1;EXTRAVERSION与LOCALVERSION继续独立追加,完整版本保留现有字符集和长度检查。 - UAPI 通过
headers_install白名单导出。新 DRM 头用于目标用户态编译;内核私有指针、资源实现和页表结构不作为公共线协议传递。 - 图形兼容范围受 SVGA-II、VGPU9 和实际能力检查限制。不承诺 atomic modesetting、硬件 vblank、硬件光标、跨设备 DMA-BUF、所有 Mesa 功能或物理宿主 GPU 利用率测量。
- 本区间实现对应的 DRM/SVGA、调度与信号宿主夹具及平台验收记录保存在配套 ReliefOS 主仓;这些测试的新增属于主仓,不能算成本仓新增了同一批工具。
- 后续版本遵循发布规范,从本次版本提交之后计算更新范围,两仓独立编写说明。
验证与已知限制
- **源码检查:**审阅本仓 5.1.0 版本提交后的有效差异,对合并历史去重;核对版本输入、README 当前示例和发布范围。未修改 ABI golden。
- **本次编译与宿主工具通过:**从父仓根执行
TMPDIR="$PWD/out/tmp" make -C kernel/reliefnt O="$PWD/out/xorg-vmware-debug/reliefnt" PROFILE=debug -j4 kernel test-tools test-header-export。普通及 ASan/UBSan 共享工具检查通过;头文件导出覆盖 85 个头,包含白名单精确性、独立 C/C++ 编译、私有头隔离及移除后无残留。 - **父仓构建适配通过:**ReliefOS 的
build-info kernel test-tools成功,主仓与内核版本字符串为5.1.1,内核数字字段为5/1/1;父仓版本、后缀、无操作生成、适配和 procfs 定向检查通过。 - **ABI 门禁未通过:**本次
test-abi再次报告reliefos_driver_kernel_apigolden 大小 168、实际大小 296,以及 PCI/DMA/IRQ/音频/日志回调的偏移差异。完整测试门禁因此不能记为通过,需维护者另行审阅 ABI 决策。 - **打包:**本仓不生成 ReliefOS 系统镜像;本次不发布内核二进制,未将旧内核文件重标为 5.1.1。
- **QEMU:**区间内配套主仓记录了有限的设备/桌面及软件回退测试;本次没有对最终 5.1.1 标签进行完整启动、图形和异常恢复验收。宿主夹具和编译不替代目标虚拟机运行证明。
- VMware:VMware 验证未完成。 配套主仓的 SVGA3D 文档记录了冻结源码下的原生 VMware GPU/PRIME/KMS、桌面、软件回退及局部性能测量;这些不等同于最终 5.1.1 整版验收,也不表示所有负载都比软件渲染快。
- **真实硬件:**本版未验证。不声称完成 Linux/POSIX 认证或任意物理 GPU 验证。
获取与追溯
- 获取
v5.1.1源码及 GitHub 自动生成的 Source code ZIP/TAR.GZ;下载缓存和预编译产物不包含在本次发布中。 - 完整提交与差异。compare 展示完整历史,本说明不将纯合并或版本条目列作功能。
- 配套主仓的桌面/账户集成、测试夹具和限定场景证据见 ReliefOS 5.1.1 与该标签下的 SVGA3D 文档。
ReliefNT 5.1.0
ReliefNT 5.1.0
发布范围
- 前一版本提交:
f8f5a4908807e81cca7ed766fb6c60e7829767dc(将版本设为 5.0.0 的提交)。 - 本次范围为该提交之后、
v5.1.0所指向的本次 5.1.0 版本提交(含)之间的有效内核变更;版本提交的完整 SHA 由发布时的标签确定。 - 本说明仅涵盖 ReliefNT 内核仓自身的内核、UAPI、驱动、构建与开发工具变更,不涵盖 ReliefOS 桌面应用、安装器或镜像集成。
- 比较本次源码范围。
更新内容
- **VT、TTY 与 Linux 接口:**补充标准 VT/键盘控制 ioctl、虚拟终端所有权交接和
termiosOPOST输出后处理;增加/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 Vshmget、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_getresvDSO 快路径,以及身份查询和时间类系统调用的轻量分发,省去这些不访问文件描述符的路径上的标准输入物化与归属扫描;不支持或不可信的时钟路径仍回退系统调用。 - **输入唤醒与内存访问:**修正事件等待、信号与输入设备间的唤醒和竞态处理,避免输入积压/丢失;改进等待队列锁竞争及用户缓冲区单页可写检查路径。
- **日志与控制台:**统一内核和驱动日志等级及驱动日志回调,默认使用低饱和 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_apigolden 大小为 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 获取锁定的构建依赖。 - 查看源码比较。