设备树 (OF) API¶
KUnit 设备树 API 用于测试依赖于设备树 (of_*) 的代码。
-
int __of_overlay_apply_kunit(struct kunit *test, u8 *overlay_begin, const u8 *overlay_end)¶
测试托管的
of_overlay_fdt_apply()
变体
参数
struct kunit *test
测试上下文
u8 *overlay_begin
要应用的覆盖的起始地址
const u8 *overlay_end
要应用的覆盖的结束地址
描述
这主要是内部 API。有关使此方法更易于使用的包装器,请参见 of_overlay_apply_kunit()
。
类似于 of_overlay_fdt_apply()
,不同之处在于覆盖由测试用例管理,并且在测试用例结束后会自动使用 of_overlay_remove()
删除。
返回值
成功时返回 0,失败时返回负 errno
-
of_overlay_apply_kunit¶
of_overlay_apply_kunit (test, overlay_name)
针对内置覆盖测试托管的
of_overlay_fdt_apply()
参数
测试
测试上下文
overlay_name
要应用的覆盖的名称
描述
此宏用于应用在 scripts/Makefile.lib 中使用 cmd_dt_S_dtbo 规则构建的设备树覆盖,该覆盖已编译到内核映像或 KUnit 测试模块中。测试结束后会自动删除覆盖。
需要设备树节点的单元测试应在其 Makefile 中使用 overlay_name.dtbo.o 编译覆盖文件及其单元测试,然后在测试期间加载覆盖。overlay_name 与覆盖的文件名匹配,不带 dtbo 文件扩展名。如果未启用 CONFIG_OF_OVERLAY,则将跳过 test。
在 Makefile 中
obj-$(CONFIG_OF_OVERLAY_KUNIT_TEST) += overlay_test.o kunit_overlay_test.dtbo.o
在测试中
static void of_overlay_kunit_of_overlay_apply(struct kunit *test)
{
struct device_node *np;
KUNIT_ASSERT_EQ(test, 0,
of_overlay_apply_kunit(test, kunit_overlay_test));
np = of_find_node_by_name(NULL, "test-kunit");
KUNIT_EXPECT_NOT_ERR_OR_NULL(test, np);
of_node_put(np);
}
返回值
成功时返回 0,失败时返回负 errno。
参数
struct kunit *test
如果未填充根节点,则跳过测试
-
int of_overlay_fdt_apply_kunit(struct kunit *test, void *overlay_fdt, u32 overlay_fdt_size, int *ovcs_id)¶
测试托管的
of_overlay_fdt_apply()
参数
struct kunit *test
测试上下文
void *overlay_fdt
要应用的设备树覆盖
u32 overlay_fdt_size
overlay_fdt 的大小(以字节为单位)
int *ovcs_id
覆盖的标识符,用于删除覆盖
描述
与 of_overlay_fdt_apply()
类似,不同之处在于覆盖由测试用例管理,并且在测试用例结束后会自动使用 of_overlay_remove()
删除。
返回值
成功时返回 0,失败时返回负 errno
-
void of_node_put_kunit(struct kunit *test, struct device_node *node)¶
测试托管的
of_node_put()
参数
struct kunit *test
测试上下文
struct device_node *node
要传递给
of_node_put()
的节点
描述
与 of_node_put()
类似,不同之处在于节点由测试用例管理,并且在测试用例结束后会自动使用 of_node_put()
释放。