Platform Device API¶
KUnit platform device API 用于测试 platform 设备。
- 
struct platform_device *kunit_platform_device_alloc(struct kunit *test, const char *name, int id)¶
- 分配 KUnit 测试管理的 platform 设备 
参数
- struct kunit *test
- 测试上下文 
- const char *name
- 要分配的 platform 设备的设备名称 
- int id
- 要分配的 platform 设备的标识符。 
描述
分配一个测试管理的 platform 设备。测试完成后,该设备将被释放。
返回
成功时返回已分配的 platform 设备,失败时返回 NULL。
- 
int kunit_platform_device_add(struct kunit *test, struct platform_device *pdev)¶
- 注册 KUnit 测试管理的 platform 设备 
参数
- struct kunit *test
- 测试上下文 
- struct platform_device *pdev
- 要添加的 platform 设备 
描述
注册一个测试管理的 platform 设备。测试完成后,该设备将被注销。
返回
成功时返回 0,失败时返回负的 errno。
- 
int kunit_platform_device_prepare_wait_for_probe(struct kunit *test, struct platform_device *pdev, struct completion *x)¶
- 准备一个 completion 变量,用于等待 platform 设备探测 
参数
- struct kunit *test
- 测试上下文 
- struct platform_device *pdev
- 要准备等待探测的 platform 设备 
- struct completion *x
- 当 dev 探测完成时,完成 completion 变量 
描述
准备一个 completion 变量 x,用于等待 pdev 探测。等待 completion 强制进行抢占,允许 platform 驱动程序探测。
例子
static int kunit_platform_driver_probe(struct platform_device *pdev)
{
        return 0;
}
static void kunit_platform_driver_test(struct kunit *test)
{
        struct platform_device *pdev;
        struct platform_driver *pdrv;
        DECLARE_COMPLETION_ONSTACK(comp);
        pdev = kunit_platform_device_alloc(test, "kunit-platform", -1);
        KUNIT_ASSERT_NOT_ERR_OR_NULL(test, pdev);
        KUNIT_ASSERT_EQ(test, 0, kunit_platform_device_add(test, pdev));
        pdrv = kunit_kzalloc(test, sizeof(*pdrv), GFP_KERNEL);
        KUNIT_ASSERT_NOT_ERR_OR_NULL(test, pdrv);
        pdrv->probe = kunit_platform_driver_probe;
        pdrv->driver.name = "kunit-platform";
        pdrv->driver.owner = THIS_MODULE;
        KUNIT_ASSERT_EQ(test, 0, kunit_platform_device_prepare_wait_for_probe(test, pdev, &comp));
        KUNIT_ASSERT_EQ(test, 0, kunit_platform_driver_register(test, pdrv));
        KUNIT_EXPECT_NE(test, 0, wait_for_completion_timeout(&comp, 3 * HZ));
}
返回
成功时返回 0,失败时返回负的 errno。
- 
int kunit_platform_driver_register(struct kunit *test, struct platform_driver *drv)¶
- 注册 KUnit 测试管理的 platform 驱动程序 
参数
- struct kunit *test
- 测试上下文 
- struct platform_driver *drv
- 要注册的 platform 驱动程序 
描述
注册一个测试管理的 platform 驱动程序。这允许调用者将 drv 嵌入到容器结构中,并在探测函数中使用 container_of() 将信息传递给 KUnit 测试。
例子
struct kunit_test_context {
        struct platform_driver pdrv;
        const char *data;
};
static inline struct kunit_test_context *
to_test_context(struct platform_device *pdev)
{
        return container_of(to_platform_driver(pdev->dev.driver),
                            struct kunit_test_context,
                            pdrv);
}
static int kunit_platform_driver_probe(struct platform_device *pdev)
{
        struct kunit_test_context *ctx;
        ctx = to_test_context(pdev);
        ctx->data = "test data";
        return 0;
}
static void kunit_platform_driver_test(struct kunit *test)
{
        struct kunit_test_context *ctx;
        ctx = kunit_kzalloc(test, sizeof(*ctx), GFP_KERNEL);
        KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
        ctx->pdrv.probe = kunit_platform_driver_probe;
        ctx->pdrv.driver.name = "kunit-platform";
        ctx->pdrv.driver.owner = THIS_MODULE;
        KUNIT_EXPECT_EQ(test, 0, kunit_platform_driver_register(test, &ctx->pdrv));
        <... wait for driver to probe ...>
        KUNIT_EXPECT_STREQ(test, ctx->data, "test data");
}
返回
成功时返回 0,失败时返回负的 errno。