Files
Deshab-OS/docs/上下文/系统策划与开发.md
2026-07-31 13:53:49 +08:00

3.7 KiB
Raw Permalink Blame History

系统策划与开发

项目现状

已实现并验证

  • UTSM 启动内核 + 14 个 DKM 驱动(含 ath9k WiFi stub)
  • DSK 主内核 + FAT32 读写 + PIE ELF loader
  • 用户态链路: FirstInit → login → desktop → shell/cmd + 5 个工具应用(editor/fileman/browser/curl/ping)
  • e1000 完整 RX/TX + DHCP/ARP/DNS 协议栈(Phase 1 已完成)
  • Linux 兼容层(UTSM+Linux 双内核 park-and-resume + IPC exec 协议)
  • PE/EXE 兼容层(pe_service/pe_loader/pe_shim/x86emu32)
  • SAS-R0-PCQ 调度器设计 + DRR 恢复系统设计(未实现)

未实现

  • Phase 0 剩余: 页表映射接口、高位 PCI MMIO、替换 arena
  • Phase 2: IRQ 后端升级(APIC EOI / IOAPIC / MSI-X)
  • Phase 3 剩余: virtio-net virtqueue、e1000 中断驱动
  • Phase 4: VFS 子目录路径解析
  • Phase 5: block write + FAT32 write
  • Phase 6: FirstInit 鼠标光标、网络配置页
  • Phase 7-9: 调度器、DRR、真实加密

cmd.elf PE/PEINFO 命令

新增功能

  • peinfo <name>: 解析 PE 头显示 DOS/NT/File/Optional Header、节区表(X/R/W 标志)、导入表(DLL + 函数名),不执行
  • pe <name>: 显式运行 PE 程序
  • PATH 查找: 先根目录(C:\),再 /bin 目录(C:\bin\)

/bin 子目录支持

u32 cmd_find_subdir(u32 dir_cluster, const char *name);     // 在目录簇链中查找子目录
int cmd_read_file_in_dir(u32 dir_cluster, const char *name, u8 *buf, u64 *size);  // 从指定目录读取
u32 cmd_get_bin_cluster(void);                                // 获取 /bin 目录首簇号
int cmd_read_pe_from_bin(const char *name, u8 *buf, u64 *size);  // 从 /bin 读取 PE

PE 样本部署

文件 格式 物理路径 FAT32 镜像路径
hello64.exe PE32+ (1536B) SYSTEM/bin/ /bin/hello64.exe
hello32.exe PE32 (2048B) SYSTEM/bin/ /bin/hello32.exe
cmd.exe PE32+ (1536B) SYSTEM/bin/ /bin/cmd.exe

gen_pe.py 扩展

  • build_pe32_plus(): 生成 PE32+ 二进制(hello64.exe)
  • build_pe32(): 生成 PE32 二进制(hello32.exe),x86emu32 解释器兼容的操作码
  • build_cmd_exe(): 生成 cmd.exe PE32+ 样本

P2/P3 Bug 修复

修复清单

Bug 修复内容 文件
BUG-001 Files 关闭按钮 添加窗口关闭按钮点击检测 CODE/tools/fileman/main.c
BUG-002 Shell 命令执行 命令执行后确保光标在新行 + 刷新终端 CODE/shell/main.c
BUG-003 Shell 换行 执行后正确换行 CODE/shell/main.c
BUG-004 Files 目录 启动时自动进入 SYSTEM/user 目录 CODE/tools/fileman/main.c
BUG-005 Files 文件夹图标 已有 is_dir 标记(原实现正确) -
BUG-006 Files 返回上级 添加 ".." 条目 + go_up() CODE/tools/fileman/main.c
BUG-007 桌面重复图标 第三页桌面跳过 Terminal 和 CMD CODE/desktop/main.c
BUG-008 打字机速度 延迟 33ms → 11ms(3倍加速) CODE/firstInit/main.c

额外修复

virtio_mmio.c 前向声明 bug

virtio_blk_backend_init()/virtio_net_backend_init() 声明在调用点之后(C99 隐式声明错误),已上移到 virtio_mmio_init() 之前。


构建验证

  • build.bat 全部成功,零警告
  • cmd.elf (511584 bytes)
  • /bin/ 目录包含: CURL.ELF, PING.ELF, HELLO64.EXE, HELLO32.EXE, CMD.EXE

测试步骤

help              → 确认 pe / peinfo 已列出
dir               → 确认 BIN 目录
peinfo hello64    → PE32+ 头信息 (machine=0x8664, ImageBase=0x140000000)
pe hello64        → "Hello from PE32+!", exit code 0
peinfo hello32    → PE32 头信息 (machine=0x014c, ImageBase=0x400000)
pe hello32        → "Hello from PE32!" (x86emu32 解释器)