Files
Deshab-OS/docs/上下文/26072901/自定义内核算法与驱动配置.md
2026-08-05 13:58:13 +08:00

4.7 KiB
Raw Permalink Blame History

自定义内核算法与驱动配置

Workspace: d:\Code\Deshab


任务目标

为系统增加"自定义内核"算法,支持设置内核各项算法和驱动配置。内核启动时获取 SYSTEM/system/deshab64/FUCK 文件里的配置信息,启用相关算法和驱动。

现状分析

  • FUCK 文件已存在(当前为空),位于 ESP 的 /system/deshab64/FUCK
  • 两个内核:UTSM(首阶段)→ DSK(主内核),各自有独立的 FAT32 解析器
  • 读取机制:UTSM 和 DSK 的 FAT32 解析器目前只支持根目录 8.3 文件名,读 FUCK 需扩展子目录路径解析
  • 可插桩点:UTSM 启动流程(arena/dma/drr/utsm_init/dkm manifest/selftest/VMM+Linux)+ DSK 启动流程(firstInit/dev_mode/login/desktop)
  • 算法参数:config.h 编译期 #define(段表 1024、PCKC 8 密钥、dirty shard 1024 页、DRR 应急池 64KB 等)

配置格式

INI 分区式([section] + key=value,#/; 注释)

四类配置

Section 键示例 说明
[boot] selftest=1, vmm=1, linux_guest=1 启动流程开关
[drivers] nvme=0, virtio_net=0, ath9k=0 驱动加载开关
[utsm] max_segments=1024, max_capabilities=64, max_pckc_keys=8, arena_size=0x100000, dirty_shard_pages=1024 算法参数(运行期全局变量覆盖编译期默认值)
[dsk] show_logo=1, skip_login=0, mouse_init=1, netman=1, dev_mode=0 DSK 行为开关

新增文件

文件 说明
CODE/UTSM/kernel/ini_parser.h INI 配置解析器头文件(ini_config 结构体 + ini_parse/ini_get/ini_get_int/ini_get_bool 接口)
CODE/UTSM/kernel/ini_parser.c INI 配置解析器实现(freestanding,无堆分配,无 libc 依赖,最多 64 条配置项)

修改文件

UTSM 侧

文件 改动
kernel/main.c utsm_load_fuck_config()(通过 Limine boot module cmdline=fuck:config 读取)、运行期全局变量定义、utsm_apply_config()、kernel_main() 全流程插桩
kernel/dsk_loader.c fat32_find_in_dir() 子目录项查找 + fat32_read_path() 子目录路径遍历
include/utsm/config.h 编译期常量改为运行期全局变量声明(g_utsm_max_segments 等)+ 保留旧宏名兼容
core/utsm_init.c 使用 g_utsm_max_segments 运行期变量替代 UTSM_MAX_SEGMENTS 宏

DKM 侧

文件 改动
dkm/manifest.c dsm_load_by_manifest() → dsm_load_by_manifest_ex(cfg),驱动循环中增加 [drivers] 开关检查

DSK 侧

文件 改动
dsk/main.c 内嵌 dsk_ini_* INI 解析器 + fat32_find_in_dir() + fat32_read_path() + dsk_spinner_and_check() 全流程插桩(FUCK 读取 + show_logo/skip_login/mouse_init/netman/dev_mode 开关)

系统文件

文件 改动
SYSTEM/system/deshab64/FUCK 写入 INI 格式默认配置([boot]/[drivers]/[utsm]/[dsk] 四分区)
SYSTEM/limine/limine.conf 添加 MODULE_PATH=boot():/system/deshab64/FUCK + MODULE_CMDLINE=fuck:config

文档

文件 改动
CLAUDE.md 核心架构新增 FUCK 条目 + 重要文件新增 FUCK 和 ini_parser 说明
docs/ARCHITECTURE.md 启动链路图标注配置读取点 + 新增 §10"内核启动配置(FUCK)"章节

读取通道

  • UTSM:经 Limine boot module(limine.conf 已注册 module_cmdline: fuck:config)
  • DSK:经 FAT32 自读(AHCI block provider 在 UTSM 读配置时尚未加载,故不能用同一通道)。DSK 侧有根目录回退:先 /SYSTEM/DESHAB64/FUCK,失败再试根目录 FUCK

已接入的真实插桩点

  1. [utsm] 算法参数 → 5 个运行期全局变量覆盖编译期默认值;max_segments 被 core/utsm_init.c 真实消费(串口确认 max_segments=0x400)
  2. [drivers] 驱动过滤 → dsm_load_by_manifest_ex 按名跳过(串口确认 nvme/virtio_net/ath9k 被 disabled by FUCK)
  3. [boot] selftest/vmm/linux_guest → 三个启动开关均生效
  4. DSK 侧 [dsk] show_logo/skip_login/mouse_init/netman + [boot] dev_mode

需要用户决定的事项

  1. SATA 镜像布局:mkfat32.ps1 生成的测试盘是扁平布局,无 /system/deshab64/ 路径,DSK 侧配置在 SATA 场景暂时只能回退默认值
  2. 算法参数消费点:max_capabilities/max_pckc_keys/arena_size/dirty_shard_pages 已解析到全局变量,但消费改造未做,目前仅 max_segments 真实生效
  3. 已定义但未接线的键:[dsk] default_shell、[utsm] drr_*、vmm.linux_memory_mb 等——框架可查,插桩点待用户明确语义后接入