Files
Deshab-OS/docs/系统开发策划.md
T
xyou a26866e339 feat: B7 APIC/IOAPIC接管 + NVMe写路径 + virtio_net virtqueue + PE兼容层修复 + QEMU测试套件全自动化
中断路由 (B7):
- apic.drv: LAPIC enable + IOAPIC重定向表编程(MADT ISO感知) + apic_route/apic_route_legacy/apic_diag开关
- UTSM: LAPIC EOI钩子(register_apic_eoi, ABI尾部追加) + IDT 0-255全覆盖 + spurious 0xFF特判
- FUCK: apic_route=0默认PIC(零回归) / =1 IOAPIC->LAPIC接管(失败完整降级) / legacy放开IRQ1/12/11

存储:
- nvme.drv: 写路径 + PRP list + 读回校验 + MSI/MSI-X中断驱动(nvme_msi开关, 回退纯轮询)
- build.ps1: apic.drv纳入构建(原为预置二进制)

网络:
- virtio_net: virtqueue RX/TX + netdev注册 + DHCP自测(slirp真实OFFER)

PE兼容层:
- pe_shim: guest->host指针转换(g_emu_mem_base + gp()) + shim fn32列补齐
- gen_pe.py: PE32+ RVA偏置修复(BUG-004) + cmd.exe生成
- desktop_app.h: da_mouse_poll先判AUX位 + da_mouse_init冲刷残留(BUG-003/008)
- shell: Ctrl修饰键跟踪(BUG-001) + g_run_image扩至1MB(BUG-002)

QEMU测试套件:
- 9用例全自动化(Run-All.ps1): boot-regression/driver-matrix/linux-compat/pe-compat/deaicup-e2e/userapps-matrix/network-e2e/performance-baseline/x86emu32-coverage
- QemuTest.ps1公共库: 串口断言/monitor sendkey/screendump/HTTP服务器/并发隔离

