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