Files
Deshab-OS/docs/上下文/250729/整理 RE_上下文 文档.md
T

155 lines
6.3 KiB
Markdown
Raw Normal View History

2026-07-31 13:53:49 +08:00
# 整理 RE/上下文 文档
## 文档地图(共 18 份 + 8 份测试用例)
| 层级 | 文档 | 内容 |
|------|------|------|
| 内核设计层 (`docs/RE/`) | UTSM_设计架构.md | UTSM 架构定稿:模块组成、内存模型、数据结构、UTRW、DRR 协作 |
| | UTSM_算法记录.md | UTSM v1 核心算法:段创建、密钥派生、Fast/Slow Read/Write、PCKC、Checkpoint、Rollback |
| | 驱动模块ABI设计.md | DKM ABI:driver_desc/driver_init/driver_exit、kernel_api、ELF relocation、manifest、状态机、boot module |
| | Bug记录.txt | 8 条未结构化 bug 记录 |
| 系统架构层 (`docs/`) | ARCHITECTURE.md | 系统整体架构:SAS-R0-PCQ/UTSM/UTRW/DRR/DKM 五大核心支柱 |
| | BOOT_SEQUENCE.md | 五阶段启动:Ignis/Sigillum/Transitus/Origo/Excitas |
| | ROADMAP.md | Phase 0-9 分阶段开发路线图 |
| 开发记录层 (`docs/上下文/`) | 6 份对话记录 | 双内核/Linux EXE/桌面 UI/Pacman 等实现细节 |
| 测试用例 (`docs/RE/test-cases/`) | 8 份 | boot-regression/driver-matrix/linux-compat/network-e2e/pe-compat/performance-baseline/userapps-matrix/x86emu32-coverage |
## 关键同步差距(文档 vs 实现态)
- ROADMAP 滞后:网络协议栈已实现却标"无协议栈";未收录桌面/Linux/PE 兼容层/Pacman
- ARCHITECTURE 仍描述"旋转加载环",实际已被静态 Logo 取代
- BOOT_SEQUENCE 标 B4 正常路径"仅 halt",实际 login → desktop 已实现
---
## 兼容层子系统技术摘要
### 双内核架构(UTSM + Linux)
**核心设计**:VMX/EPT 完整虚拟化,UTSM 作为 Type-1 hypervisor(monitor 模型),Linux 6.6 LTS guest 运行在 VMX non-root 模式。
**GPA 布局**(Phase 1.3 修复后):
| GPA | 用途 | 大小 |
|-----|------|------|
| `0x00400000 - 0x02FFFFFF` | initrd / boot_params | - |
| `0x03000000 - 0x03FFFFFF` | Linux guest initrd | 16MB+ |
| `0x04000000` | IPC 共享内存 | 1MB |
| `0x05000000+` | Linux guest RAM | - |
**e820 约定**:`linux_loader.c` 中 IPC 区域为 `reserved` 类型,RAM 移至 0x05000000。
**Hypercall ABI**:VMCALL,guest RAX=操作码,RDI/RSI/RDX=参数,返回值写回 RAX。9 种 op:PING/HELLO/SHM_INFO/CAP_VALIDATE/UTRW_READ/UTRW_WRITE/DRR_CHECKPOINT/CONSOLE_WRITE/CONSOLE_READ。
**IPC EXEC 协议**(消息号 16-20):EXEC_REQUEST/STDOUT/STDERR/EXIT/READY。`ipc_exec_request` ≤240 字节。
**virtio-mmio**:blk→IRQ5(0x35),net→IRQ6(0x36),MMIO 处理通过 EPT misconfig exit。
### PE/EXE 兼容层
四个组件(`CODE/UTSM/pe/`):
1. **pe_service.c** — 统一服务入口,通过 `reserved[4]` 暴露
2. **pe_loader.c** — PE32/PE32+ 解析映射重定位
3. **pe_shim.c** — IAT 拦截,`__attribute__((ms_abi))` shim,`__builtin_setjmp/longjmp` 异常恢复
4. **x86emu32.c** — x86-32 指令解释器
### shell `linux` 命令实现
`CODE/shell/main.c`:`cmd_linux` → `g_lxc_svc->exec()` → IPC → linux_resume → daemon fork+exec → pipe → IPC 回传 → 显示
---
## 桌面 UI 技术摘要(Winux-Kate "Sealed Arc" 设计语言)
### 架构
- `desktop.elf` 入口 `dsk_entry(dsk_boot_context)`,三层:顶栏(34px) + 页面宿主 + 任务栏
- 三页面:DASH/IDE/DESK(IM 页移除,自定义页 ID 从 4 起)
- DASHBOARD 四面板:TERM-01/02(35%) + EDITOR/FILES(65%)
### 配色方案(`deshab_ui.h:744-761`)
| 语义 | 常量 | 值 |
|------|------|-----|
| 主背景 | `KS_BG_PRIMARY` | `0xFF02040A` |
| 次级背景 | `KS_BG_SECONDARY` | `0xFF0A1428` |
| 主文本 | `KS_TEXT_PRIMARY` | `0xFFE8F4FC` |
| 暗文本 | `KS_TEXT_DIM` | `0xFF90B0C8` |
| 霓虹青 | `KS_ACCENT` | `0xFF00E5FF` |
| 霓虹绿 | `KS_ACCENT2` | `0xFF39FF14` |
| 危险红 | `KS_DANGER` | `0xFFFF4D6D` |
| 边框 | `KS_BORDER` | `0xFF2A6070` |
对比度:TEXT_DIM 在 BG_PRIMARY 上 10.8:1,BORDER 8.2:1。
### 渲染优化
- 双缓冲:`g_fb.fb` → `SPRITE_BUF_ADDR=0x7000000` 离屏,`flip_buffer()` 全屏 / `flip_rect()` 局部
- DBF 位图字体:`simhei_16/24/32.dbf`,GB2312 全部 6763 汉字 + ASCII,二分查找
- 视觉效果简化:5 层→3 层,扫描线改空函数,圆角改 0
- desktop.elf 体积 802KB→140KB(BSS 分离为 NOBITS)
### FILES 面板过滤
跳过 `.ELF` 可执行和 `FIRSTINI` 前缀,保留用户文件(USER.CON/NETCONF.CNF/FIRSTINT.XT)。
---
## Pacman 包管理方案
**核心矛盾**:pacman 依赖 glibc+POSIX+动态链接+网络+加密+压缩+可写 Unix FS,Deshab 均不提供。
**方案 C(IPC 委托执行)**:`SYSTEM/bin/` 放 stub → PATH 命中 → IPC 委托 Linux guest 执行 → 结果显示回 Deshab。
---
## BOOT_SEQUENCE 技术摘要
### 五阶段启动模型
| 阶段 | 代号 | 产物 | 锚点 |
|------|------|------|------|
| B0 | Ignis | utsm.elf 入内存 | — |
| B1 | Sigillum | 14 DKM 驱动 ACTIVE | `[UTSM] SELFTEST PASS` |
| B2 | Transitus | dsk_boot_context 就绪 | `[DSK] context ok` |
| B3 | Origo | firstInit 标志判定 | `[DSK] first init detected` 或 `SELFTEST PASS` |
| B4 | Excitas | 用户可交互 | `[DSK] jumping to FirstInit` |
### dsk_boot_context
```c
struct dsk_boot_context {
u64 magic; // 0x44534B31424F4F54 ("DSK1BOOT")
u32 abi_version; // 1
u32 size;
u64 flags; // FROM_UTSM | DKM_READY | FAT32_PATH
u64 hhdm_offset, rsdp_address;
u64 framebuffer_address/width/height/pitch/bpp;
u64 boot_modules_response;
u64 dkm_kernel_api, dkm_driver_table, driver_count;
u64 utsm_state, drr_state;
u64 memory_map, count, entry_size;
u64 kernel_stack_top;
u64 reserved[8]; // reserved[4]=pe_svc, reserved[5]=linux_compat_svc
};
```
ABI 约束:字段只能追加到 reserved 区。block_read 通过硬偏移 `api + 0xA8` 读取。
### 失败恢复链
- B2 FAT32 不可用 → 回退 Limine module
- B3 无 block device → 跳过 firstInit
- B1 required 驱动失败 → DRR recovery / panic
- B1 optional 驱动失败 → 标记 FAILED 继续
---
## 整体脉络
```
BOOT_SEQUENCE (B0→B4) → Winux-Kate 桌面 UI → Pacman 包管理
启动契约 用户交互层 软件生态
```
- UTSM 是契约源(dsk_boot_context 版本化传递)
- DKM 是能力供给(14 驱动暴露 kernel_api)
- DSK 是分发中枢(首次启动调度 + ELF 加载器)
- DRR 是恢复后盾(当前 stub,未来三级回退)
- SAS-R0 是约束源头(所有应用为静态 PIE ELF,无 POSIX/syscall/fork/exec)