平台设备 API¶
KUnit 平台设备 API 用于测试平台设备。
-
struct platform_device *kunit_platform_device_alloc(struct kunit *test, const char *name, int id)¶
分配一个 KUnit 测试管理的平台设备
参数
struct kunit *test
测试上下文
const char *name
要分配的平台设备的设备名称
int id
要分配的平台设备的标识符。
描述
分配一个测试管理的平台设备。测试完成后会放置该设备。
返回
成功时返回分配的平台设备,失败时返回 NULL。
-
int kunit_platform_device_add(struct kunit *test, struct platform_device *pdev)¶
注册一个 KUnit 测试管理的平台设备
参数
struct kunit *test
测试上下文
struct platform_device *pdev
要添加的平台设备
描述
注册一个测试管理的平台设备。测试完成后将注销该设备。
返回
成功时返回 0,失败时返回负数的 errno。
-
int kunit_platform_device_prepare_wait_for_probe(struct kunit *test, struct platform_device *pdev, struct completion *x)¶
准备一个完成变量以等待平台设备探测
参数
struct kunit *test
测试上下文
struct platform_device *pdev
要准备等待探测的平台设备
struct completion *x
当 dev 完成探测时完成的完成变量
描述
准备一个完成变量 x 以等待 pdev 探测。等待完成会强制抢占,允许平台驱动程序进行探测。
示例
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 测试管理的平台驱动程序
参数
struct kunit *test
测试上下文
struct platform_driver *drv
要注册的平台驱动程序
描述
注册一个测试管理的平台驱动程序。这允许调用者将 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。