Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

验证覆盖范围

ws63-qemu「覆盖」分三层:持续 CI 验证(每次提交都跑)、外设建模覆盖(35/35 建模)、明确的边界 (已知不覆盖)。本文列出各层的具体清单。怎么自己跑这些测试见 运行测试。

持续验证(CI)

ci.yml 在每次 push / PR 上跑(Ubuntu),门禁全绿才算通过:

  1. 构建 qemu-system-riscv32(带 WS63 机器);
  2. 机器注册 sanity(-M help 含 ws63);
  3. C SDK 外设样例(csdk-test.sh,见下,5/5,使用仓库内预构建 fixture);
  4. ws63-rs 冒烟(smoke-test.sh,见下,进阶/CI 覆盖);
  5. 寄存器级 qtest(qtest.sh,免启动驱动 GPIO/UART/timer/INTC/DMA,4/4)。

release.yml(打 v* tag 时)额外做全新构建 + 冒烟,然后发布二进制。 qtest-matrix.yml 在每个有 patches/<tag>/ 的 QEMU 版本上跑 qtest(v9.2.4 + v10.0.0 + v10.2.3 + v11.0.1 全绿)。

C SDK 外设样例

scripts/csdk-test.sh 启动 tests/csdk/ 里预编译的 fbb_ws63 C SDK 厂商固件并断言各自的 UART 成功标志—— 用真实厂商固件交叉验证外设模型。纯净 + 免 SDK/工具链(用已提交的 fixture)。当前 5/5 绿:

样例验证的外设路径成功标志
tcxo.elfTCXO ms/us 计数器tcxo get ms work normall
systick.elfSysTick 计数器systick get ms work normall
adc.elfLSADC 标定 + RX-FIFO 转换读voltage: N mv
dma.elfDMA v151 内存搬运 + 完成dma memory copy test succ
(NV overlay)分区表解析 + NV 读启动到调度器且无 upg ...flash_start_addr fail

已记录但未断言的样例(tests/csdk/manifest.txt):

  • timer —— 非外设模型问题。硬件定时器模型正确(channel 0 / IRQ 26 即 LiteOS systick 正常触发), 但 LiteOS 软件定时器任务层没走到 uapi_timer_start,属上层任务问题。
  • watchdog —— 看门狗 API 功能可用(喂狗→重装、超时→复位;健康样例干净跑到调度器),但样例唯一的成功 标志是中断模式的 "watchdog kick timeout!" 回调,而该回调未建模(见 已知边界), 故无 UART marker 可断言。

重新生成 fixture:scripts/build-csdk-samples.sh(从 fbb_ws63 checkout 选一个 CONFIG_SAMPLE_SUPPORT_*、 干净构建、strip 到 ~400 KB)。

ws63-rs(Rust)冒烟

scripts/smoke-test.sh(真值见脚本)属于进阶/CI 验证路径,入门不需要相邻的 hisi-riscv-rs checkout。每条都是端到端、 断言串口/MMIO 标志:

固件验证什么成功判据
blinkyGPIO0 输出翻转 + xlinx/启动正确0 非法指令陷阱 + 观察到 GPIO 翻转(pin0 拉高)
uart_hello自定义 UART0 TX串口打印 Hello from WS63 on QEMU!
timer_irqTIMER_0→IRQ 26→ISR(mie 类中断)串口 timer irq #N 递增 + OK: timer interrupts delivered
gpio_irqGPIO0→IRQ 33→ISR(≥32 自定义本地中断)串口 gpio irq #N + OK: custom local IRQ (>=32) delivered
reset_demosoftware_reset() + reset_reason() 往返重启 ≥2 次 + OK: software reset observed(reset_reason=Software)
dma_loopbackmem↔SPI0 外设 DMA + SDMA 通道DMA LOOPBACK TEST: PASS
wifi_blob_link链接 libwifi_rom_data.a + 重定位BLOB LINK SPIKE: PASS
rf_port_demows63-rf-rs porting 层 + blob 经其链接RF PORT DEMO: PASS
sched_selftestws63-rf-rs 协作调度器(上下文切换 + 信号量)SCHED SELFTEST: PASS
semihost_selftestsemihosting 退出码(M/F/Zicsr 自检)QEMU 退出码 0(免解析 UART;见 运行选项 SEMIHOST)

外设建模覆盖

WS63.svd 的全部 35 个外设均已建模(无裸 catch-all 黑洞)。分两档,完整矩阵见 外设建模矩阵:

  • 行为完整(真实数据/计时/中断/回环):CPU+内存、xlinx ISA、UART0/1/2(TX+RX)、TIMER×3、GPIO+pinmux、 中断控制器(26–31 + ≥32,含 LOCIPRI/PRITHD)、DMA/SDMA、RTC、WDT、I2C0/1、SPI0/1、I2S、LSADC、TSENSOR、 EFUSE、TRNG、TCXO、SFC、CLDO_CRG 时钟门控。
  • 配置影子(可读回、无副作用):RF_WB_CTL、SHARE_MEM、SPACC/PKE/KM、部分 SYS_CTL1/IO_CONFIG 位等。

明确不在覆盖范围内

项状态原因
Wi-Fi / BT / SLE 射频(PHY/RF)❌ 不仿物理边界
C SDK 含 BT/WiFi app 的深层初始化❌ 崩于 ROM 数据墙vtable/NV/efuse/RF 标定无 dump,需裁剪任务
逐芯片出厂标定 NV(xo_trim 等)❌ 固有缺失生产时烧录,任何构建产物都不含
真实 AES/SHA/RSA(SPACC v2)❌ 影子描述符协议复杂且未被触发
看门狗中断模式超时回调❌ 未建模需 vCPU 同步的 PC 注入
周期精确时序❌ 近似TCG 非微架构;ICOUNT 仅 IPC=1 近似
双核 / 第二 hart❌ 不适用WS63 单核(已核实)
snapshot / migration❌ 未投入按需

这些边界的展开讨论见 已知边界与非目标。

相关