中断路由 (B7): - apic.drv: LAPIC enable + IOAPIC重定向表编程(MADT ISO感知) + apic_route/apic_route_legacy/apic_diag开关 - UTSM: LAPIC EOI钩子(register_apic_eoi, ABI尾部追加) + IDT 0-255全覆盖 + spurious 0xFF特判 - FUCK: apic_route=0默认PIC(零回归) / =1 IOAPIC->LAPIC接管(失败完整降级) / legacy放开IRQ1/12/11 存储: - nvme.drv: 写路径 + PRP list + 读回校验 + MSI/MSI-X中断驱动(nvme_msi开关, 回退纯轮询) - build.ps1: apic.drv纳入构建(原为预置二进制) 网络: - virtio_net: virtqueue RX/TX + netdev注册 + DHCP自测(slirp真实OFFER) PE兼容层: - pe_shim: guest->host指针转换(g_emu_mem_base + gp()) + shim fn32列补齐 - gen_pe.py: PE32+ RVA偏置修复(BUG-004) + cmd.exe生成 - desktop_app.h: da_mouse_poll先判AUX位 + da_mouse_init冲刷残留(BUG-003/008) - shell: Ctrl修饰键跟踪(BUG-001) + g_run_image扩至1MB(BUG-002) QEMU测试套件: - 9用例全自动化(Run-All.ps1): boot-regression/driver-matrix/linux-compat/pe-compat/deaicup-e2e/userapps-matrix/network-e2e/performance-baseline/x86emu32-coverage - QemuTest.ps1公共库: 串口断言/monitor sendkey/screendump/HTTP服务器/并发隔离 文档: - CLAUDE.md: APIC/IOAPIC能力 + kernel_api暴露 + IRQ后端升级状态 - LESSONS_LEARNED.md: B7 LAPIC/IOAPIC经验教训(2条) - Bug记录.txt: BUG-20260801-001~008 + BUG-20260803-009(9条) - test-cases/*.md: 全部补充自动化脚本小节 - 桌面设计.md: .lnk快捷方式 + LINUXAPP.CNF Linux应用图标 - 系统开发策划.md: NVMe/virtio_net标完成 + B2/B7标已解决 + M2进度列
91 lines
3.8 KiB
Markdown
91 lines
3.8 KiB
Markdown
# 14 DKM 驱动功能矩阵
|
||
|
||
> 对应计划 Phase C3:每个驱动的加载、探测、功能验证点
|
||
|
||
## 状态: ⬜ PENDING
|
||
|
||
## 驱动清单
|
||
|
||
| # | 驱动 | stage | class | required | QEMU 参数 | 期望串口日志 | 功能验证点 | 状态 | Bug# |
|
||
|---|---|---|---|---|---|---|---|---|---|
|
||
| 1 | timer | 0 | timer | ✅ | 默认 | `[DKM:timer]` | 100ms busy-wait 精度 | ⬜ | |
|
||
| 2 | apic | 0 | interrupt | ✅ | 默认 | `[DKM:apic] MADT found` | LAPIC MMIO 只读 | ⬜ | |
|
||
| 3 | acpi | 0 | platform | ❌ | 默认 | `[DKM:acpi]` | RSDP/XSDT 枚举 | ⬜ | |
|
||
| 4 | pci | 0 | bus | ✅ | 默认 | `[DKM:pci]` | PCI config space 扫描 | ⬜ | |
|
||
| 5 | console_fb | 1 | console | ❌ | 默认 | `[DKM:console_fb]` | 淡蓝色背景清屏 | ⬜ | |
|
||
| 6 | ahci | 1 | storage | ❌ | +SATA 测试盘 | `[DKM:ahci] ahci0 registered` | LBA0 读取 | ⬜ | |
|
||
| 7 | nvme | 1 | storage | ❌ | `-device nvme` | `[DKM:nvme] 1b36:0010 found` | BAR0 读取(高位 MMIO 未解决则 SKIP) | ⏭ | |
|
||
| 8 | bootfs | 1 | fs | ✅ | 默认 | `[DKM:bootfs]` | Limine boot module FS | ⬜ | |
|
||
| 9 | vfs | 2 | fs-core | ✅ | 默认 | `[DKM:vfs]` | 挂载 bootfs | ⬜ | |
|
||
| 10 | fat32 | 2 | fs | ❌ | +SATA 测试盘 | `[DKM:fat32]` | BPB/FAT/目录项解析 | ⬜ | |
|
||
| 11 | devfs | 2 | fs | ❌ | 默认 | `[DKM:devfs]` | /dev/version, /dev/fb0 等 | ⬜ | |
|
||
| 12 | e1000 | 3 | net | ❌ | `-device e1000` | `tx=ready rx=ready` | DHCP + ping | ⬜ | |
|
||
| 13 | virtio_net | 3 | net | ❌ | `-device virtio-net-pci` | `[DKM:virtio_net] 1af4:1001 found` | capability 枚举 | ⬜ | |
|
||
| 14 | ath9k | 3 | net | ❌ | (QEMU 不支持 WiFi) | `no Atheros WiFi device found` | 跳过(QEMU 限制) | ⏭ | |
|
||
| 15 | ps2kbd | 3 | input | ❌ | 默认 | scan code 读取 | 输入回显 | ⬜ | |
|
||
|
||
## stage 加载顺序
|
||
|
||
```
|
||
stage 0 (platform): timer → apic → acpi → pci
|
||
stage 1 (boot): console_fb → ahci → nvme → bootfs
|
||
stage 2 (fs): vfs → fat32 → devfs
|
||
stage 3 (optional): e1000 → virtio_net → ath9k → ps2kbd
|
||
```
|
||
|
||
## 测试设备 QEMU 参数
|
||
|
||
### AHCI + FAT32 测试盘
|
||
|
||
```
|
||
-drive id=sata0,format=raw,file=.build_tmp/sata_fat32_dsk.img,if=none ^
|
||
-device ide-hd,drive=sata0,bus=ide.0 ^
|
||
```
|
||
|
||
### NVMe
|
||
|
||
```
|
||
-device nvme,drive=nvme0,serial=UTSMTEST ^
|
||
-drive id=nvme0,format=raw,file=.build_tmp/nvme_test.img,if=none ^
|
||
```
|
||
|
||
### e1000
|
||
|
||
```
|
||
-netdev user,id=net0 ^
|
||
-device e1000,netdev=net0,mac=52:54:00:12:34:56 ^
|
||
```
|
||
|
||
### virtio-net
|
||
|
||
```
|
||
-netdev user,id=net0 ^
|
||
-device virtio-net-pci,netdev=net0 ^
|
||
```
|
||
|
||
## 自动化脚本
|
||
|
||
[tests/qemu/driver-matrix.ps1](../../../tests/qemu/driver-matrix.ps1) 单次 QEMU 会话挂全设备
|
||
(SATA 测试盘 + NVMe 测试盘 + xHCI USB 盘 + e1000),断言 4 个 stage 共 16 个清单驱动的
|
||
加载顺序与功能锚点:
|
||
|
||
```powershell
|
||
.\tests\qemu\driver-matrix.ps1 # 复用现有镜像
|
||
.\tests\qemu\driver-matrix.ps1 -Build # 先全量构建再测
|
||
```
|
||
|
||
自动断言内容:
|
||
|
||
- 16 个 `driver ready` 锚点按 manifest 顺序(ath9k 走 FUCK 禁用路径,断言 `[DSM] driver disabled by FUCK`)
|
||
- 功能锚点:ahci/nvme block provider 注册、fat32 经块设备解析镜像、e1000 netdev+link、ps2kbd IRQ1、virtio_net 无设备降级
|
||
- NVMe 写路径回归:LBA0 签名识别 → write+flush+readback 逐字节校验(PRP2 + PRP list 两趟)→ 签名完好,且 ahci0=0 → nvme0=1 注册顺序
|
||
- `[DKM] external driver active` ≥ 15、`[DSM] stage end` × 4
|
||
|
||
已知限制(与上方一致):virtio_net 在 e1000-only 拓扑断言降级锚点;xhci USB MSC 枚举仅断言驱动就绪。
|
||
|
||
## 已知限制
|
||
|
||
- NVMe BAR0 在 QEMU 中常位于 4G 以上,当前 HHDM 不能安全访问,需 Phase 0 高位 MMIO 映射解决
|
||
- ath9k 在 QEMU 中无对应设备模拟,永远走 "not found" 路径
|
||
- 多个 NIC 同时挂载会改变 PCI 拓扑,可能影响 e1000 探测位置
|