FUCKYOU
This commit is contained in:
@@ -0,0 +1,315 @@
|
||||
# Deshab Linux/EXE 兼容层开发
|
||||
|
||||
> **Workspace:** d:\Code\Deshab
|
||||
|
||||
---
|
||||
|
||||
## 任务目标
|
||||
|
||||
为 Deshab 添加完整的 Linux 程序兼容层(依赖双内核架构)和 PE/EXE 兼容层(写在 UTSM 里),编写 cmd.exe 编译到 SYSTEM/system/deshab64,桌面命令行1是 shell.elf(原生+Linux),命令行2是 cmd。
|
||||
|
||||
## 架构总览
|
||||
|
||||
```
|
||||
桌面命令行1: shell.elf (原生系统命令行 + linux 命令运行 Linux 程序)
|
||||
桌面命令行2: cmd.elf (Windows 风格命令行 + PE/EXE 兼容)
|
||||
```
|
||||
|
||||
## 实施阶段
|
||||
|
||||
### Phase 1: PE/EXE 兼容层(UTSM 内置)
|
||||
|
||||
**新增文件**(`CODE/UTSM/pe/`):
|
||||
|
||||
| 文件 | 职责 |
|
||||
|------|------|
|
||||
| `pe_loader.c/h` | PE32+ 64位原生 Ring0 执行 + PE32 32位 x86 解释器执行 |
|
||||
| `pe_shim.c/h` | Windows API shim(Kernel32/User32/MSVCRT 子集),使用 `__attribute__((ms_abi))` 处理 MS x64 ABI |
|
||||
| `x86emu32.c/h` | x86-32 指令解释器(PE32 运行时),支持通用寄存器/标志/FPU/SSE/字符串操作/rep前缀 |
|
||||
| `pe_service.c/h` | PE 服务组装:统一 load/run/unload 接口,PE32+ 直接执行 + PE32 经解释器执行 |
|
||||
|
||||
**PE 服务暴露**:`dsk_loader.c` 通过 `reserved[4]` 传递 `pe_service` 指针给 DSK/cmd.elf。
|
||||
|
||||
**PE32+ 加载流程**:解析 COFF header → 段映射到 preferred_base → 应用重定位(IMAGE_REL_BASED_DIR64/HIGHLOW)→ 解析 IAT → 填充 shim 函数 → 跳转 entry
|
||||
|
||||
**PE32 解释器关键设计**:
|
||||
- `x86emu32_state` 结构:通用寄存器、EFLAGS、段寄存器、FPU栈、512KB 栈+4MB 堆
|
||||
- 内存访问:`emu->mem[addr]` 直接寻址(preferred_base=0x00400000 对应 mem 起始)
|
||||
- IAT 调用:`try_iat_call` → 查找 shim 函数表 → fn32 有则直接调用,否则回退 fn64(经 ms_abi 桥接)
|
||||
- `__builtin_setjmp`/`__builtin_longjmp` 用于异常处理
|
||||
|
||||
### Phase 2: cmd.elf
|
||||
|
||||
**文件**:`CODE/cmd/main.c`(~850行)
|
||||
|
||||
Windows cmd.exe 风格命令行,支持:
|
||||
- PE/EXE 执行(通过 `reserved[4]` 获取 pe_service)
|
||||
- 内置命令:dir, cls, echo, type, ver, help, exit
|
||||
- PS/2 键盘输入(scan code set 1 → ASCII)
|
||||
- FAT32 根目录文件列表/读取
|
||||
- `C:\>` 提示符
|
||||
|
||||
**构建**:`build.ps1` 中添加 cmd 构建步骤,`mkfat32.ps1` 添加 `CMD ELF` 条目(8.3名 `CMD ELF`)。
|
||||
|
||||
### Phase 3: Linux 兼容层
|
||||
|
||||
#### 3.1 park-and-resume 机制
|
||||
|
||||
**文件**:`CODE/UTSM/vmm/linux_resume.c/h`, `vmexit.c`, `linux_boot.c`
|
||||
|
||||
- Linux guest HLT 时 park(推进 RIP),不终止
|
||||
- `linux_is_parked()` / `linux_resume()` 控制 guest 生命周期
|
||||
- `g_guest_parked` / `g_linux_guest_active` 全局状态标志
|
||||
- asm 终止路径返回到 `linux_launch()`/`linux_resume()` 保存的 RSP/返回 RIP
|
||||
|
||||
#### 3.2 IPC exec 协议
|
||||
|
||||
**文件**:`CODE/utsm-ipc/ipc_proto.h`
|
||||
|
||||
消息类型:`EXEC_REQUEST(0x10)` / `EXEC_STDOUT(0x11)` / `EXEC_STDERR(0x12)` / `EXEC_EXIT(0x13)` / `EXEC_READY(0x14)`
|
||||
|
||||
载荷结构:
|
||||
```c
|
||||
typedef struct {
|
||||
u32 type;
|
||||
char path[256];
|
||||
char args[512];
|
||||
u32 seq;
|
||||
} ipc_exec_request;
|
||||
```
|
||||
|
||||
#### 3.3 linux_compat 服务
|
||||
|
||||
**文件**:`CODE/UTSM/vmm/linux_compat.c/h`
|
||||
|
||||
```c
|
||||
struct linux_compat_service {
|
||||
u32 magic; // LINUX_COMPAT_MAGIC
|
||||
int (*exec)(const char *path, int argc, char **argv,
|
||||
char *stdout_buf, u32 cap, u32 *out_len, int *exit_code);
|
||||
int (*is_available)(void);
|
||||
};
|
||||
```
|
||||
|
||||
- `lxc_exec()`:构建 `ipc_exec_request` → `ipc_shm_send(EXEC_REQUEST)` → `linux_resume()` 唤醒 guest → `lxc_drain_responses()` 读取 STDOUT/STDERR/EXIT
|
||||
- 通过 `reserved[5]` 暴露给 DSK/shell
|
||||
|
||||
#### 3.4 shell `linux` 命令
|
||||
|
||||
**文件**:`CODE/shell/main.c`
|
||||
|
||||
- `cmd_linux()`:解析参数 → 路径处理(裸命令补 `/bin/` 前缀)→ `g_lxc_svc->exec()` → 输出经 ANSI CSI 剥离后显示
|
||||
- `g_lxc_svc` 从 `reserved[5]` 读取,校验 `LINUX_COMPAT_MAGIC`
|
||||
|
||||
#### 3.5 Linux 驱动 ioctl + exec daemon
|
||||
|
||||
**驱动**:`CODE/linux/patches/utsm_hcall.c`
|
||||
|
||||
ioctl 接口:`RECV_MSG` / `SEND_MSG` / `PARK` / `GET_READY`
|
||||
|
||||
**daemon**:`CODE/linux/initramfs/bin/utsm_exec_daemon.c`(静态编译)
|
||||
|
||||
- 接收 EXEC_REQUEST → fork+exec+pipe 捕获输出 → 发 EXEC_STDOUT/EXIT → HLT park
|
||||
- 缺失时回退到 ttyS0 交互 shell
|
||||
|
||||
### Phase 1(重新定义):Linux guest 真正跑起来
|
||||
|
||||
#### 1.1 EPT 动态页映射
|
||||
|
||||
**原问题**:`vmexit.c` EPT violation 只做 1:1 恒等映射 `ept_identity_map(gpa, RWX)`
|
||||
|
||||
**改进**:区分 RAM 区(按需分配 HPA)和 virtio-mmio 设备区(路由到设备模拟)
|
||||
- RAM 区:`dma_alloc_pages` 分配 → `ept_map_page(gpa, hpa, RWX)`
|
||||
- MMIO 区:解码 guest 指令 → 路由到 `virtio_mmio_handle_access`
|
||||
|
||||
#### 1.2 virtio-mmio 框架
|
||||
|
||||
**文件**:`CODE/UTSM/vmm/virtio_mmio.c/h`
|
||||
|
||||
GPA 布局:
|
||||
```
|
||||
0x10000000: virtio-blk (IRQ5)
|
||||
0xF4001000: virtio-net (IRQ6)
|
||||
0xF4002000: virtio-rootfs-blk (IRQ7)
|
||||
```
|
||||
|
||||
寄存器分发:`VIRTIO_MMIO_MAGIC_VALUE` / `VERSION` / `DEVICE_ID` / `QUEUE_NUM` / `QUEUE_READY` / `QUEUE_NOTIFY` / `STATUS` / `CONFIG`
|
||||
|
||||
队列状态机:`avail ring` / `used ring` / `desc table` 的 guest→host 数据流
|
||||
|
||||
#### 1.3 virtio-blk 后端
|
||||
|
||||
**文件**:`CODE/UTSM/vmm/virtio_blk.c`
|
||||
|
||||
- `virtio_blk_backend_init()`:绑定 UTSM block 设备 0(ahci0)→ `block_get_api()` → 注册
|
||||
- `blk_handle_chain()`:处理 VIRTIO_BLK_T_IN/OUT 请求 → `block_api->read/write`
|
||||
- `virtio_rootfs_blk_init()`:内存后端(rootfs 镜像作为 Limine boot module)→ GPA `0xF4002000`, IRQ7
|
||||
|
||||
#### 1.4 vmexit dispatch 接线
|
||||
|
||||
- `EXIT_CPUID` → `handle_cpuid`(host passthrough + 屏蔽 VMX/hypervisor 位)
|
||||
- `EXIT_IO_INSTRUCTION` → `handle_io`(COM1/PIC/PIT 模拟)
|
||||
- `EXIT_INTERRUPT_WINDOW` → `maybe_inject_irq`(guest 开中断时注入 pending IRQ)
|
||||
- `EXIT_VMX_PREEMPTION_TIMER` → 1ms 周期 exit → `vmexit_before_resume()`(arm timer + 串口 RX + virtio_net_poll + IRQ 注入)
|
||||
- virtio IRQ 注入:QUEUE_NOTIFY 后 `vmx_guest_queue_irq(0x30+irq)` → blk→IRQ5(0x35), net→IRQ6(0x36)
|
||||
|
||||
#### 1.5 initramfs
|
||||
|
||||
**文件**:`CODE/linux/build_initrd.sh`
|
||||
|
||||
- busybox 1.35.0 静态下载 + 内核自带 `gen_init_cpio` 打包
|
||||
- `/dev/console`、`/dev/ttyS0` 节点 + 12 个 applet symlink(含 switch_root/mkdir)
|
||||
- init 脚本:daemon 缺失时回退 ttyS0 交互 shell
|
||||
|
||||
#### 1.6 WHPX 嵌套虚拟化问题
|
||||
|
||||
**问题**:WHPX 不支持嵌套 VMX,CPUID 报告 VMX 支持但 VMXON 导致 WHPX exit code 4 崩溃
|
||||
|
||||
**解决**:`vmx.c` 添加 `vmx_truly_available()` 检测:
|
||||
1. 检查 CPUID.01H:ECX[31] hypervisor present bit
|
||||
2. 检测 Hyper-V 签名 → 通过 CPUID 检查嵌套 VMX 支持
|
||||
3. 检测 KVM 签名 → 允许(KVM 通常支持嵌套 VMX)
|
||||
4. 未知 Hypervisor → 保守跳过
|
||||
|
||||
`run_qemu.bat`:WHPX 下使用 `-cpu qemu64,-vmx` 禁用 VMX CPUID 标志
|
||||
|
||||
### Phase 2: Linux guest Arch rootfs + pacman
|
||||
|
||||
#### Arch rootfs 镜像
|
||||
|
||||
**文件**:`CODE/linux/build_arch_rootfs.sh`
|
||||
|
||||
- 下载 Arch bootstrap (`.tar.zst`,121MB) → WSL 原生 ext4 解压(避免 9p 挂载性能问题)
|
||||
- 裁剪:man/doc/include/locale/.a 静态库 → 597M→363M
|
||||
- 编译 `utsm_exec_daemon` 静态二进制 → 植入 `/usr/local/bin/`
|
||||
- 配置 pacman 国内镜像源(清华/中科大/阿里/腾讯/华为云)
|
||||
- 创建 `/sbin/init`:挂载 proc/sys/dev → 启动 daemon → 交互 shell
|
||||
- 静态 IP:`10.0.2.15/24` gw `10.0.2.2` DNS `10.0.2.3`(slirp 固定网段)
|
||||
- `/var/lib/pacman`、`/var/cache/pacman`、`/etc/resolv.conf` 符号链接到 tmpfs(rootfs 只读)
|
||||
- `SigLevel=Never` 跳过 gnupg
|
||||
|
||||
#### initramfs init 脚本
|
||||
|
||||
- 等待 `/dev/vdb` → 挂载 ext4 → `mount --move` dev/proc/sys → `exec switch_root /mnt/root /sbin/init`
|
||||
- 无 rootfs 时回退到 initramfs daemon 或 debug shell
|
||||
|
||||
#### 内核配置
|
||||
|
||||
已启用:`CONFIG_VIRTIO_NET=y`、`CONFIG_VIRTIO_BLK=y`、`CONFIG_VIRTIO_MMIO=y`、`CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y`、`CONFIG_EXT4_FS=y`、`CONFIG_DEVTMPFS_MOUNT=y`
|
||||
|
||||
#### 构建配置调整
|
||||
|
||||
- `run_qemu.bat`:`-m 512M` → `-m 2G`(512MB rootfs boot module 需要足够 RAM)
|
||||
- `build.ps1`:FAT32 ESP 128→768MB
|
||||
- `limine.conf`:添加 `linux-rootfs.img` boot module (`linux:rootfs`)
|
||||
|
||||
### Phase 3: 文件传输 IPC + 网络打通
|
||||
|
||||
#### 3.1 文件传输 IPC
|
||||
|
||||
**协议**:`CODE/utsm-ipc/ipc_proto.h`
|
||||
|
||||
新增消息类型:`FILE_LIST_REQUEST(0x18)` / `FILE_READ_REQUEST(0x19)` / `FILE_RESPONSE(0x1A)` / `FILE_WRITE_REQUEST(0x1B)`
|
||||
|
||||
结构:
|
||||
```c
|
||||
typedef struct {
|
||||
u32 type;
|
||||
char path[256];
|
||||
u32 file_offset;
|
||||
u32 chunk_size;
|
||||
} ipc_file_request;
|
||||
|
||||
typedef struct {
|
||||
u32 type;
|
||||
u32 total_size;
|
||||
u32 chunk_offset;
|
||||
u32 chunk_len;
|
||||
u8 data[];
|
||||
} ipc_file_response;
|
||||
```
|
||||
|
||||
**Linux 侧**:
|
||||
- `utsm_hcall.c`:`POOL_WRITE`/`POOL_READ` ioctl(带边界检查)
|
||||
- `utsm_exec_daemon.c`:`handle_file_list`(readdir → 文本列表)、`handle_file_read`(pread 分块)
|
||||
|
||||
**UTSM 侧**:
|
||||
- `linux_compat.c`:`file_list`/`file_read` 服务实现(roundtrip → pool 拷出)
|
||||
|
||||
**shell 命令**:
|
||||
- `lls [路径]`:列 Linux 目录
|
||||
- `lcat <路径>`:读 Linux 文件(自动分块)
|
||||
- `linux <前缀>`+Tab:补全 /usr/bin 程序名(唯一匹配补全、公共前缀扩展、多候选列表)
|
||||
|
||||
#### 3.2 网络打通
|
||||
|
||||
**virtio_net 后端**:`CODE/UTSM/vmm/virtio_net.c`
|
||||
|
||||
- TX:guest QUEUE_NOTIFY(1) → `net_handle_tx` → `net_gather_frame` 跳过 10 字节 `virtio_net_hdr`(支持 hdr 独立描述符和 hdr+data 合并两种布局)→ `net->tx(bound_dev)` 送 e1000 → used 回执 → IRQ6
|
||||
- RX:`virtio_net_poll()` 由 preemption timer(~1kHz)周期调用 → `net_handle_rx` → `net_rx_data_region` 解析 guest buffer → `rx_poll` 填入 → hdr 清零 → used 回执 → IRQ6
|
||||
- 无包时保留 buffer 不消耗(防饿死);guest 无 buffer 时主动收包丢弃(防 e1000 RX ring 堵死)
|
||||
- 继承 e1000 真实 MAC 暴露给 guest
|
||||
- Feature 协商:只声明 `VIRTIO_F_VERSION_1 | MAC | STATUS`
|
||||
|
||||
**统计**:rx_filled / rx_drop_nobuf / rx_badbuf / tx_sent / tx_drop,每 512 事件串口打一行
|
||||
|
||||
### Phase 4: desktop 集成 Linux 命令为应用图标
|
||||
|
||||
**文件**:`CODE/tools/desktop_app.h` + `CODE/desktop/main.c`
|
||||
|
||||
- `app_descriptor` 增加 `linux_cmd` 字段(互斥优先级:elf_name 优先,仅设 linux_cmd 时由内置终端窗口承载)
|
||||
- `MAX_APPS` 8→16、`MAX_ICONS` 8→16
|
||||
- `LINUXAPP.CNF`(FAT32 根目录,8.3名 LINUXAPPCNF):格式 `显示名|linux命令`
|
||||
- `g_lxc_svc` 通过 `reserved[5]` + `LINUX_COMPAT_MAGIC` 校验
|
||||
- `lnx_on_create`:bash_reset → 标题 "NAME . Linux" → `$ <cmd>` 回显 → 同步 `exec()` 阻塞 → 输出经 ANSI CSI 剥离/`^M` 忽略/`\t` 展开后一次性追加 → `[exit N]`
|
||||
- `draw_icon_linux`:暗底 + 霓虹绿 `>_`
|
||||
|
||||
### 构建问题记录
|
||||
|
||||
1. **GCC 15 C23 与 Linux 6.6 不兼容**:`bool`/`false` 变成关键字 → 安装 gcc-12 + `update-alternatives`
|
||||
2. **317 个 0 字节损坏 .o**:gcc-15 中断残留 → 全量清理重建
|
||||
3. **C 盘满导致 WSL 崩溃**:WSL 迁移至 `D:\WSL\Ubuntu`
|
||||
4. **ipc_proto.h 的 `<stdint.h>` 在 Linux 内核不可用**:条件编译 `#ifdef __KERNEL__` → `<linux/types.h>`;`#ifdef __UTSM_KERNEL__` → `<utsm/types.h>`;否则 `<stdint.h>`
|
||||
5. **`my_memcpy4`/`my_memcpy_n` 未定义**:替换为 `rf_memcpy()`,修复 header 只拷 4 字节的 bug
|
||||
6. **NVMe 驱动三个 bug**:Create Queue CDW10 高低半字颠倒、错误码丢失 SCT、Read opcode 误为 Flush(0x00) 应为 0x02
|
||||
|
||||
### WSL 构建命令(手动)
|
||||
|
||||
```bash
|
||||
# 安装依赖
|
||||
sudo apt update && sudo apt install -y build-essential bc flex bison libelf-dev libssl-dev cpio
|
||||
|
||||
# 下载并编译 Linux 6.6
|
||||
cd ~
|
||||
curl -L -o linux-6.6.tar.xz https://mirrors.tuna.tsinghua.edu.cn/kernel/v6.x/linux-6.6.tar.xz
|
||||
tar xf linux-6.6.tar.xz && cd linux-6.6
|
||||
|
||||
# 安装 UTSM 驱动
|
||||
mkdir -p drivers/utsm/include
|
||||
cp /mnt/d/Code/Deshab/CODE/linux/patches/utsm_hcall.c drivers/utsm/
|
||||
cp /mnt/d/Code/Deshab/CODE/linux/patches/utsm_Kconfig drivers/utsm/Kconfig
|
||||
cp /mnt/d/Code/Deshab/CODE/linux/patches/utsm_Makefile drivers/utsm/Makefile
|
||||
cp /mnt/d/Code/Deshab/CODE/utsm-ipc/ipc_proto.h drivers/utsm/include/
|
||||
bash /mnt/d/Code/Deshab/CODE/linux/fix_driver.sh ~/linux-6.6
|
||||
|
||||
# 配置 + 编译
|
||||
cp /mnt/d/Code/Deshab/CODE/linux/configs/utsm_x86_64_defconfig .config
|
||||
make olddefconfig
|
||||
make -j$(nproc) KCFLAGS='-std=gnu17' bzImage
|
||||
|
||||
# 拷贝产物
|
||||
mkdir -p /mnt/d/Code/Deshab/SYSTEM/boot
|
||||
cp arch/x86/boot/bzImage /mnt/d/Code/Deshab/SYSTEM/boot/linux-bzImage
|
||||
|
||||
# 构建 initramfs
|
||||
cd /mnt/d/Code/Deshab/CODE/linux && ./build.sh
|
||||
```
|
||||
|
||||
### 待端到端验证
|
||||
|
||||
WHPX/TCG 均不支持嵌套 VMX,需在真实硬件 / Linux KVM / 嵌套 Hyper-V VM 验证:
|
||||
- `linux uname -a` — 委托执行
|
||||
- `lls /usr/bin` — 列 Linux 程序
|
||||
- `lcat /etc/hostname` — 读 Linux 文件
|
||||
- `linux pacman -Sy` — 经 virtio_net→e1000→slirp 下载包
|
||||
- `linux pac[TAB]` — Tab 补全程序名
|
||||
@@ -0,0 +1,134 @@
|
||||
# Review Context and Use Multi-Agent
|
||||
|
||||
> **Workspace:** d:\Code\Deshab
|
||||
|
||||
---
|
||||
|
||||
## 第一轮 5 智能体推进
|
||||
|
||||
### Agent 1: Phase 3 文件传输 IPC
|
||||
|
||||
**修改文件**:`CODE/utsm-ipc/ipc_proto.h`, `CODE/UTSM/vmm/hypercall.c`, `CODE/UTSM/vmm/linux_compat.c`, `CODE/linux/patches/utsm_hcall.c`, `CODE/linux/initramfs/bin/utsm_exec_daemon.c`
|
||||
|
||||
**双通道协议**:
|
||||
1. **ring 消息通道**:`FILE_LIST(24)/READ(25)/WRITE(27)REQUEST` + `FILE_RESPONSE(26)`,park-and-resume 同步模型,~1MB `payload_pool` 零拷贝中转
|
||||
2. **hypercall 直连通道**:`FILE_READ(0x0060)/FILE_WRITE(0x0061)`,Linux 侧直接读写 UTSM FAT32 根目录文件
|
||||
|
||||
**分块语义**:单次往返最多搬运 pool 容量(1015712B),大文件递增 `file_offset` 循环;写入约定 `file_offset==0` 即 `O_TRUNC`(整文件替换)
|
||||
|
||||
**返回打包**:`FILE_READ` hypercall RAX 低 20 位=暂存字节数、高位=文件总大小
|
||||
|
||||
**SHM 布局**:64B header + 2×16400B ring + pool = 恰好 1MB,编译期 `_Static_assert` 守卫
|
||||
|
||||
**构建验证**:UTSM 全量重建通过(`utsm.elf` 170384B),Linux daemon 静态编译 827096B,`ipc_proto.h` 三种包含模式全部验证
|
||||
|
||||
### Agent 2: virtio-net 网络路径
|
||||
|
||||
**修改文件**:`CODE/UTSM/vmm/virtio_net.c`(唯一改动)
|
||||
|
||||
**核心 bug 修复**:TX 全坏根因——`net_gather_frame` 原判断 `len > VIRTIO_NET_HDR_LEN` 才跳过头,Linux virtio-net 把 10 字节 hdr 作为独立描述符(len==10)条件不成立 → hdr 拼入待发帧 → 坏包。改为首描述符无条件跳过 `min(len,10)` 字节
|
||||
|
||||
**TX 数据路径**:guest QUEUE_NOTIFY(1) → `net_handle_tx` → `net_gather_frame` 跳 hdr、拼接链到 2048B scratch → `net->tx(bound_dev)` 送 e1000 → used 回执 → IRQ6
|
||||
|
||||
**RX 数据路径**:1kHz preemption timer → `vmexit_before_resume` → `virtio_net_poll` → `net_handle_rx`:`net_rx_data_region` 解析两种布局(hdr 独立 2 段、hdr+data 同段),校验 W flag;有 buffer 时 `rx_poll` 填入;无包不消耗 buffer;guest 无 buffer 时主动收包丢弃防 e1000 ring 堵死;单次 32 帧 budget
|
||||
|
||||
**统计**:rx_filled / rx_drop_nobuf / rx_badbuf / tx_sent / tx_drop,每 512 事件一行
|
||||
|
||||
**编译验证**:零 warning 通过
|
||||
|
||||
### Agent 3: VMM 核心
|
||||
|
||||
**结果**:`vmexit_before_resume` + preemption timer 1ms 周期 exit + interrupt window 注入框架已落盘(汇报丢失但代码在)
|
||||
|
||||
### Agent 4: Deaicup 调研
|
||||
|
||||
**结论**:推荐路径 B(Linux guest 内 egui 软件渲染 + IPC 拉帧到 Deshab 桌面窗口,类 WSLg)。决策报告已写入 `docs/RE/docs/deaicup_runtime_decision.md`
|
||||
|
||||
**依据**:Deaicup 是 eframe 0.27.2 应用,wgpu/glow 双 GPU 后端在无 GPU 环境均不可用;HTTPS 图片加载恰是 Linux guest 已有能力。需新增显示 SHM(800×600 RGBA 1.83MB,建议新 GPA 8MiB)+ 输入转发 + 桌面远程窗口
|
||||
|
||||
### Agent 5: FUCK 自定义内核配置
|
||||
|
||||
**修改文件**:`CODE/UTSM/kernel/main.c`, `CODE/UTSM/dkm/manifest.c`, `CODE/dsk/main.c`, `CODE/UTSM/arch/x86_64/idt.c`
|
||||
|
||||
**框架构成**:
|
||||
- `ini_parser.c/h`:freestanding 无堆分配,64 条目上限,接口 `ini_parse/ini_get/ini_get_int/ini_get_bool`
|
||||
- FAT32 子目录遍历:`fat32_find_in_dir` + `fat32_read_path`,支持 `/` 分隔 8.3 路径
|
||||
- UTSM 经 Limine boot module 读取(cmdline="fuck:config");DSK 经 FAT32 自读
|
||||
- DSK 侧根目录回退:先 `/SYSTEM/DESHAB64/FUCK`,失败再试根目录 `FUCK`
|
||||
|
||||
**已接入插桩点**:
|
||||
1. `[utsm]` 算法参数 → 5 个运行期全局变量覆盖编译期默认值(`max_segments=0x400` 已验证)
|
||||
2. `[drivers]` 驱动过滤 → `dsm_load_by_manifest_ex` 按名跳过(nvme/virtio_net/ath9k 被 `disabled by FUCK`)
|
||||
3. `[boot]` selftest/vmm/linux_guest → 三个启动开关
|
||||
4. DSK 侧 `[dsk]` show_logo/skip_login/mouse_init/netman + `[boot]` dev_mode
|
||||
|
||||
## 第二轮 3 智能体推进
|
||||
|
||||
### Agent A: net.c 日志刷屏 + mkfat32.ps1 加入 FUCK
|
||||
|
||||
1. `CODE/UTSM/kernel/net.c`:删除 `net_tx_impl` 中每包 `log_hex64("[NET] tx dispatch fn=")`
|
||||
2. `.build_tmp/mkfat32.ps1`:`$fileDefs` 末尾追加 `@{ Name83 = 'FUCK '; Path = ...FUCK }`
|
||||
|
||||
### Agent B: NVMe 高位 BAR 映射 + 4G+ BAR 失败根因
|
||||
|
||||
**现状核实**:`paging.c`/`mmio.c`/`mm.h`/`paging.h` 均已完整可用
|
||||
|
||||
**4G+ BAR 失败根因**:
|
||||
1. Limine HHDM 保证覆盖 RAM 但不保证覆盖高位 PCI MMIO 洞
|
||||
2. HHDM 映射是 WB cacheable,MMIO 需要 PCD|PWT(UC)属性
|
||||
|
||||
**mm_map_mmio 设计**(`CODE/UTSM/mm/mmio.c` + `CODE/UTSM/include/utsm/mm.h`):
|
||||
- 4 级页表(LA57 拒绝),运行时扫描 PML4[256..510] 找空闲槽(512GiB)
|
||||
- 叶子 PTE = `P|RW|PCD|PWT`(UC);map/unmap 均 `invlpg`
|
||||
- 冲突:walk 撞大页→失败;PTE 已 present→回滚;unmap 只清自己建的 4K PTE
|
||||
- 懒初始化(首次 map 时读 CR3/HHDM)
|
||||
|
||||
**kernel_api 追加**:`mmio`@+0xB0(并行 agent)、`mm_map_mmio`@+0xB8、`mm_unmap_mmio`@+0xC0
|
||||
|
||||
**dkm_shared.h 修复**:末尾追加 `mmio`/`mm_map_mmio`/`mm_unmap_mmio` 三个字段
|
||||
|
||||
### Agent C: NVMe 驱动 bug 修复
|
||||
|
||||
**三个 bug**:
|
||||
1. Create IOCQ/IOSQ 的 **CDW10 高低半字写反**:Spec 规定 `CDW10 = QSIZE[31:16] | QID[15:0]`,原代码 `(1u << 16) | (IO_QSIZE - 1u)` 把 QID 放到高半字
|
||||
2. **错误码丢失 SCT**:`return (int)sc` 在 SC=0/SCT≠0 时返回 0 → 改为 `return (int)(sc | (sct << 8))`
|
||||
3. **Read opcode 误为 Flush**:`NVME_IO_READ=0x00` 应为 `0x02`(NVM 命令集:00h=Flush, 01h=Write, 02h=Read)
|
||||
|
||||
**修复后验证**:`map_mmio` 高位 BAR 映射成功 → admin/IO queue live → READ LBA0 rc=0,DESHABNVME0 签名验证通过 → nvme0 block provider 注册
|
||||
|
||||
### Agent D: desktop 集成 Linux 命令为应用图标
|
||||
|
||||
**修改文件**:`CODE/tools/desktop_app.h`, `CODE/desktop/main.c`
|
||||
|
||||
- `app_descriptor` 增加 `linux_cmd` 字段
|
||||
- `MAX_APPS` 8→16、`MAX_ICONS` 8→16
|
||||
- `LINUXAPP.CNF`(8.3名 LINUXAPPCNF):格式 `显示名|linux命令`
|
||||
- 缺失时回退默认 NEOFETCH+HTOP
|
||||
- `lnx_on_create`:同步 `exec()` 阻塞 → 输出经 ANSI CSI 剥离/`^M` 忽略/`\t` 展开后一次性追加
|
||||
- `draw_icon_linux`:暗底 + 霓虹绿 `>_`
|
||||
|
||||
### Agent E: PS/2 鼠标完整实现
|
||||
|
||||
**修改文件**:`CODE/mouse/main.c`(从安全 stub 重写为完整实现,318 行)
|
||||
|
||||
**初始化序列**:ps2_drain → 读配置字节 → 启用 AUX → 复位 → Set Defaults → 采样率 100 → 分辨率 2 → 启用数据报告
|
||||
|
||||
**IRQ12 包解码**:经 `api->irq_register(12, handler)`;读 0x60 前查 AUX 位;3 字节包解码(同步位验证、溢出检测、9 位有符号位移合成);坐标钳位到 framebuffer 边界
|
||||
|
||||
**`mouse_state_t`**(导出 BSS 符号,ABI v1):magic/version/x/y/buttons/packet_count/overflow_count/max_x/max_y。另提供 `mouse_poll_state()` 只读快照
|
||||
|
||||
**handler 存活性**:只注册、不解屏蔽 PIC、不 sti。DSK 用同一块 1MB `ibuf` 加载所有模块,mouseInit 返回后镜像被覆盖
|
||||
|
||||
## 整合构建 + QEMU 验证
|
||||
|
||||
**desktop.elf 加载失败修复**:BSS 段膨胀(8 个 Linux 窗口槽 + 16KB 缓冲 + MAX_APPS 翻倍)导致 memsz span 1.66MB 超过 `ibuf[1048576]`(1MB)。修复:`ibuf` 扩大到 2MB
|
||||
|
||||
**端到端验证结果**:UTSM+FUCK → 14 驱动(NVMe 高位 BAR 映射成功)→ SELFTEST PASS → VMM 优雅降级 → DSK → FUCK 根目录回退命中 → mouseInit → netman(DHCP 10.0.2.15 + ARP + DNS 解析成功)→ FirstInit 账户卡片
|
||||
|
||||
**已知遗留**:DSK 加载偶发 `ELF rejected`(AHCI 单扇区读取偶发超时,重跑即可恢复)
|
||||
|
||||
## host DKM/框架层发现的问题(未改,仅报告)
|
||||
|
||||
1. `e1000.c` `e1000_tx` 每包 3 行 `raw_log` 串口打印,TX 吞吐被压到 KB/s 级
|
||||
2. `vmexit.c` `maybe_inject_irq` 在 IMR mask 时直接丢弃 pending IRQ,guest mask IRQ6 可能丢一次中断
|
||||
3. MAC 共用架构限制:guest virtio-net 回填 host e1000 的 MAC,QEMU slirp 下 host/guest 同 MAC 同租约
|
||||
@@ -0,0 +1,119 @@
|
||||
# Review Contexts and Multi-Agent Progression
|
||||
|
||||
> **Workspace:** d:\Code\Deshab
|
||||
|
||||
---
|
||||
|
||||
## 第一轮 5 智能体推进
|
||||
|
||||
### Agent A: virtio-net 数据路径重写
|
||||
|
||||
**核心 bug**:TX 全坏根因——`net_gather_frame` 原判断 `len > VIRTIO_NET_HDR_LEN` 才跳过头,Linux virtio-net 把 10 字节 hdr 作为独立描述符(len==10)条件不成立 → hdr 拼入待发帧 → 坏包
|
||||
|
||||
**修改**:`CODE/UTSM/vmm/virtio_net.c` 唯一改动,重写 RX/TX 数据路径核心函数 + 统计
|
||||
|
||||
**TX**:guest QUEUE_NOTIFY(1) → `net_handle_tx` → `net_gather_frame` 跳 hdr、拼接链到 2048B scratch(超容量整帧丢弃)→ `net->tx(bound_dev)` → bump used → IRQ6
|
||||
|
||||
**RX**:1kHz preemption timer → `virtio_net_poll` → `net_handle_rx`:`net_rx_data_region` 解析两种布局(hdr 独立 2 段、hdr+data 同段),校验 W flag;有 buffer 时 `rx_poll` 填入;无包不消耗 buffer;guest 无 buffer 时主动收包丢弃防 e1000 ring 堵死;异常 buffer len=0 回执;单次 32 帧 budget
|
||||
|
||||
**统计**:rx_filled / rx_drop_nobuf / rx_badbuf / tx_sent / tx_drop,每 512 事件串口一行
|
||||
|
||||
**host DKM 发现的问题**(未改):
|
||||
1. `e1000.c` `e1000_tx` 每包 3 行 `raw_log` 串口打印 → TX 吞吐被压到 KB/s 级
|
||||
2. `vmexit.c` `maybe_inject_irq` 在 IMR mask 时直接丢弃 pending IRQ
|
||||
3. MAC 共用架构限制:guest virtio-net 回填 host e1000 的 MAC
|
||||
|
||||
### Agent B: 4G+ BAR 失败根因 + mm_map_mmio
|
||||
|
||||
**根因**:
|
||||
1. Limine HHDM 保证覆盖 RAM 但不保证覆盖高位 PCI MMIO 洞(QEMU/OVMF 把 64-bit BAR 放到 ~48GiB 附近)
|
||||
2. HHDM 映射是 WB cacheable,MMIO 需要 PCD|PWT(UC)属性
|
||||
|
||||
**mm_map_mmio**(`CODE/UTSM/mm/mmio.c` + `CODE/UTSM/include/utsm/mm.h`):
|
||||
- 4 级页表(LA57 拒绝),运行时扫描 PML4[256..510] 找空闲槽(512GiB)
|
||||
- 叶子 PTE = `P|RW|PCD|PWT`(UC);map/unmap 均 `invlpg`
|
||||
- 冲突:walk 撞大页→失败;PTE 已 present→回滚
|
||||
- 懒初始化(首次 map 时读 CR3/HHDM)
|
||||
|
||||
**kernel_api 追加**:`mmio`@+0xB0(并行 agent)、`mm_map_mmio`@+0xB8、`mm_unmap_mmio`@+0xC0
|
||||
|
||||
**dkm_shared.h 修复**:末尾追加 `mmio`/`mm_map_mmio`/`mm_unmap_mmio` 三个字段
|
||||
|
||||
**并行 agent 撞车处理**:另一 agent 创建了 `paging.c/h`(`dkm_mmio_api`:is_mapped/map_mmio/cr3,HHDM 空洞原地补 4K UC 页)并重写了 nvme.c。两套接口并存不冲突:paging.c 在 HHDM 槽内补页;mmio.c 用独立空闲槽,独有 unmap 和"HHDM 已被 WB 大页覆盖时的 UC 属性修正"能力
|
||||
|
||||
### Agent C: desktop 集成 Linux 命令为应用图标
|
||||
|
||||
**修改文件**:`CODE/tools/desktop_app.h`, `CODE/desktop/main.c`
|
||||
|
||||
- `app_descriptor` 增加 `linux_cmd` 字段(互斥:elf_name 优先,仅设 linux_cmd 时由内置终端窗口承载)
|
||||
- `MAX_APPS` 8→16、`MAX_ICONS` 8→16
|
||||
- `LINUXAPP.CNF`(8.3名 LINUXAPPCNF):格式 `显示名|linux命令`
|
||||
- 缺失时回退默认 NEOFETCH+HTOP
|
||||
- `lnx_on_create`:bash_reset → 标题 → `$ <cmd>` 回显 → 同步 `exec()` 阻塞 → 输出经 ANSI CSI 剥离/`^M` 忽略/`\t` 展开后一次性追加 → `[exit N]`
|
||||
- `draw_icon_linux`:暗底 + 霓虹绿 `>_`
|
||||
|
||||
**接口偏差**:任务描述的回调式 `exec(..., out_cb, err_cb, ...)` 不存在,真实接口是缓冲式 `exec(path, argc, argv, stdout_buf, cap, &len, &exit_code)`
|
||||
|
||||
**遗留风险**:exec 期间 UI 完全冻结;stdout 16KB 截断;非 ASCII 字节钳为空格;htop/top 等交互式 TUI 会阻塞到超时
|
||||
|
||||
### Agent D: NVMe 驱动 bug 修复
|
||||
|
||||
**三个 bug**:
|
||||
1. Create IOCQ/IOSQ 的 **CDW10 高低半字写反**:Spec 规定 `CDW10 = QSIZE[31:16] | QID[15:0]`,原代码把 QID 放到高半字 → QEMU 实际创建 CQ63(2 项)→ Create IOSQ 引用 CQID=1 不存在 → `CQID_INVALID`
|
||||
2. **错误码丢失 SCT**:`return (int)sc` 在 SC=0/SCT≠0 时返回 0 → 改为 `return (int)(sc | (sct << 8))`
|
||||
3. **Read opcode 误为 Flush**:`NVME_IO_READ=0x00` 应为 `0x02`
|
||||
|
||||
**修复后**:`map_mmio` 高位 BAR 映射成功 → admin/IO queue live → READ LBA0 rc=0,DESHABNVME0 签名验证通过 → nvme0 block provider 注册
|
||||
|
||||
### Agent E: PS/2 鼠标完整实现
|
||||
|
||||
**修改文件**:`CODE/mouse/main.c`(从安全 stub 重写为完整实现,318 行)
|
||||
|
||||
**初始化序列**:ps2_drain → 读配置字节 → 启用 AUX → 复位 → Set Defaults → 采样率 100 → 分辨率 2 → 启用数据报告
|
||||
|
||||
**IRQ12 包解码**:经 `api->irq_register(12, handler)`;读 0x60 前查 AUX 位(键盘数据留给键盘路径);3 字节包解码(同步位验证、溢出检测、9 位有符号位移合成);坐标钳位到 framebuffer 边界
|
||||
|
||||
**`mouse_state_t`**(导出 BSS 符号,ABI v1):magic/version/x/y/buttons/packet_count/overflow_count/max_x/max_y。另提供 `mouse_poll_state()` 只读快照
|
||||
|
||||
**handler 存活性**:只注册、不解屏蔽 PIC、不 sti。DSK 用同一块 1MB `ibuf` 加载所有模块,mouseInit 返回后镜像被覆盖
|
||||
|
||||
**兼容性**:FirstInit/desktop 均自带幂等重初始化 + AUX 位感知轮询,netman 不碰 0x60/0x64
|
||||
|
||||
## 第二轮 3 智能体推进
|
||||
|
||||
### Agent A: net.c 日志刷屏 + mkfat32.ps1 加入 FUCK
|
||||
|
||||
1. `CODE/UTSM/kernel/net.c`:删除 `net_tx_impl` 中每包 `log_hex64("[NET] tx dispatch fn=")`
|
||||
2. `.build_tmp/mkfat32.ps1`:`$fileDefs` 末尾追加 `@{ Name83 = 'FUCK '; Path = ...FUCK }`
|
||||
|
||||
### Agent B: Deaicup 运行环境决策
|
||||
|
||||
**结论**:推荐路径 B(Linux guest 内 egui 软件渲染 + IPC 拉帧到 Deshab 桌面窗口,类 WSLg)
|
||||
|
||||
**依据**:Deaicup 是 eframe 0.27.2 应用,wgpu/glow 双 GPU 后端在无 GPU 环境均不可用;HTTPS 图片加载恰是 Linux guest 已有能力。需新增显示 SHM(800×600 RGBA 1.83MB,建议新 GPA 8MiB)+ 输入转发 + 桌面远程窗口
|
||||
|
||||
### Agent C: NVMe 全链路验证
|
||||
|
||||
**已核实文件完整可用**:
|
||||
- `paging.c`:`is_mapped` 四级页表只读 walk + `map_mmio` HHDM 空洞补 4K UC 页 + `cr3`
|
||||
- `mmio.c`:高半部 PML4[256..510] 扫空闲槽做独立 MMIO 窗口 + bump 分配 + 冲突回滚
|
||||
- `kernel_api.c`:`.mmio = paging_get_api()`、`.mm_map_mmio`、`.mm_unmap_mmio` 均在 `dkm_fill_platform_info` 填充
|
||||
- `nvme.c`:完整实现到 block provider(探测→高位 BAR 映射→控制器初始化→admin/IO queue→READ LBA0→nvme0 block provider 注册)
|
||||
|
||||
**NVMe 驱动状态**:
|
||||
- 探测:按 class code `01/08/02` 全总线扫描 → 64-bit BAR0 解析 → PCI MEM+BUSM 使能
|
||||
- 高位 BAR:`is_mapped` 四级 walk 零 #PF 风险核实 → 未覆盖则 `map_mmio(bar_phys, 8K)` 补 UC 页
|
||||
- 控制器初始化:CAP/VS 校验 → EN=0 等 RDY=0 → AQA/ASQ/ACQ → CC=0x00460001 → RDY=1
|
||||
- Admin queue:Identify Controller + Identify Namespace(校验 9≤lbads≤12)
|
||||
- IO queue:Create IO CQ/SQ(qid=1、64 项、轮询无中断)
|
||||
- READ:单 PRP1 + 4K bounce、CQE phase bit 轮询 + TSC 超时
|
||||
|
||||
**仍缺**:写路径、PRP list(>4K 传输)、MSI/MSI-X、多 NS/多控制器
|
||||
|
||||
## 整合构建 + QEMU 验证
|
||||
|
||||
**desktop.elf 加载失败修复**:BSS 段膨胀(8 个 Linux 窗口槽 + 16KB 缓冲 + MAX_APPS 翻倍)导致 memsz span 1.66MB 超过 `ibuf[1048576]`。修复:`ibuf` 扩大到 2MB
|
||||
|
||||
**QEMU 验证**:UTSM+FUCK → 14 驱动(NVMe 高位 BAR 映射成功)→ SELFTEST PASS → VMM 优雅降级 → DSK → FUCK 根目录回退 → mouseInit → netman(DHCP 10.0.2.15 + ARP + DNS 解析成功)→ FirstInit
|
||||
|
||||
**已知遗留**:DSK 加载偶发 `ELF rejected`(AHCI 单扇区读取偶发超时)
|
||||
@@ -0,0 +1,92 @@
|
||||
# 自定义内核算法与驱动配置
|
||||
|
||||
> **Workspace:** d:\Code\Deshab
|
||||
|
||||
---
|
||||
|
||||
## 任务目标
|
||||
|
||||
为系统增加"自定义内核"算法,支持设置内核各项算法和驱动配置。内核启动时获取 `SYSTEM/system/deshab64/FUCK` 文件里的配置信息,启用相关算法和驱动。
|
||||
|
||||
## 现状分析
|
||||
|
||||
- **FUCK 文件**已存在(当前为空),位于 ESP 的 `/system/deshab64/FUCK`
|
||||
- **两个内核**:UTSM(首阶段)→ DSK(主内核),各自有独立的 FAT32 解析器
|
||||
- **读取机制**:UTSM 和 DSK 的 FAT32 解析器目前只支持根目录 8.3 文件名,读 FUCK 需扩展子目录路径解析
|
||||
- **可插桩点**:UTSM 启动流程(arena/dma/drr/utsm_init/dkm manifest/selftest/VMM+Linux)+ DSK 启动流程(firstInit/dev_mode/login/desktop)
|
||||
- **算法参数**:`config.h` 编译期 `#define`(段表 1024、PCKC 8 密钥、dirty shard 1024 页、DRR 应急池 64KB 等)
|
||||
|
||||
## 配置格式
|
||||
|
||||
INI 分区式(`[section]` + `key=value`,`#`/`;` 注释)
|
||||
|
||||
### 四类配置
|
||||
|
||||
| Section | 键示例 | 说明 |
|
||||
|---------|--------|------|
|
||||
| `[boot]` | selftest=1, vmm=1, linux_guest=1 | 启动流程开关 |
|
||||
| `[drivers]` | nvme=0, virtio_net=0, ath9k=0 | 驱动加载开关 |
|
||||
| `[utsm]` | max_segments=1024, max_capabilities=64, max_pckc_keys=8, arena_size=0x100000, dirty_shard_pages=1024 | 算法参数(运行期全局变量覆盖编译期默认值) |
|
||||
| `[dsk]` | show_logo=1, skip_login=0, mouse_init=1, netman=1, dev_mode=0 | DSK 行为开关 |
|
||||
|
||||
## 新增文件
|
||||
|
||||
| 文件 | 说明 |
|
||||
|------|------|
|
||||
| `CODE/UTSM/kernel/ini_parser.h` | INI 配置解析器头文件(`ini_config` 结构体 + `ini_parse/ini_get/ini_get_int/ini_get_bool` 接口) |
|
||||
| `CODE/UTSM/kernel/ini_parser.c` | INI 配置解析器实现(freestanding,无堆分配,无 libc 依赖,最多 64 条配置项) |
|
||||
|
||||
## 修改文件
|
||||
|
||||
### UTSM 侧
|
||||
|
||||
| 文件 | 改动 |
|
||||
|------|------|
|
||||
| `kernel/main.c` | `utsm_load_fuck_config()`(通过 Limine boot module cmdline=`fuck:config` 读取)、运行期全局变量定义、`utsm_apply_config()`、`kernel_main()` 全流程插桩 |
|
||||
| `kernel/dsk_loader.c` | `fat32_find_in_dir()` 子目录项查找 + `fat32_read_path()` 子目录路径遍历 |
|
||||
| `include/utsm/config.h` | 编译期常量改为运行期全局变量声明(`g_utsm_max_segments` 等)+ 保留旧宏名兼容 |
|
||||
| `core/utsm_init.c` | 使用 `g_utsm_max_segments` 运行期变量替代 `UTSM_MAX_SEGMENTS` 宏 |
|
||||
|
||||
### DKM 侧
|
||||
|
||||
| 文件 | 改动 |
|
||||
|------|------|
|
||||
| `dkm/manifest.c` | `dsm_load_by_manifest()` → `dsm_load_by_manifest_ex(cfg)`,驱动循环中增加 `[drivers]` 开关检查 |
|
||||
|
||||
### DSK 侧
|
||||
|
||||
| 文件 | 改动 |
|
||||
|------|------|
|
||||
| `dsk/main.c` | 内嵌 `dsk_ini_*` INI 解析器 + `fat32_find_in_dir()` + `fat32_read_path()` + `dsk_spinner_and_check()` 全流程插桩(FUCK 读取 + show_logo/skip_login/mouse_init/netman/dev_mode 开关) |
|
||||
|
||||
### 系统文件
|
||||
|
||||
| 文件 | 改动 |
|
||||
|------|------|
|
||||
| `SYSTEM/system/deshab64/FUCK` | 写入 INI 格式默认配置(`[boot]/[drivers]/[utsm]/[dsk]` 四分区) |
|
||||
| `SYSTEM/limine/limine.conf` | 添加 `MODULE_PATH=boot():/system/deshab64/FUCK` + `MODULE_CMDLINE=fuck:config` |
|
||||
|
||||
### 文档
|
||||
|
||||
| 文件 | 改动 |
|
||||
|------|------|
|
||||
| `CLAUDE.md` | 核心架构新增 FUCK 条目 + 重要文件新增 FUCK 和 ini_parser 说明 |
|
||||
| `docs/ARCHITECTURE.md` | 启动链路图标注配置读取点 + 新增 §10"内核启动配置(FUCK)"章节 |
|
||||
|
||||
## 读取通道
|
||||
|
||||
- **UTSM**:经 Limine boot module(`limine.conf` 已注册 `module_cmdline: fuck:config`)
|
||||
- **DSK**:经 FAT32 自读(AHCI block provider 在 UTSM 读配置时尚未加载,故不能用同一通道)。DSK 侧有根目录回退:先 `/SYSTEM/DESHAB64/FUCK`,失败再试根目录 `FUCK`
|
||||
|
||||
## 已接入的真实插桩点
|
||||
|
||||
1. `[utsm]` 算法参数 → 5 个运行期全局变量覆盖编译期默认值;`max_segments` 被 `core/utsm_init.c` 真实消费(串口确认 `max_segments=0x400`)
|
||||
2. `[drivers]` 驱动过滤 → `dsm_load_by_manifest_ex` 按名跳过(串口确认 nvme/virtio_net/ath9k 被 `disabled by FUCK`)
|
||||
3. `[boot]` selftest/vmm/linux_guest → 三个启动开关均生效
|
||||
4. DSK 侧 `[dsk]` show_logo/skip_login/mouse_init/netman + `[boot]` dev_mode
|
||||
|
||||
## 需要用户决定的事项
|
||||
|
||||
1. **SATA 镜像布局**:`mkfat32.ps1` 生成的测试盘是扁平布局,无 `/system/deshab64/` 路径,DSK 侧配置在 SATA 场景暂时只能回退默认值
|
||||
2. **算法参数消费点**:`max_capabilities/max_pckc_keys/arena_size/dirty_shard_pages` 已解析到全局变量,但消费改造未做,目前仅 `max_segments` 真实生效
|
||||
3. **已定义但未接线的键**:`[dsk] default_shell`、`[utsm] drr_*`、`vmm.linux_memory_mb` 等——框架可查,插桩点待用户明确语义后接入
|
||||
Reference in New Issue
Block a user