154 lines
5.1 KiB
ReStructuredText
154 lines
5.1 KiB
ReStructuredText
.. _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>`__.
|
|
|
|
See the Python docstrings in :zephyr_file:`scripts/kconfig/kconfigfunctions.py`
|
|
for detailed documentation.
|
|
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.
|
|
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_alias_enabled,<node alias>)
|
|
$(dt_chosen_bool_prop, <property in /chosen>, <prop>)
|
|
$(dt_chosen_enabled,<property in /chosen>)
|
|
$(dt_chosen_has_compat,<property in /chosen>,<compatible string>)
|
|
$(dt_chosen_label,<property in /chosen>)
|
|
$(dt_chosen_partition,addr_hex,<chosen>[,<index>,<unit>])
|
|
$(dt_chosen_partition,addr_int,<chosen>[,<index>,<unit>])
|
|
$(dt_chosen_path,<property in /chosen>)
|
|
$(dt_chosen_reg_addr_hex,<property in /chosen>[,<index>,<unit>])
|
|
$(dt_chosen_reg_addr_int,<property in /chosen>[,<index>,<unit>])
|
|
$(dt_chosen_reg_size_hex,<property in /chosen>[,<index>,<unit>])
|
|
$(dt_chosen_reg_size_int,<property in /chosen>[,<index>,<unit>])
|
|
$(dt_compat_any_has_prop,<compatible string>,<prop>[,<value>])
|
|
$(dt_compat_any_on_bus,<compatible string>,<prop>)
|
|
$(dt_compat_enabled,<compatible string>)
|
|
$(dt_compat_on_bus,<compatible string>,<bus>)
|
|
$(dt_gpio_hogs_enabled)
|
|
$(dt_has_compat,<compatible string>)
|
|
$(dt_node_array_prop_hex,<node path>,<prop>,<index>[,<unit>])
|
|
$(dt_node_array_prop_int,<node path>,<prop>,<index>[,<unit>])
|
|
$(dt_node_bool_prop,<node path>,<prop>)
|
|
$(dt_node_has_compat,<node path>,<compatible string>)
|
|
$(dt_node_has_prop,<node path>,<prop>)
|
|
$(dt_node_int_prop_hex,<node path>,<prop>[,<unit>])
|
|
$(dt_node_int_prop_int,<node path>,<prop>[,<unit>])
|
|
$(dt_node_parent,<node path>)
|
|
$(dt_node_ph_array_prop_hex,<node path>,<prop>,<index>,<cell>[,<unit>])
|
|
$(dt_node_ph_array_prop_int,<node path>,<prop>,<index>,<cell>[,<unit>])
|
|
$(dt_node_ph_prop_path,<node path>,<prop>)
|
|
$(dt_node_reg_addr_hex,<node path>[,<index>,<unit>])
|
|
$(dt_node_reg_addr_int,<node path>[,<index>,<unit>])
|
|
$(dt_node_reg_size_hex,<node path>[,<index>,<unit>])
|
|
$(dt_node_reg_size_int,<node path>[,<index>,<unit>])
|
|
$(dt_node_str_prop_equals,<node path>,<prop>,<value>)
|
|
$(dt_nodelabel_array_prop_has_val, <node label>, <prop>, <value>)
|
|
$(dt_nodelabel_bool_prop,<node label>,<prop>)
|
|
$(dt_nodelabel_enabled,<node label>)
|
|
$(dt_nodelabel_enabled_with_compat,<node label>,<compatible string>)
|
|
$(dt_nodelabel_has_compat,<node label>,<compatible string>)
|
|
$(dt_nodelabel_has_prop,<node label>,<prop>)
|
|
$(dt_nodelabel_path,<node label>)
|
|
$(dt_nodelabel_reg_addr_hex,<node label>[,<index>,<unit>])
|
|
$(dt_nodelabel_reg_addr_int,<node label>[,<index>,<unit>])
|
|
$(dt_nodelabel_reg_size_hex,<node label>[,<index>,<unit>])
|
|
$(dt_nodelabel_reg_size_int,<node label>[,<index>,<unit>])
|
|
$(dt_path_enabled,<node path>)
|
|
|
|
|
|
Integer functions
|
|
*****************
|
|
|
|
The functions listed below can be used to do arithmetic operations
|
|
on integer variables, such as addition, subtraction and more.
|
|
|
|
.. code-block:: none
|
|
|
|
$(add,<value>[,value]...)
|
|
$(dec,<value>[,value]...)
|
|
$(div,<value>[,value]...)
|
|
$(inc,<value>[,value]...)
|
|
$(max,<value>[,value]...)
|
|
$(min,<value>[,value]...)
|
|
$(mod,<value>[,value]...)
|
|
$(mul,<value>[,value]...)
|
|
$(sub,<value>[,value]...)
|
|
|
|
|
|
String functions
|
|
****************
|
|
|
|
The functions listed below can be used to modify string variables.
|
|
|
|
.. code-block:: none
|
|
|
|
$(normalize_upper,<string>)
|
|
$(substring,<string>,<start>[,<stop>])
|
|
|
|
|
|
Other functions
|
|
***************
|
|
|
|
Functions to perform specific operations, currently only a check if a shield
|
|
name is specified.
|
|
|
|
.. code-block:: none
|
|
|
|
$(shields_list_contains,<shield name>)
|
|
|
|
|
|
Example Usage
|
|
=============
|
|
|
|
Assume that the devicetree for some board looks like this:
|
|
|
|
.. code-block:: devicetree
|
|
|
|
{
|
|
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:: kconfig
|
|
|
|
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:: kconfig
|
|
|
|
config FLASH_BASE_ADDRESS
|
|
default 0x20010000
|