Files
Deshab-OS/docs/系统开发策划.md
T
2026-07-29 10:26:25 +08:00

422 lines
24 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Deshab 系统开发策划
> 本文档基于对 `docs/RE/`、`docs/上下文/`、`docs/` 顶层文档以及 `CLAUDE.md` / `project_memory` 的系统梳理,
> 给出文档现状盘点、实现差距识别、阻塞与风险登记,以及分阶段的开发路线策划。
> 它是 [ROADMAP.md](./ROADMAP.md) 的补充与更新——ROADMAP 描述内核侧 Phase 0–9 主线,本文档补上
> 兼容层、桌面、包管理等用户态/生态主线,并修正 ROADMAP 与实现态的偏差。
---
## 一、文档整理
### 1.1 文档地图
```text
docs/
├── ARCHITECTURE.md 系统架构总览(五大支柱 + 子系统现状 + 目录约定)
├── BOOT_SEQUENCE.md 五阶段启动模型(Ignis/Sigillum/Transitus/Origo/Excitas)
├── ROADMAP.md 内核侧 Phase 0–9 路线图(部分状态滞后,见 §1.3)
├── 系统开发策划.md ← 本文档
│
├── RE/ 研究与设计定稿(内核设计层)
│ ├── UTSM_设计架构.md UTSM 架构定稿(段模型/UTRW/DRR/Checkpoint)
│ ├── UTSM_算法记录.md UTSM 核心算法(段创建/密钥派生/Fast R-W/Slow Path/Checkpoint/Rollback)
│ ├── 驱动模块ABI设计.md DKM ABI 定稿(driver_desc/kernel_api/ELF loader/manifest/状态机)
│ ├── Bug记录.txt Bug 登记(当前仅 8 条,未按模板结构化)
│ ├── docs/ desktop_architecture.md / tool_apps_design.md
│ └── test-cases/ 8 份测试用例(boot-regression/driver-matrix/linux-compat/
│ network-e2e/pe-compat/performance-baseline/userapps-matrix/x86emu32-coverage)
│
└── 上下文/ 开发对话记录(开发记录层,待提炼)
├── 系统策划与开发.md 前期 /plan 策划记录(cmd pe/peinfo 命令、/bin 目录、PE 样本)
├── 双内核架构与Linux内核交互.md UTSM+Linux 双内核 Phase 1.1–1.3(VMX/EPT/IPC/9 hypercall)
├── Deshab Linux_EXE 兼容层开发.md Phase 1.4+(park-resume/PE 兼容层/exec daemon/virtio-mmio)
├── 设计Winux-Kate桌面UI.md desktop.elf 完整设计与优化(三页面/双缓冲/配色/FILES 过滤)
├── DeshabOS安装Pacman包管理器.md Pacman 五阶段方案(WSL 互操作模式)
└── Git Push to Remote.md Git 推送操作记录
```
### 1.2 文档分类与角色
| 层级 | 目录 | 角色 | 状态 |
|------|------|------|------|
| **内核设计层** | `docs/RE/` | UTSM/DKM 的 v1 定稿设计,是实现的契约 | ✅ 定稿,与实现有少量偏差(见 §1.3) |
| **系统架构层** | `docs/` 顶层 | 架构总览、启动序列、路线图 | ⚠️ ROADMAP 滞后;ARCHITECTURE 有过时描述 |
| **开发记录层** | `docs/上下文/` | 开发过程的对话记录,含大量实现细节 | ⚠️ 对话格式,未提炼为正式设计文档 |
| **质量记录** | `docs/RE/Bug记录.txt` | Bug 登记 | ❌ 仅 8 条,未按既有模板结构化 |
| **测试用例** | `docs/RE/test-cases/` | 8 份测试覆盖说明 | 🔶 说明性文档,无自动化脚本关联 |
### 1.3 文档同步状态与差距
下表是 **文档描述 vs 当前实现** 的关键偏差,需在文档治理阶段修正:
| 文档 | 偏差描述 | 实际情况(据 CLAUDE.md / project_memory) |
|------|---------|------------------------------------------|
| `ROADMAP.md` §当前状态总览 | 网络标 "完整 RX/TX ring,无协议栈" | e1000 完整 RX/TX + **DHCP/ARP/UDP/DNS 协议栈已实现** |
| `ROADMAP.md` Phase 3 | "最小协议栈" 标 ⬜ | 协议栈已闭环(netman 配置 + DHCP) |
| `ROADMAP.md` 全文 | 未提及 Linux 兼容层 / PE 兼容层 / 桌面 / Pacman | 这些子系统已有大量实现/规划(见 docs/上下文/) |
| `ROADMAP.md` Phase 5 | firstInit.txt 标志写盘 ⬜ | `dsk_persist_userconf` 已能写 firstInit.txt(3 字节 `1\n`+dev_mode) |
| `ARCHITECTURE.md` §9.2 | 仍描述 "旋转加载动画(四色圆弧加载环)" | 已被 **静态 Logo** 取代(嵌入 Logo.png RGBA 居中绘制) |
| `ARCHITECTURE.md` §6 | console_fb "淡蓝背景 + 四色圆弧加载环" | 圆弧已移除,仅淡蓝背景 |
| `ARCHITECTURE.md` §10 开放设计点 4 | log API "当前实现为 `void (*info)(const char *msg)`" | 部分驱动已用 printf 变参,需统一 |
| `docs/RE/驱动模块ABI设计.md` §3 | kernel_api 全部 typed sub-struct 指针 | 实现为 `const void *` 占位 + Limine 字段直通 + block provider registry |
| `BOOT_SEQUENCE.md` B4 正常路径 | "仅 halt,待实现桌面/shell/登录" | 已实现:firstInit=1 时 DSK 加载 login.elf → desktop.elf(含 shell/cmd 双命令行 + 5 工具) |
| `Bug记录.txt` | 8 条纯文本,无编号/无状态/无修复提交 | 既有模板(BUG-YYYYMMDD-NNN)未被使用 |
### 1.4 文档之间的依赖关系
```text
ARCHITECTURE.md ──索引──→ RE/UTSM_设计架构.md ──细化──→ RE/UTSM_算法记录.md
│ │
│ └──索引──→ RE/驱动模块ABI设计.md
│
├──索引──→ BOOT_SEQUENCE.md(B0–B4 实现态)
└──索引──→ ROADMAP.md(Phase 0–9 设计态)
docs/上下文/双内核架构与Linux内核交互.md ──续──→ docs/上下文/Deshab Linux_EXE 兼容层开发.md
│ │
│ ├──→ docs/上下文/DeshabOS安装Pacman包管理器.md
│ └──→ docs/上下文/设计Winux-Kate桌面UI.md
│
└──依赖──→ RE/UTSM_设计架构.md(VMM 运行在 UTSM Ring0)
```
**关键发现**:`docs/上下文/` 下的四份开发记录(双内核/Linux EXE/桌面 UI/Pacman)实际构成了与 ROADMAP 平行的 **用户态与生态主线**,但 ROADMAP 完全没有收录这条线。这是文档治理的首要任务。
---
## 二、实现盘点
### 2.1 子系统实现状态矩阵
| 子系统 | 状态 | 关键证据 | 主要缺口 |
|--------|------|---------|---------|
| **早期启动** (serial/IDT/PIC) | ✅ | IDT 0–47,PIC remap 0x20–0x2f | — |
| **DKM 驱动加载** (14 驱动) | ✅ | manifest.json 4-stage + 14 .drv ACTIVE | ABI 头未统一、warning 未清零 |
| **DMA 分配器** | ✅ | Limine USABLE → bitmap,低 4G 钳位 | — |
| **UTSM 封缄内存** | 🔶 | selftest 闭环,占位 XOR stream | 真实加密原语未选型 |
| **AHCI 块设备** | 🔶 | IDENTIFY/READ DMA + `ahci0` provider | **无 WRITE**、单扇区偶发超时 |
| **NVMe** | 🔶 | PCI discovery | BAR0 在 4G 以上,**待高位 MMIO** |
| **FAT32** | 🔶 | 只读 + 批量读 | **无 write**、子目录路径解析有限 |
| **e1000 网络** | ✅ | 完整 RX/TX + DHCP/ARP/UDP/DNS | 中断驱动收发(仍 polling) |
| **virtio_net** | 🔶 | PCI + capability 枚举 | 无 feature negotiation / virtqueue |
| **字体系统** | ✅ | DBF 16/24/32px,GB2312 全覆盖 | — |
| **FirstInit** | 🔶 | 中文 UI + 键盘 + SHA256 密码 | 鼠标光标、网络配置页、写盘闭环未全 |
| **正常启动路径** | ✅ | firstInit=1 → login.elf → desktop.elf | — |
| **desktop.elf** | ✅ | 三页面 + 窗口 + 任务栏 + 双命令行 + 5 工具 | fileman 触发 QEMU exit、脏矩形未做 |
| **shell.elf** | ✅ | linux/cp/mv/echo/ls/cat/rm + /bin 加载 | — |
| **cmd.elf** | ✅ | Windows 风格 + pe/peinfo + /bin PE 查找 | — |
| **Linux 兼容层代码** | 🔶 | VMM + linux_resume + IPC exec(16–20) + daemon + utsm_hcall | **Linux 内核未构建**、VMX 未验证 |
| **PE/EXE 兼容层** | ✅ | pe_service/loader/shim/x86emu32 + hello32/hello64 样本 | Win32 API 覆盖少 |
| **virtio-mmio 模拟** | 🔶 | blk/net 后端框架 + IRQ 注入(blk→5,net→6) | 未在真实 guest 验证 |
| **SAS-R0-PCQ 调度器** | ⬜ | 设计完成 | 未实现 |
| **DRR 恢复系统** | ⬜ | stub 占位 | 未实现 |
| **真实加密** | ⬜ | 64B line 接口预留 | 原语未选型 |
| **Pacman 包管理** | ⬜ | 五阶段方案设计 | 依赖 Linux guest 落地 |
### 2.2 关键能力清单(已对外暴露)
- **kernel_api**:log / rsdp / fb_* / boot_modules / irq_register / hhdm / dma.alloc_pages / block(read@+0xA8, write@+0x18)/ net
- **dsk_boot_context**:magic `0x44534B31424F4F54`("DSK1BOOT"),reserved[4]=pe_service,reserved[5]=linux_compat_service
- **PE service**:load / run / unload(PE32+ 原生 Ring0,PE32 走 x86emu32)
- **Linux compat service**:exec(path, argv) → IPC EXEC_REQUEST(16) → daemon fork+exec → STDOUT(17)/STDERR(18)/EXIT(19)
- **IPC**:1MB 共享内存 @ GPA `0x04000000`,9 + 5 hypercall,VMCALL ABI = RAX `0x5554534D48430000|op`
- **FAT32**:`f32_read_root_file` / `f32_write_root_file`(写路径已用于 firstInit 持久化)
---
## 三、阻塞与风险
### 3.1 关键阻塞点
| # | 阻塞点 | 影响范围 | 严重度 | 缓解思路 |
|---|--------|---------|--------|---------|
| **B1** | **block write API 未实现**(AHCI WRITE DMA) | FAT32 write / user.conf 写盘 / FirstInit 完整闭环 / 桌面文件保存 | P0 | ROADMAP Phase 5 提前,先做 AHCI WRITE + FAT32 文件覆写 |
| **B2** | **高位 PCI MMIO 映射缺失**(4G 以上 BAR) | NVMe / 后续高位 DMA | P1 | ROADMAP Phase 0:页表映射接口 `mmio_map(phys, size, flags)` |
| **B3** | **WSL 构建阻塞**(gcc15 C23 vs Linux 6.6、ext4 I/O 错、网络) | Linux guest bzImage / initramfs / VMX 验证 / Pacman 全线 | P0 | `KCFLAGS='-std=gnu17'`;改用 Docker/真机 Linux 构建;预编译 bzImage 入仓 |
| **B4** | **QEMU TCG 不支持 VMX**,WHPX 与 OVMF 不兼容 | Linux 兼容层运行时验证 | P0 | 真机 VT-x / KVM 环境;或先用 KVM 加速 QEMU |
| **B5** | **fileman.elf 触发 QEMU exit** | 桌面文件管理器不可用 | P1 | 排查 boot context 字段访问(疑似 reserved 越界) |
| **B6** | **FirstInit 按键崩溃**(fb_text -O2 问题) | 首次启动体验 | P1 | fb_text 边界检查 + 编译优化降级 |
| **B7** | **IDT 仅 0–47**,无 vector allocator / APIC EOI | 中断驱动设备收发(e1000/virtio/MSI-X) | P2 | ROADMAP Phase 2,可与 B1/B2 并行 |
### 3.2 风险登记
| 风险 | 概率 | 影响 | 应对 |
|------|------|------|------|
| Linux 内核构建长期受阻,兼容层代码腐烂 | 高 | 高 | 设定 2 周窗口期,失败则冻结兼容层代码、主线转向调度器/DRR |
| ROADMAP 与实现态持续偏离,新成员误判状态 | 高 | 中 | 本次整理后立即同步 ROADMAP(见 §5) |
| `docs/上下文/` 对话记录膨胀,关键决策被淹没 | 高 | 中 | 提炼为正式设计文档(兼容层设计.md / 桌面设计.md) |
| UTSM 真实加密原语选型拖延,影响 DRR | 中 | 高 | Phase 9 前完成原语 PoC(HKDF + AES-CTR + Poly1305) |
| 单地址空间下 PE32+ 原生执行的安全风险 | 中 | 中 | PE shim 白名单 + IAT 拦截审计 |
---
## 四、开发策划
### 4.1 策划原则
1. **先闭环再扩展**——优先补齐已开工子系统的闭环(block write → FAT32 write → FirstInit 写盘 → 桌面稳定)。
2. **解阻塞优先于新功能**——B1/B3/B4 三个 P0 阻塞必须先突破。
3. **内核主线与生态主线并行**——ROADMAP Phase 0–9(内核)与 Pacman 五阶段(生态)不互相阻塞,可分人推进。
4. **不破坏 SAS-R0 / O(1) 热路径**——任何新功能不得在调度/UTRW fast path 引入扫描或重加密。
5. **文档与代码同步**——每个里程碑交付时同步更新 ROADMAP 与相关设计文档。
### 4.2 里程碑总览
```text
M1 持久化闭环 + 桌面稳定 ← 短期(2–4 周)
└─ B1 block write → FAT32 write → FirstInit 写盘 → 桌面 bug 修复
M2 存储升级 + 中断后端 ← 中期(4–8 周)
└─ B2 高位 MMIO → NVMe → B7 APIC/IOAPIC/MSI-X → e1000 中断驱动
M3 兼容层验证 ← 中期(与 M2 并行,依赖 B3/B4 解锁)
└─ Linux guest 构建 → VMX 验证 → virtio 后端 → Arch rootfs
M4 调度器 + 恢复 + 加密 ← 长期(8–16 周)
└─ SAS-R0-PCQ → DRR → 真实加密
M5 软件生态 ← 远期(依赖 M3)
└─ Pacman → AUR → desktop Linux 命令集成
```
### 4.3 M1 — 持久化闭环 + 桌面稳定(短期)
**目标**:打通"用户设置 → 写盘 → 重启后正常启动"的完整闭环,并修复桌面已知 bug。
| 任务 | 依赖 | 验收标准 |
|------|------|---------|
| AHCI WRITE DMA 实现 | — | `dkm_block_api.write` 注册,LBA 写成功 |
| FAT32 文件覆写 / 创建 | AHCI WRITE | `f32_write_root_file` 可写 user.conf / firstInit.txt |
| FAT32 FAT 链分配 | FAT32 文件创建 | 新文件可创建、可追加 |
| FirstInit user.conf 写盘 | FAT32 write | 设置完成后 user.conf 落盘,重启后 login 可读取 |
| FirstInit 鼠标光标 | — | PS/2 IRQ12 + 包解码 + 24×24 光标移动(flip_rect 局部刷新) |
| FirstInit 网络配置页 | — | IP/DHCP/网关 UI + NETCONF.CNF 写盘 |
| 桌面 fileman.elf 崩溃修复(B5) | — | fileman 可正常打开、浏览、关闭 |
| FirstInit 按键崩溃修复(B6) | — | -O2 下 fb_text 稳定 |
| Bug记录.txt 结构化 | — | 8 条 bug 按 BUG-YYYYMMDD-NNN 模板补全 |
**里程碑标志**:首次启动设置 → 写盘 → 重启 → login → desktop 全链路稳定。
### 4.4 M2 — 存储升级 + 中断后端(中期)
**目标**:解锁 NVMe、迁移设备 IRQ 到 APIC/IOAPIC/MSI-X,为中断驱动收发打基础。
| 任务 | 依赖 | 验收标准 |
|------|------|---------|
| 页表映射接口 `mmio_map/unmap` | — | 通用接口可用 |
| 高位 PCI MMIO 映射(B2) | 页表映射 | NVMe BAR0 可读 register |
| 替换 arena 为真实页分配 | 页表映射 | 移除 16MB arena 上限 |
| NVMe admin queue / identify | 高位 MMIO | 注册 `nvme0` block provider |
| NVMe block provider(READ) | admin queue | LBA0 可读 |
| IDT 扩展到 256 vectors | — | vector allocator 可用 |
| APIC EOI 后端 | IDT 扩展 | 替代 PIC EOI |
| IOAPIC redirection | APIC EOI | 设备 IRQ 迁移到 IOAPIC |
| LAPIC timer | APIC EOI | 替代 PIT 调度时钟 |
| MSI / MSI-X | IOAPIC | NVMe/e1000 使用 MSI-X |
| e1000 中断驱动收发 | MSI-X | 替代 polling |
| virtio-net virtqueue RX/TX | 中断后端 | 收发包成功 |
| DKM 工程化收尾 | — | 统一 ABI 头、零 warning、QEMU 场景自动化 |
**里程碑标志**:NVMe 可读、网络中断驱动、DKM 工程化达标。
### 4.5 M3 — 兼容层验证(中期,与 M2 并行)
**目标**:突破 B3/B4 阻塞,让 Linux guest 真正跑起来,验证 park-and-resume + IPC exec 全链路。
| 任务 | 依赖 | 验收标准 |
|------|------|---------|
| Linux 6.6 LTS 构建(B3) | — | bzImage + initramfs 生成,limine.conf 启用模块 |
| VMX 运行环境(B4) | — | 真机 VT-x 或 KVM 加速 QEMU 可用 |
| VMX 自测通过 | B3+B4 | `vmm_self_test()` HLT 退出 OK |
| Linux guest 跑到 shell | VMX 自测 | initramfs busybox shell 可交互 |
| utsm_exec_daemon 运行 | Linux shell | EXEC_READY(20) 发送,park 生效 |
| virtio-blk 后端验证 | Linux shell | guest 内可读写块设备 |
| virtio-net 后端验证 | Linux shell | guest 内可 DHCP / ping |
| IPC exec 全链路 | daemon 运行 | shell `linux ls` → UTSM → daemon → stdout 回显 |
| Arch rootfs bootstrap | virtio 后端 | pacman 可用 |
| PE 兼容层扩展 | — | 更多 Win32 API(kernel32/user32 子集) |
**里程碑标志**:`linux ls` / `linux pacman -S hello` 在 Deshab shell 内可用。
### 4.6 M4 — 调度器 + 恢复 + 加密(长期)
**目标**:落地三大核心支柱,使 Deshab 从"可启动"升级为"可调度、可恢复、可加密"。
| 任务 | 依赖 | 验收标准 |
|------|------|---------|
| **SAS-R0-PCQ 调度器** | M2 页分配 | |
| ├─ TCB + task_create | — | 分配 TCB、process_uuid、stack/heap 段、cap table |
| ├─ Per-CPU runqueue | — | 每 CPU 独立 runqueue |
| ├─ O(1) 位图调度器 | runqueue | pick_next_task 为 O(1) |
| ├─ context_switch | 调度器 | utsm_switch_out/in 只加载 crypto 指针 |
| └─ task_kill crypto erase | context_switch | owned segment key_epoch++、state=DESTROYED |
| **DRR 恢复系统** | 调度器 | |
| ├─ Emergency Pool | — | 独立内存池,普通 allocator 不可用 |
| ├─ Watchdog | Emergency Pool | 独立于普通调度器 |
| ├─ Recovery log | Watchdog | WRITE_INTENT / WRITE_COMMIT 对 |
| ├─ Dirty Shard + Bitmap | — | 数据结构落地 |
| ├─ A/B Checkpoint 双槽 | Recovery log | CRC + 原子 active slot 切换 |
| ├─ 三级 Rollback | Checkpoint | Page / Segment / System |
| └─ 驱动 recovery ops | Rollback | quiesce/reset/reinit |
| **真实加密** | DRR root key | |
| ├─ 原语选型 PoC | — | HKDF + AES-CTR + Poly1305(`-mno-sse` 下可用) |
| ├─ KDF 实现 | 原语 | `segment_key = KDF(root_key, process_uuid, segment_uuid, key_epoch)` |
| ├─ Stream cipher | KDF | 64B cache line 加解密 |
| ├─ MAC | Stream cipher | 4KB page 粒度 MAC |
| └─ PCKC 真实 key schedule | MAC | 替换占位 |
**里程碑标志**:多任务调度 + checkpoint/rollback 演示 + UTSM 真实加密 selftest 通过。
### 4.7 M5 — 软件生态(远期,依赖 M3)
**目标**:Pacman + AUR + desktop 集成,形成可日常使用的软件生态。
| 任务 | 依赖 | 验收标准 |
|------|------|---------|
| FILE_TRANSFER hypercall | M3 | op 扩展,payload_pool 分块传输 |
| EXEC_FORWARD hypercall | M3 | shell 委托 Linux 执行 `/usr/bin/xxx` |
| shell path_search_and_run 扩展 | EXEC_FORWARD | PATH 命中 stub → IPC 委托 |
| pacman 装包验证 | Arch rootfs | `pacman -S <pkg>` 成功 |
| AUR helper(yay/paru) | pacman | AUR 包可装 |
| desktop 动态 Linux 命令图标 | EXEC_FORWARD | `app_descriptor.linux_cmd` 字段 |
| 网络包下载 | virtio-net 后端 | `pacman -Syu` 可更新 |
**里程碑标志**:在 Deshab 桌面点击图标运行 Linux 应用(如 firefox)。
### 4.8 依赖关系图
```mermaid
graph LR
B1["B1 block write<br/>(P0)"] --> M1F["FAT32 write"]
M1F --> M1U["user.conf 写盘"]
M1U --> M1D["M1 持久化闭环"]
B2["B2 高位 MMIO<br/>(P1)"] --> NVMe["NVMe provider"]
B7["B7 IRQ 后端"] --> IRQ["APIC/IOAPIC/MSI-X"]
IRQ --> E1000["e1000 中断驱动"]
IRQ --> VIRTIO["virtio-net virtqueue"]
B3["B3 Linux 构建<br/>(P0)"] --> VMX["VMX 验证"]
B4["B4 VMX 环境<br/>(P0)"] --> VMX
VMX --> GUEST["Linux guest shell"]
GUEST --> DAEMON["exec daemon"]
DAEMON --> IPC["IPC exec 全链路"]
IPC --> ARCH["Arch rootfs"]
M1D --> SCHED["M4 SAS-R0-PCQ"]
SCHED --> DRR["M4 DRR"]
DRR --> CRYPTO["M4 真实加密"]
ARCH --> PACMAN["M5 Pacman"]
PACMAN --> AUR["M5 AUR"]
AUR --> DESKINT["M5 desktop 集成"]
```
---
## 五、文档治理建议
### 5.1 立即修正(本次整理后)
1. **同步 ROADMAP.md**:
- 网络协议栈状态 → ✅
- 新增"用户态与生态主线"章节,收录桌面/Linux 兼容层/PE/Pacman
- firstInit 写盘状态修正
- Phase 5 部分任务标记为 🔶
2. **同步 ARCHITECTURE.md**:
- §9.2 旋转加载环 → 静态 Logo
- §6 console_fb 描述更新
- §10 开放设计点更新 log API 状态
3. **结构化 Bug记录.txt**:8 条 bug 按既有 `BUG-YYYYMMDD-NNN` 模板补全(现象/复现/根因/修复/状态)。
### 5.2 中期提炼(下一个里程碑前)
| 来源(对话记录) | 目标正式文档 | 动作 |
|------------------|------------|------|
| `docs/上下文/双内核架构与Linux内核交互.md` + `Deshab Linux_EXE 兼容层开发.md` | `docs/兼容层设计.md` | 提炼架构图、内存布局、VMCS/VMEXIT、IPC 协议、PE 兼容层、daemon |
| `docs/上下文/设计Winux-Kate桌面UI.md` | `docs/桌面设计.md` | 提炼页面结构、配色、双缓冲、FILES 过滤、app_descriptor 机制 |
| `docs/上下文/DeshabOS安装Pacman包管理器.md` | 合并进 `docs/兼容层设计.md` §生态 | 提炼五阶段方案、WSL 互操作模式 |
### 5.3 长期机制
- **文档与代码同提交**:每个 PR 必须同步更新 ROADMAP 状态标记与相关设计文档。
- **测试用例脚本化**:`docs/RE/test-cases/` 8 份说明文档应关联到可执行脚本(QEMU 自动化场景)。
- **CLAUDE.md 季度回顾**:每季度校准 CLAUDE.md 与实际代码状态。
---
## 六、附录:关键技术参考速查
### 6.1 关键地址与魔数
| 项 | 值 | 说明 |
|----|-----|------|
| `dsk_boot_context.magic` | `0x44534B31424F4F54` | "DSK1BOOT" |
| `dkm_driver_desc.magic` | `0x444B4D31` | "DKM1" |
| VMCALL hypercall RAX | `0x5554534D48430000 \| op` | "UTSMHC\0\0" |
| IPC 共享内存 GPA | `0x04000000` | 1MB |
| Linux guest RAM GPA | `0x05000000+` | 64MB |
| Linux initrd GPA | `0x03000000` | 16MB+ |
| block_read 偏移 | `kernel_api + 0xA8` | read @ +0x10, write @ +0x18 |
| pe_service 槽 | `dsk_boot_context.reserved[4]` | |
| linux_compat_service 槽 | `dsk_boot_context.reserved[5]` | |
| IPC exec 消息号 | 16–20 | REQUEST/STDOUT/STDERR/EXIT/READY |
| `ipc_exec_request` 约束 | ≤240 字节 | 适配 IPC 单消息槽 |
| virtio-blk IRQ | 5(向量 `0x35`) | `0x30 + irq` |
| virtio-net IRQ | 6(向量 `0x36`) | `0x30 + irq` |
### 6.2 关键约束清单
- 进入 C 前 `cli/cld`;早期 serial 不无限等待 ready 位
- 未启用 FPU/SSE 前编译必须 `-mno-sse -mno-sse2 -mno-mmx -msoft-float`
- DATA/BSS 段使用 `PF_R|PF_W|PF_X`(SAS-R0 驱动内存需可执行)
- DSK ibuf 1MB;g_dsk_fat32_filedata 2MB;g_fdata 1MB
- FAT32 批量读 ≥8 扇区(推荐 256 扇区),避免单扇区 AHCI 不稳定
- DSK linker.ld 必须把 .bss 分离为 NOBITS(否则 deshab.elf 膨胀至 2.3MB)
- mkfat32.ps1 Name83 必须正好 11 字符(8+3)
- Linux guest cmdline 必须含 `nohlt idle=poll`
- VMCS 不保存 guest GPR,vmexit_asm.S 必须保存 16 个 GPR 到 `g_guest_regs`
- 调度热路径禁止扫描 capability / 计算 MAC / 写 checkpoint / 重加密
- DRR recovery 路径禁止依赖普通堆分配器
- PE32+ 用 `__attribute__((ms_abi))` shim;PE32 走 x86emu32 解释器
### 6.3 关键文件索引
| 模块 | 关键文件 |
|------|---------|
| UTSM 入口 | `CODE/UTSM/kernel/main.c` |
| DSK 加载 | `CODE/UTSM/kernel/dsk_loader.c` |
| boot context | `CODE/UTSM/include/utsm/dsk.h` |
| VMM | `CODE/UTSM/vmm/vmm.c` / `vmexit.c` / `linux_boot.c` / `linux_resume.c` / `vmexit_asm.S` |
| PE 兼容层 | `CODE/UTSM/pe/pe_service.c` / `pe_loader.c` / `pe_shim.c` / `x86emu32.c` |
| Linux compat | `CODE/UTSM/vmm/linux_compat.c` |
| IPC 协议 | `CODE/utsm-ipc/ipc_proto.h` |
| Linux 驱动 | `CODE/linux/patches/utsm_hcall.c` |
| exec daemon | `CODE/linux/initramfs/bin/utsm_exec_daemon.c` |
| DSK 主内核 | `CODE/dsk/main.c` |
| 桌面 | `CODE/desktop/main.c`(dt_load_elf @ L1390–1461) |
| shell | `CODE/shell/main.c`(path_search_and_run @ L1416–1460) |
| cmd | `CODE/cmd/main.c`(cmd_pe / cmd_peinfo) |
| DKM 驱动 | `CODE/DKM/<class>/<driver>.c` |
| FAT32 镜像构建 | `.build_tmp/mkfat32.ps1` |
| PE 样本生成 | `CODE/tools/pe-samples/gen_pe.py` |
| Linux 构建 | `CODE/linux/build.sh` |
---
## 七、下一步行动建议
按优先级排序的立即可执行动作:
1. **【文档】同步 ROADMAP.md 状态标记**(§5.1)——本次整理的直接产物,1 小时内可完成
2. **【文档】结构化 Bug记录.txt**(§5.1)——8 条 bug 补全模板字段
3. **【代码】启动 M1:AHCI WRITE DMA**(§4.3)——突破 B1 阻塞,是持久化闭环的起点
4. **【代码】修复 fileman.elf QEMU exit**(§4.3 B5)——恢复桌面文件管理器可用
5. **【环境】启动 Linux 内核构建尝试**(§4.5 B3)——兼容层验证的长周期任务,应尽早并行启动
6. **【文档】提炼 `docs/兼容层设计.md`**(§5.2)——把两份对话记录浓缩为正式设计文档
---
> 本文档随项目推进持续更新。每个里程碑完成时,更新 §2 实现状态矩阵与 §4 里程碑进度。