如何通过 Kconfig 或类似的东西配置 Zephyr Devicetree 文件的包含内容

问题描述 投票:0回答:1

我目前正在开发我的主板的 Devicetree,但它有 3 个带有可配置 GPIO 的扩展端口。根据连接的扩展,io 可以是 I2C 端口,也可以只是具有输入功能的 GPIO。

为了配置此行为,我尝试包含不同的 devicetree (.dtsi) 文件。根据所连接的板,可以编译配件固件。 但我想通过图形 Kconfig 编辑器来完成此操作。

但是如果我尝试这样的事情:

board.dts

#if defined(CONFIG_IO_BOARD_XX)
    #include "ioboard-XX.dtsi"
#endif

main.c

#if defined(CONFIG_IO_BOARD_XX)
    #define LOCK_ALIAS DT_ALIAS(lock0)
    static const struct device* const gpio = DEVICE_DT_GET(LOCK_ALIAS);
#endif

我收到这样的错误消息

In file included from C:/Users/ErFre/zephyrproject/zephyr/include/zephyr/toolchain/gcc.h:98,
                 from C:/Users/ErFre/zephyrproject/zephyr/include/zephyr/toolchain.h:50,
                 from C:/Users/ErFre/zephyrproject/zephyr/include/zephyr/kernel_includes.h:23,
                 from C:/Users/ErFre/zephyrproject/zephyr/include/zephyr/kernel.h:17,
                 from ../src/main.c:1:
C:/Users/ErFre/zephyrproject/zephyr/include/zephyr/device.h:89:41: error: '__device_dts_ord_DT_N_ALIAS_lock0_ORD' undeclared here (not in a function)
   89 | #define DEVICE_NAME_GET(dev_id) _CONCAT(__device_, dev_id)
      |                                         ^~~~~~~~~

相反,这意味着

#if defined(CONFIG_IO_BOARD_XX)
行在代码中有效,但在设备树中无效。 我已经读过,不应该使用 Kconfig 来指定固定硬件。但在这种情况下,硬件并未修复。 指定固定硬件配置的选项

我可以使用 Kconfig 或其他一些中央配置文件来配置我的硬件和固件状态吗?

c embedded zephyr-rtos nrf-connect
1个回答
0
投票

正如您已经看到的,Kconfig 不能用于帮助定义 devicetree,因为 devicetree 在 Kconfig 系统之前由构建系统处理(因此 devicetree 中的值实际上可以帮助定义 Kconfig 系统,而不是相反) 。因此,除非您将自己的配置系统放在 Zephyr 的 Kconfig 周围(像 Zephyr 的 Sysbuild 之类的东西可能会起作用:https://docs.zephyrproject.org/latest/build/sysbuild/index.html

Zephyr 确实提供了一些替代方案来实现这一目标。从您的描述来看,这听起来最像您在编译时根据连接到它的子板来调整主板扩展头的配置;这通常是通过屏蔽来完成的,您可以通过

boards/shields/<shield>/<shield>.overlay
定义子板。然后,您可以在
boards/shields/<shield>/boards/<your-board>/<your-board>.overlay
中为您的屏蔽使用 pinctrl 组和板特定覆盖层的组合,以确保子板正确连接到您的板。然后,您只需要通过命令行指定您正在使用的屏蔽,您可以通过 CMake 使其更清晰,请在此处查看更多信息:https://docs.zephyrproject.org/latest/hardware/porting/shields.html #盾牌激活

或者,您可以探索使用片段来执行上述操作,但根据您的描述,听起来盾牌基础设施确实最符合您想要做的事情。

© www.soinside.com 2019 - 2024. All rights reserved.