# 系统策划与开发 ## 项目现状 ### 已实现并验证 - 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 `: 解析 PE 头显示 DOS/NT/File/Optional Header、节区表(X/R/W 标志)、导入表(DLL + 函数名),不执行 - `pe `: 显式运行 PE 程序 - PATH 查找: 先根目录(`C:\`),再 `/bin` 目录(`C:\bin\`) ### /bin 子目录支持 ```c 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 解释器) ```