Files
Deshab-OS/tests/qemu/driver-matrix.ps1
xyou a26866e339 feat: B7 APIC/IOAPIC接管 + NVMe写路径 + virtio_net virtqueue + PE兼容层修复 + QEMU测试套件全自动化
中断路由 (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进度列
2026-08-04 18:08:08 +08:00

101 lines
4.3 KiB
PowerShell
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.
#requires -Version 5.1
<#
.SYNOPSIS
driver-matrix — DKM 驱动功能矩阵(docs/RE/test-cases/driver-matrix.md)
.DESCRIPTION
单次 QEMU 会话挂全设备(SATA 测试盘 + NVMe 测试盘 + xHCI USB 盘 + e1000),
验证 4 个 stage 共 16 个清单驱动的加载顺序与功能锚点:
stage0: timer / apic / acpi / pci
stage1: console_fb / ahci / nvme / xhci / bootfs
stage2: vfs / fat32 / devfs
stage3: e1000 / virtio_net(无设备,降级) / ath9k(FUCK 禁用) / ps2kbd
已知限制(与文档一致):
- virtio_net 在无 virtio-net 设备时走 not-found 降级路径(断言降级锚点)
- ath9k 被 FUCK [drivers] ath9k=0 禁用(断言 DSM 禁用锚点;QEMU 无 WiFi 设备)
- xhci USB MSC 枚举在当前实现下可能失败,仅断言驱动就绪
退出码:全部通过 0,任一 FAIL 1。
#>
param([switch]$Build)
$ErrorActionPreference = 'Stop'
. (Join-Path $PSScriptRoot 'lib\QemuTest.ps1')
Initialize-QemuTest -Build:$Build
$result = New-TestCaseResult 'driver-matrix'
Write-Host "`n--- 全设备单会话驱动矩阵 ---"
$s = Start-QemuSession -Name 'driver-matrix' -MonitorPort 45502
try {
$hit = Wait-QemuLog -Session $s -Patterns @('[DSK] boot') -TimeoutSeconds 150
Start-Sleep -Seconds 2
$log = Read-QemuLogText $s.LogPath
$result.LogPath = $s.LogPath
# ---- stage 加载顺序(driver ready 锚点按 manifest 顺序) ----
Assert-QemuLog $result $log -Ordered @(
'[timer] driver ready',
'[apic] driver ready',
'[acpi] driver ready',
'[pci] driver ready',
'[console_fb] ready',
'[ahci] driver ready',
'[nvme] driver ready',
'[xhci] driver ready',
'[bootfs] driver ready',
'[vfs] driver ready',
'[fat32] driver ready',
'[devfs] driver ready',
'[e1000] driver ready',
'[virtio_net] driver ready',
'[kbd] driver ready',
'[UTSM] SELFTEST PASS'
)
# ---- 功能验证点 ----
Assert-QemuLog $result $log -MustContain @(
'[ahci] block provider index=', # ahci: ahci0 block provider 注册
'[nvme] block provider index=', # nvme: block provider 注册
'[fat32] using block provider image', # fat32: 经块设备解析测试镜像
'[e1000] netdev registered', # e1000: 注册 netdev
'[e1000] link=up', # e1000: 链路就绪
'[kbd] IRQ1 registered', # ps2kbd: IRQ1 注册
'[virtio_net] virtio-net device not found', # virtio_net: e1000-only 拓扑降级
'[DSM] driver disabled by FUCK' # ath9k: FUCK 禁用路径
)
# ---- NVMe 数据面回归(写路径):签名盘自检 + 写/刷/读回 + provider 序号 ----
Assert-QemuLog $result $log -MustContain @(
'[nvme] LBA0 signature OK', # LBA0 DESHABNVME0 签名识别(测试盘)
'[nvme] write+flush+readback verify OK', # 写→FLUSH→读回逐字节校验(PRP2 + PRP list 两趟)
'[nvme] LBA0 sig intact after write tests' # 写测试后 LBA0 签名未损坏
)
# ahci0=0 → nvme0=1 注册顺序([BLOCK] device registered → 名称 → index 三联行)
Assert-QemuLog $result $log -Ordered @(
'[INFO] ahci0',
'[BLOCK] index=0x0000000000000000',
'[INFO] nvme0',
'[BLOCK] index=0x0000000000000001'
)
Assert-QemuLog $result $log -CountPattern '[nvme] write+flush+readback verify OK' -MinCount 2
# ---- DSM 装载统计:16 个 manifest 驱动中 15 个 active(ath9k 禁用) ----
Assert-QemuLog $result $log -CountPattern '[DKM] external driver active' -MinCount 15
# ---- 4 个 stage 均完成 ----
Assert-QemuLog $result $log -CountPattern '[DSM] stage end' -MinCount 4
if ($hit) { Add-TestCheck $result '系统到达 DSK' 'PASS' }
else { Add-TestCheck $result '系统到达 DSK' 'FAIL' 'timeout waiting [DSK] boot' }
Add-TestNote $result 'ath9k: QEMU 无 WiFi 设备模拟,FUCK ath9k=0,走 DSM 禁用路径(文档第 14 行 ⏭)'
Add-TestNote $result 'xhci: USB MSC 枚举当前可能失败(已知限制),仅断言 [xhci] driver ready'
} finally {
Stop-QemuSession $s
}
Write-TestCaseResult $result
if ($result.Status -eq 'FAIL') { exit 1 } else { exit 0 }