设备树 (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(),用于内置覆盖

参数

test

测试上下文

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() 自动放置。