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