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

101 lines
3.7 KiB
Markdown
Raw Permalink 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.
# 系统策划与开发
## 项目现状
### 已实现并验证
- 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 子目录支持
```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 解释器)
```