设备树 (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。

void of_root_kunit_skip(struct kunit *test)

如果未填充根节点,则跳过测试

参数

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() 释放。