You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
97 lines
3.3 KiB
97 lines
3.3 KiB
.. _kconfig-functions: |
|
|
|
Custom Kconfig Preprocessor Functions |
|
##################################### |
|
|
|
Kconfiglib supports custom Kconfig preprocessor functions written in Python. |
|
These functions are defined in |
|
:zephyr_file:`scripts/kconfig/kconfigfunctions.py`. |
|
|
|
.. note:: |
|
|
|
The official Kconfig preprocessor documentation can be found `here |
|
<https://www.kernel.org/doc/html/latest/kbuild/kconfig-macro-language.html>`__. |
|
|
|
Most of the custom preprocessor functions are used to get devicetree |
|
information into Kconfig. For example, the default value of a Kconfig symbol |
|
can be fetched from a devicetree ``reg`` property. |
|
|
|
Devicetree-related Functions |
|
**************************** |
|
|
|
The functions listed below are used to get devicetree information into Kconfig. |
|
See the Python docstrings in :zephyr_file:`scripts/kconfig/kconfigfunctions.py` |
|
for detailed documentation. |
|
|
|
The ``*_int`` version of each function returns the value as a decimal integer, |
|
while the ``*_hex`` version returns a hexadecimal value starting with ``0x``. |
|
|
|
.. code-block:: none |
|
|
|
$(dt_has_compat,<compatible string>) |
|
$(dt_compat_enabled,<compatible string>) |
|
$(dt_compat_on_bus,<compatible string>,<bus>) |
|
$(dt_chosen_label,<property in /chosen>) |
|
$(dt_chosen_enabled,<property in /chosen>) |
|
$(dt_chosen_path,<property in /chosen>) |
|
$(dt_path_enabled,<node path>) |
|
$(dt_alias_enabled,<node alias>) |
|
$(dt_nodelabel_enabled,<node label>) |
|
$(dt_nodelabel_enabled_with_compat,<node label>,<compatible string>) |
|
$(dt_chosen_reg_addr_int,<property in /chosen>[,<index>,<unit>]) |
|
$(dt_chosen_reg_addr_hex,<property in /chosen>[,<index>,<unit>]) |
|
$(dt_chosen_reg_size_int,<property in /chosen>[,<index>,<unit>]) |
|
$(dt_chosen_reg_size_hex,<property in /chosen>[,<index>,<unit>]) |
|
$(dt_node_reg_addr_int,<node path>[,<index>,<unit>]) |
|
$(dt_node_reg_addr_hex,<node path>[,<index>,<unit>]) |
|
$(dt_node_reg_size_int,<node path>[,<index>,<unit>]) |
|
$(dt_node_reg_size_hex,<node path>[,<index>,<unit>]) |
|
$(dt_compat_enabled,<compatible string>) |
|
$(dt_chosen_enabled,<property in /chosen>) |
|
$(dt_node_bool_prop,<node path>,<prop>) |
|
$(dt_nodelabel_bool_prop,<node label>,<prop>) |
|
$(dt_node_has_prop,<node path>,<prop>) |
|
$(dt_nodelabel_has_prop,<node label>,<prop>) |
|
$(dt_node_int_prop_int,<node path>,<prop>[,<unit>]) |
|
$(dt_node_int_prop_hex,<node path>,<prop>[,<unit>]) |
|
$(dt_node_str_prop_equals,<node path>,<prop>,<value>) |
|
$(dt_nodelabel_has_compat,<node label>,<compatible string>) |
|
$(dt_nodelabel_path,<node label>) |
|
$(shields_list_contains,<shield name>) |
|
|
|
|
|
Example Usage |
|
============= |
|
|
|
Assume that the devicetree for some board looks like this: |
|
|
|
.. code-block:: none |
|
|
|
{ |
|
soc { |
|
#address-cells = <1>; |
|
#size-cells = <1>; |
|
|
|
spi0: spi@10014000 { |
|
compatible = "sifive,spi0"; |
|
reg = <0x10014000 0x1000 0x20010000 0x3c0900>; |
|
reg-names = "control", "mem"; |
|
... |
|
}; |
|
}; |
|
|
|
The second entry in ``reg`` in ``spi@1001400`` (``<0x20010000 0x3c0900>``) |
|
corresponds to ``mem``, and has the address ``0x20010000``. This address can be |
|
inserted into Kconfig as follows: |
|
|
|
.. code-block:: none |
|
|
|
config FLASH_BASE_ADDRESS |
|
default $(dt_node_reg_addr_hex,/soc/spi@1001400,1) |
|
|
|
After preprocessor expansion, this turns into the definition below: |
|
|
|
.. code-block:: none |
|
|
|
config FLASH_BASE_ADDRESS |
|
default 0x20010000
|
|
|