文档:
- CLAUDE.md: APIC/IOAPIC能力 + kernel_api暴露 + IRQ后端升级状态
- LESSONS_LEARNED.md: B7 LAPIC/IOAPIC经验教训(2条)
- Bug记录.txt: BUG-20260801-001~008 + BUG-20260803-009(9条)
- test-cases/*.md: 全部补充自动化脚本小节
- 桌面设计.md: .lnk快捷方式 + LINUXAPP.CNF Linux应用图标
- 系统开发策划.md: NVMe/virtio_net标完成 + B2/B7标已解决 + M2进度列
2026-08-04 18:08:08 +08:00

10 KiB
Raw Blame History

Deshab 系统开发策划

文档盘点、实现矩阵、阻塞风险、里程碑策划。ROADMAP的补充(补上兼容层/桌面/包管理等用户态生态主线)。


一、文档整理

1.1 文档地图

docs/ARCHITECTURE.md        五大支柱+子系统现状
docs/BOOT_SEQUENCE.md       五阶段启动模型
docs/ROADMAP.md             Phase 0–9路线图
docs/系统开发策划.md         ← 本文档
docs/兼容层设计.md           Linux/PE兼容层
docs/桌面设计.md             桌面环境
docs/RE/                    UTSM_设计架构/算法记录/驱动模块ABI设计/Bug记录(12条)/test-cases(8份)/docs/
docs/上下文/                 开发对话记录(待提炼为正式设计文档)

1.2 文档同步状态

2026-07-29已同步:ROADMAP/ARCHITECTURE/BOOT_SEQUENCE/Bug记录。关键偏差均已修正(如§9.2旋转环描述、console_fb圆弧已移除、B4正常路径已实现login→desktop)。

关键发现:docs/上下文/下四份开发记录(双内核/Linux EXE/桌面UI/Pacman)构成ROADMAP未收录的用户态与生态主线。


二、实现盘点

2.1 子系统实现状态矩阵

子系统 状态 主要缺口
早期启动(serial/IDT/PIC) ✅ —
DKM驱动加载(14驱动) ✅ ABI头未统一、warning未清零
DMA分配器 ✅ —
UTSM封缄内存 🔶 真实加密原语未选型
AHCI块设备 ✅ 单扇区偶发超时
NVMe ✅ 写路径+PRP list+读回校验已完成
FAT32 🔶 DKM只读;DSK读写(根目录),子目录写待补
e1000网络 ✅ 中断驱动收发(仍polling)
virtio_net ✅ virtqueue RX/TX+netdev注册+DHCP自测已完成
字体系统 ✅ —
FirstInit 🔶 B6按键崩溃修复中;鼠标仍轮询
正常启动路径 ✅ —
desktop.elf ✅ 脏矩形未做
shell.elf / cmd.elf ✅ —
Linux兼容层 🔶 VMX实机验证待做(需嵌套虚拟化环境)
PE/EXE兼容层 ✅ Win32 API覆盖少
virtio-mmio模拟 🔶 blk已支撑guest rootfs;net后端未在guest验证
SAS-R0-PCQ调度器 ⬜ 未实现
DRR恢复系统 ⬜ 未实现
真实加密 ⬜ 原语未选型
Pacman包管理 🔶 依赖VMX验证+virtio-net后端

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,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/STDERR/EXIT
  • IPC:1MB共享内存@GPA 0x04000000,9+5 hypercall,VMCALL RAX=0x5554534D48430000|op
  • FAT32:f32_read_root_file / f32_write_root_file

三、阻塞与风险

3.1 关键阻塞点

# 阻塞点 严重度 缓解
B1 block write ✅已解决 — AHCI WRITE DMA+block_api.write已落地
B2 高位PCI MMIO映射缺失 ✅已解决 — NVMe BAR0可读,写路径+PRP list+读回校验通过
B3 WSL构建阻塞 ✅已解决 — bzImage/initrd/rootfs已产出
B4 QEMU TCG不支持VMX P0 真机VT-x/KVM/云VM验证;WHPX检测已落地
B5 fileman QEMU exit ✅已解决 — linker.ld BSS NOBITS分离+g_elf_image扩至1MB
B6 FirstInit按键崩溃 P1 fb_text边界检查+编译优化降级调试中
B7 APIC/IOAPIC stage1 已落地(LAPIC接管/MADT/IOREDTBL/apic_route开关/tick链路验证) P2 UTSM LAPIC EOI、IDT 256+vector allocator、MSI-X 进行中(Phase 2)

3.2 风险登记

风险 概率 影响 应对
VMX实机验证长期受阻 中 高 构建产物已就位;窗口期内争取验证,失败则冻结运行时
ROADMAP与实现态偏离 高 中 本次整理后同步
docs/上下文/对话膨胀 高 中 提炼为正式设计文档
UTSM真实加密原语选型拖延 中 高 Phase 9前完成PoC
PE32+原生执行安全风险 中 中 PE shim白名单+IAT拦截审计

四、开发策划

4.1 策划原则

先闭环再扩展;解阻塞优先于新功能;内核主线与生态主线并行;不破坏SAS-R0/O(1)热路径;文档与代码同步。

4.2 里程碑总览

M1 持久化闭环+桌面稳定     (2–4周)  B1→FAT32 write→FirstInit写盘→桌面bug
M2 存储升级+中断后端       (4–8周)  B2高位MMIO→NVMe→B7 APIC/IOAPIC/MSI-X→e1000中断驱动
M3 兼容层验证             (与M2并行) B3/B4→Linux guest→IPC→Arch rootfs
M4 调度器+恢复+加密       (8–16周) SAS-R0-PCQ→DRR→真实加密
M5 软件生态               (依赖M3)  Pacman→AUR→desktop集成

4.3 M1 — 持久化闭环+桌面稳定

任务 验收标准
AHCI WRITE DMA dkm_block_api.write注册
FAT32文件覆写/创建 f32_write_root_file可写user.conf/firstInit.txt
FAT32 FAT链分配 新文件可创建、可追加
FirstInit user.conf写盘 重启后login可读取
FirstInit鼠标光标 PS/2 IRQ12+包解码+24×24光标
桌面fileman崩溃修复(B5) fileman可正常使用
FirstInit按键崩溃修复(B6) -O2下fb_text稳定

4.4 M2 — 存储升级+中断后端

任务 验收标准 进度
页表映射接口 mmio_map/unmap通用接口 ✅
高位PCI MMIO映射(B2) NVMe BAR0可读register ✅(NVMe 数据路径已验证)
替换arena为真实页分配 移除16MB arena上限
NVMe admin queue/identify+block provider 注册nvme0 ✅ 写路径+PRP list+读回校验完成
IDT扩展256 vectors+vector allocator 动态分配中断向量
APIC EOI→IOAPIC redirection→LAPIC timer 替代PIC 🔶 stage1 完成(LAPIC接管/MADT/IOREDTBL/apic_route开关/tick链路验证),UTSM LAPIC EOI 进行中
MSI/MSI-X NVMe/e1000使用MSI-X
e1000中断驱动收发 替代polling
virtio-net virtqueue RX/TX 收发包成功 ✅ virtqueue RX/TX+netdev注册+DHCP自测完成
DKM工程化收尾 统一ABI头、零warning
QEMU测试套件脚本化 Run-All 全用例自动化 ✅ 9 用例(8+deaicup-e2e)全自动化 PASS

4.5 M3 — 兼容层验证

任务 验收标准
Linux 6.6 LTS构建+VMX运行环境 bzImage+initramfs生成,真机VT-x或KVM可用
VMX自测→Linux guest跑到shell initramfs busybox shell可交互
utsm_exec_daemon运行 EXEC_READY(20)发送,park生效
virtio-blk/net后端验证 guest内可读写块/DHCP/ping
IPC exec全链路 linux ls→stdout回显
Arch rootfs bootstrap pacman可用

4.6 M4 — 调度器+恢复+加密

任务 验收标准
SAS-R0-PCQ: TCB+task_create, Per-CPU runqueue, O(1)位图调度, context_switch(只加载crypto指针), task_kill crypto erase 多任务调度运行
DRR: Emergency Pool, Watchdog, Recovery log, Dirty Shard+Bitmap, A/B Checkpoint双槽, 三级Rollback, 驱动recovery ops checkpoint/rollback演示
真实加密: 原语选型PoC(HKDF+AES-CTR+Poly1305), KDF, Stream cipher(64B line), MAC(4KB page), PCKC真实key schedule UTSM真实加密selftest通过

4.7 M5 — 软件生态

任务 验收标准
FILE_TRANSFER+EXEC_FORWARD hypercall 跨内核文件传输+命令委托
shell path_search_and_run扩展 PATH命中stub→IPC委托
pacman装包+AUR helper pacman -S <pkg>成功
desktop动态Linux命令图标 点击图标运行Linux应用

4.8 依赖关系

B1(block write)→FAT32 write→user.conf写盘→M1闭环
B2(高位MMIO)→NVMe; B7(IRQ后端)→APIC/IOAPIC/MSI-X→e1000中断驱动+virtio-net
B3(Linux构建)+B4(VMX环境)→VMX验证→guest shell→daemon→IPC→Arch rootfs
M1→M4调度器→DRR→真实加密; Arch rootfs→M5 Pacman→AUR→desktop集成

五、文档治理建议

立即:同步ROADMAP状态标记;结构化Bug记录(BUG-YYYYMMDD-NNN模板)。

中期:docs/上下文/双内核+Linux_EXE→docs/兼容层设计.md;docs/上下文/桌面UI→docs/桌面设计.md;Pacman→合并进兼容层设计§生态。

长期:PR必须同步ROADMAP+设计文档;test-cases关联可执行脚本;CLAUDE.md季度回顾。


六、附录:关键技术参考速查

6.1 关键地址与魔数

项 值
dsk_boot_context.magic 0x44534B31424F4F54 "DSK1BOOT"
dkm_driver_desc.magic 0x444B4D31 "DKM1"
VMCALL RAX `0x5554534D48430000
IPC共享内存GPA 0x04000000(1MB)
Linux guest RAM GPA 0x05000000+(64MB)
block_read偏移 kernel_api + 0xA8(read@+0x10, write@+0x18)
pe_service槽 reserved[4]
linux_compat_service槽 reserved[5]
IPC exec消息号 16–20
ipc_exec_request约束 ≤240字节
virtio-blk/net IRQ 5/6(向量0x35/0x36)

6.2 关键约束清单

  • 进入C前cli/cld;早期serial不无限等待ready位
  • 未启用SSE前-mno-sse -mno-sse2 -mno-mmx -msoft-float
  • DATA/BSS用PF_R|PF_W|PF_X
  • DSK ibuf 1MB;g_dsk_fat32_filedata 2MB;g_fdata 1MB
  • FAT32批量读≥8扇区(推荐256);DSK linker.ld BSS分离NOBITS
  • mkfat32.ps1 Name83正好11字符;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

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
exec daemon CODE/linux/initramfs/bin/utsm_exec_daemon.c
DSK CODE/dsk/main.c
桌面 CODE/desktop/main.c
shell/cmd CODE/shell/main.c, CODE/cmd/main.c
FAT32镜像 .build_tmp/mkfat32.ps1