Skip to content

[Feature] QEMU虚拟设备测试和模拟:为Z版本的发布做CI的自动化测试 #11972

Open

Description

@CYFS3

QEMU 虚拟设备测试与覆盖率统计清单

背景

根据 RT-Thread PR #11955 的版本发布规划,Z 版本主要依靠 QEMU + CI 自动测试内核、组件及仿真支持范围内的驱动,并汇总测试覆盖率、通过率和已知问题,为维护者决定是否发布提供依据。

需要QEMU提供对应框架的模拟设备,用来自动检查对应的框架驱动层的正常驱动。以麦克风为例子:只需要有一个测试用例注册好虚拟的ops,仿造一个“模拟麦克风”,把接口入参都测试完整即可。

utest 与 QEMU 支持的情况

Activity

  1. github-actions commented on Nov 2, 2026

    @github-actions

    如需认领并处理此 Issue,请评论 /claim。

    To claim and work on this issue, comment /claim.

  2. Yunlk commented on Nov 2, 2026

    @Yunlk
    Contributor

    /claim

  3. github-actions commented on Nov 2, 2026

    @github-actions

    @Yunlk has claimed this issue.

  4. cms19859230182-lang commented on Nov 2, 2026

    @cms19859230182-lang
    Contributor

    想认领本 issue 里 SPI 这一格的 QEMU 虚拟设备(utest 回环已有,QEMU 未勾)。
    会先对照 audio 模拟麦克风的做法,做最小可跑的虚拟 SPI ops+用例,在 QEMU 上验证后再提 PR。
    若这块已有人在做请说一声,我改认别的空格。

  5. usualtreee commented on Nov 2, 2026

    @usualtreee
    Contributor

    想认领本 issue 里 DAC 的 utest 子项,本次不包含 QEMU 外设模型。

    计划参照 #11974 的模拟 ADC 设备思路,注册最小 rt_dac_ops,覆盖设备注册、通道 enable/disable、rt_dac_write() 数值传递以及缺失可选回调时的返回值,并在 qemu-vexpress-a9 上验证后提 PR。

    若这块已有人在做请说一声,我改认其他子项。

  6. cms19859230182-lang commented on Nov 2, 2026

    @cms19859230182-lang
    Contributor

    /claim

  7. usualtreee commented on Nov 3, 2026

    @usualtreee
    Contributor

    想认领本 issue 里 I2C 的 utest 子项,本次不包含 QEMU 外设模型。

    计划参照 #11974、#11976 的模拟设备思路,注册最小 rt_i2c_bus_device 与 rt_i2c_bus_device_ops,覆盖总线注册/查找、消息参数透传、多消息传输、错误返回、10 位地址标志及空消息边界,并在 qemu-vexpress-a9 上验证后提 PR。

    若这块已有人在做请说一声,我改认其他子项。

  8. BernardXiong commented on Nov 6, 2026

    @BernardXiong
    Member

    这个是需要增加 QEMU虚拟设备 ?这样的话会涉及到更改qemu代码,在其中增加虚拟设备?

  9. cms19859230182-lang commented on Nov 7, 2026

    @cms19859230182-lang
    Contributor

    这个是需要增加 QEMU虚拟设备 ?这样的话会涉及到更改qemu代码,在其中增加虚拟设备?

    熊老师,我们这个 SPI 测试是在 RT-Thread 内做软件回环,不需要改 QEMU。如果期望模拟真实外设,我们再稍微改改。

  10. reopened this on Nov 10, 2026
  11. Yunlk commented on Nov 11, 2026

    @Yunlk
    Contributor

    @BernardXiong 这个问题我可以答,因为 ADC 这一格已经做完了,有实测依据。

    不需要改 QEMU 代码

    issue 正文里其实已经写明了做法:

    只需要有一个测试用例注册好虚拟的 ops,仿造一个"模拟麦克风",把接口入参都测试完整即可。

    也就是说,"模拟设备"是在固件里注册的,不是在 QEMU 里加的。清单里 QEMU 那一列的含义是"这个用例能在 QEMU 上跑起来",不是"需要在 QEMU 里实现一个外设模型"。

    仓库里已有的先例就是 audio:

    components/drivers/audio/utest/tc_audio_drv_mic.c:106   static struct rt_audio_ops _mic_audio_ops = ...
    components/drivers/audio/utest/tc_audio_drv_mic.c:131   audio->ops = &_mic_audio_ops;
    components/drivers/audio/utest/tc_audio_drv_mic.c:132   rt_audio_register(audio, SOUND_MIC_DEVICE_NAME, ...);
    components/drivers/audio/utest/tc_audio_drv_mic.c:136   INIT_DEVICE_EXPORT(rt_hw_mic_init);
    

    整个 components/drivers/audio/utest/ 目录没有任何 QEMU 相关代码,跑在标准 qemu-vexpress-a9 上。

    ADC 这一格的做法(#11974)

    同样是固件内注册:

    static const struct rt_adc_ops adc_tc_ops = { ... };
    rt_hw_adc_register(&adc_tc_dev, ADC_TC_NAME, &adc_tc_ops, &adc_tc_ctx);
    • 文件里没有任何 QEMU 依赖(grep qemu 无匹配)
    • 跑的是未修改的 qemu-vexpress-a9 + 标准 qemu-system-arm
    • 覆盖注册、enable/disable、convert 失败返回 0、voltage 换算、缺 hook 时 -RT_ENOSYS

    所以 SPI 那边 cms19859230182-lang 说的"软件回环、不改 QEMU"是对的,和 ADC 的思路一致。

    需要区分两种情况

    做法 改不改 QEMU 测的是什么
    固件内注册模拟 ops 不改 框架层:设备注册、ops 调度、参数透传、错误码
    QEMU 里加外设模型 要改 真实寄存器的读写时序

    issue 标题和正文指向的是前者("自动检查对应的框架驱动层的正常驱动")。后者是另一个量级的工作,需要 QEMU fork 或上游补丁,不适合塞进这个清单。

    建议

    清单里 QEMU 那一列如果指的是"能在 QEMU 上跑",那 ADC/DAC/I2C/SPI 这几项用上面这种做法就能勾上,不需要动 QEMU。如果您的原意是"要在 QEMU 里有真实外设模型",那这一列的定义需要改一下,而且工作量会大一个数量级——建议先把口径定下来再让其他人继续认领,否则大家按不同理解做出来会对不齐。

    我这边 ADC 按前者做的(#11974),DAC/I2C 两位认领的也是同一思路,目前没有人在碰 QEMU 源码。

  12. Rbb666 commented on Nov 12, 2026

    @Rbb666
    Member

    这个是需要增加 QEMU虚拟设备 ?这样的话会涉及到更改qemu代码,在其中增加虚拟设备?

    主要的想法是用虚拟设备把RTT的驱动框架都测试一遍,方便后面发版本CI测试使用

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions