Files
Deshab-OS/docs/上下文/250729/整理 RE_上下文 文档.md
2026-07-31 13:53:49 +08:00

155 lines
6.3 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.
# 整理 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)