裝置樹 (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() 自動放置。