模块与源码归属

ReliefNT 按职责组织内核部件,具有独立注册和生命周期边界的部件可以通过 Kconfig 选择内置或编译为可加载 ELF 模块,默认保持内置。模块针对 ReliefNT 及其精确 ABI 身份编译,不直接加载 Linux 原版二进制模块。所有生产 C 和汇编 文件独立编译,原版 Kbuild 管理复合模块和依赖。完整迁移、启动和运行验收仍在 进行中;交付范围与门槛见 Documentation/process/module-support-plan.rst。

目录边界

  • 路径:arch/x86_64/boot/; 职责:Multiboot2、入口与早期引导。

  • 路径:arch/x86_64/cpu/; 职责:CPU 特性、GDT、SMP、任务切换汇编。

  • 路径:arch/x86_64/interrupt/; 职责:IDT、IRQ、APIC 与 PCI 中断。

  • 路径:arch/x86_64/mm/、platform/; 职责:x86 页表、PCI、平台电源与平台接口。

  • 路径:kernel/init/、exec/; 职责:内核初始化、版本和诊断;ELF 与用户地址空间装载。

  • 路径:kernel/sched/; 职责:任务表、EEVDF 公平调度、clone/exec、等待、会话、计时与统计。

  • 路径:kernel/syscall/; 职责:syscall 入口/分发;fd/、io/、fs/、event/、device/、process/、ipc/、system/、memory/、time/ 各自实现所属接口。

  • 路径:kernel/{device,dma,module,signal,time,ipc,sync,random}/; 职责:驱动注册和资源、DMA 物理缓冲、模块装卸与引用、信号、时钟/vDSO 数据、IPC、同步、随机源。

  • 路径:mm/{heap,physical,cache,user}/; 职责:堆、物理页、页缓存、用户内存访问。

  • 路径:block/{core,partition,device,install}/; 职责:块 I/O 与共享存储状态、分区/标识、设备链接、安装操作。

  • 路径:fs/vfs/、security/; 职责:路径/挂载、文件和目录操作、设备节点、权限与旁路元数据。

  • 路径:fs/{ext2,ext4,ext_common,exfat,fat,iso9660,tmpfs,proc,sysfs}/; 职责:文件系统注册与实现。ext2/、ext4/ 是分别带 owner 的注册入口,两者显式依赖 ext_common/ 的实际分配、缓存、目录、extent、journal、格式化和挂载实现。隐藏的公共配置取两个入口所需的最高链接等级,避免内置代码引用外置实现。

  • 路径:net/{interface,link,ipv4,tcp,services,socket}/; 职责:接口与配置、ARP/以太网、IP/UDP/ICMP、TCP 状态和收发、DHCP/DNS/NTP/HTTP、socket 生命周期和操作。

  • 路径:drivers/console/; 职责:文本控制台核心、绘制、ANSI、日志、VT 和 panic 输出。

  • 路径:drivers/tty/{input,pty,serial}/; 职责:输入路由、PTY/行规程/终端会话、串口。

  • 路径:drivers/video/framebuffer/; 职责:像素/字形、绘图、呈现、VBE/VMware、启动图标与 panic 显示。

  • 路径:drivers/video/drm/vmwgfx/; 职责:SVGA 资源/能力及 execbuf 验证、翻译、fence、retire、continuation。

  • 路径:drivers/sound/hda/; 职责:控制器 I/O、rings、恢复、verbs;codec 探测、路由和控制;stream 实现。

  • 路径:drivers/{storage,net,input,usb}/; 职责:按设备系列组织的硬件驱动。

  • 路径:sound/core/; 职责:音频设备、PCM 状态/缓冲/格式/映射/传输、mixer、ALSA/OSS 接口。

  • 路径:lib/、firmware/; 职责:内核内部基础工具、panic/bugcheck、文本与固件支持。

  • 路径:vdso/、debug/; 职责:独立 vDSO ELF 及嵌入对象;独立 kerneldebug 载荷。

私有接口与共享状态

include/uapi/ 保持公开协议;configs/header-export.list 是用户态头导出的 唯一白名单。内核私有公共头位于 include/reliefnt/,任务结构和访问器分别在 task/types.h、task/accessors.h,不向 SDK 导出。

一个模块内的跨文件声明放在本模块的 internal.h 或具体职责的私有头中。 原先文件内共享的可变状态只有一个定义,其余文件通过私有声明访问;拆分不改变 调用方原有的锁、IRQ 状态、所有权或生命周期要求。跨文件可见性不构成用户 ABI。 调度器共享任务状态仍由原调度锁和 CPU 所有权规则管理;网络、存储和显示代码也 继续遵守原有执行上下文与锁顺序,不通过新增回调层改变调用顺序。

fs/fs_internal.h 保存文件系统族共享的磁盘类型与接口, block/core/storage_internal.h 保存块层共享接口;文件系统和块设备的 结构类型由私有存储类型头共享。协议结构布局及 exFAT upcase 数据保持原样。

兼容 syscall 分发按原条件和顺序转交 legacy_*.c;多个 ioctl 前缀的处理保留 在同一处理函数内,保持原先允许继续匹配后续分支的行为。

本地 Kbuild

根 Kbuild 只列顶层子目录,并包含独立的产物规则。每个生产代码目录的 Kbuild 显式列出本目录对象及直接子目录,不通配扫描、不维护全局源码清单。 scripts/Makefile.module 提供共享的工具链身份依赖, scripts/Makefile.products 管理生成头、最终链接、调试载荷和 UAPI 导出。 导入的 Linux 6.12 Kbuild/Kconfig 引擎保持原样。

vDSO 使用其专用 PIC/链接参数,只有 vdso_blob.o 进入内核归档; debug/kerneldebug.o 单独生成 kerneldebug.sys,不进入内核归档。 宿主工具使用 tools/host/Kbuild;运行时宿主 fixture 由 tools/tests/Kbuild 一次构建,避免并行目标重复写共享对象。

产物路径保持为 O/generated/system/{kernel.sys,kernel.debug,kerneldebug.sys}。 父仓继续通过原有 make kernel、make image-vmdk 等目标集成。

make O=/absolute/output PROFILE=release -j8 all
make O=/absolute/output -j8 test-tools test-header-export test-vdso \
    test-boot-logo test-panic-console test-module-layout
make O=/absolute/output PROFILE=debug -j8 all

迁移追溯与检查

configs/kernel-source-map.json 记录本次迁移基线及旧文件到新文件的对应关系, 仅用于历史审计,生产构建不读取它。旧 kernel/reliefnt/ 实现与私有头目录已 移除;历史报告中的旧文件行号属于相应历史版本,应结合该映射查阅。

make test-module-layout 检查各级本地 Kbuild、重复/遗漏对象、生产实现包含、 特殊 debug/vDSO 源文件覆盖和上游引擎哈希。它也属于默认 make test。 父仓 tools/test_build_incremental.py 从实际目录 Kbuild 读取预期归档顺序, 用隔离源码及输出验证源码/头/参数/工具身份和缺失产物的重建。

tools/tests/modules/ 仅供旧白盒宿主测试组合真实实现,不进入生产构建; 本仓 tools/kernel_test_sources.py 为这些测试定位实际源码,避免测试复制的旧实现。 ABI golden 和历史测试失败均应单独报告,不通过改期望值掩盖。