Configuring Kconfig
You can change the software-related configuration temporarily or permanently.
The temporary build files are deleted when you clean the build directory with the pristine
target (see Zephyr’s Rebuilding an Application for more information).
The Kconfig Reference provides the documentation for each configuration option and lists the menu path where the option can be found.
Temporary Kconfig changes
When building your application, the different .config
, *_defconfig
files, and the prj.conf
file are merged together and then processed by Kconfig.
The resulting configuration is written to the zephyr/.config
file in your build
directory.
This means that this file is available when building the application until you clean the build directory pristinely.
Note
While it is possible to edit the .config
file directly, you should use the nRF Kconfig GUI in the nRF Connect for VS Code extension or a tool like menuconfig or guiconfig to update it.
These tools present all available options and allow you to select the ones that you need.
They also show the dependencies between the options and their limitations.
Use the nRF Kconfig GUI in the nRF Connect for VS Code extension to select the desired options. The GUI organizes the Kconfig options in a hierarchical list and lets you view and manage your selection.
To locate a specific configuration option, use the Search modules field. Read the Configuring with nRF Kconfig page in the nRF Connect for VS Code extension documentation for more information.
Alternatively, you can configure your application in the nRF Connect for VS Code extension using menuconfig. Open the More actions.. menu next to Kconfig action in the Actions View to start menuconfig in the extension.
To quickly test different configuration options, or to build your application in different variants, you can update the .config
file in the build directory.
Changes are picked up immediately.
Alternatively, you can configure your application using menuconfig. For this purpose, run the following command when Programming an application.
west build -t menuconfig
See Interactive Kconfig interfaces in the Zephyr documentation for instructions on how to run menuconfig or guiconfig. To locate a specific configuration option, use the Jump to field.
Temporary Kconfig changes for a single build
You can also apply temporary Kconfig changes to a single build by providing the value of a chosen Kconfig option as a CMake option. The Kconfig option configuration will be available until you clean the build directory pristinely.
Permanent Kconfig changes
To configure your application and maintain the configuration after you clean the build directory pristinely, you need to specify the configuration in one of the permanent configuration files.
In most of the cases, this means editing the default prj.conf
file of the application, but you can also use an extra Kconfig fragment file.
The Kconfig fragment files are configuration files used for building an application image with or without software support that is enabled by specific Kconfig options.
In these files, you can specify different values for configuration options that are defined by a library or board, and you can add configuration options that are specific to your application.
Examples include whether to add networking support or which drivers are needed by the application.
Kconfig fragments are applied on top of the default prj.conf
file and use the .conf
file extension.
When they are board-specific, they are placed in the boards
folder, are named <board>.conf
, and they are applied on top of the default Kconfig file for the specified board.
See Setting Kconfig configuration values in the Zephyr documentation for information on how to change the configuration permanently and how the additional files are applied.
Tip
Reconfiguring through menuconfig only changes the specific setting and the invisible options that are calculated from it.
It does not adjust visible symbols that have already defaulted to a value even if this default calculation is supposed to be dependent on the changed setting.
This may result in a bloated configuration compared to changing the setting directly in prj.conf
.
See the section Stuck symbols in menuconfig and guiconfig on the Kconfig - Tips and Best Practices in the Zephyr documentation for more information.
If you work with nRF Connect for VS Code extension, you can use one of the following options:
Edit the
prj.conf
directly in Visual Studio Code.Select an extra Kconfig fragment file when you build an application.
Edit the Kconfig options in
prj.conf
using the nRF Kconfig GUI and save changes permanently to an existing or newprj.conf
file.
See the extension’s documentation about Kconfig for more information.
If you work on the command line, use one of the following options:
Edit the
prj.conf
directly and run the standardwest build
command.Pass the additional options to the
west build
command by adding them after a--
at the end of the command.For example, to always enable CMAKE_EXPORT_COMPILE_COMMANDS, you can run:
west config build.cmake-args -- -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
(The extra
--
is used to force the rest of the command to be treated as a positional argument. Without it, west config would treat the-DVAR=VAL
syntax as a use of its-D
option.)See Permanent CMake Arguments for more information.
The configuration changes in prj.conf
are automatically picked up by the build system when you rebuild the application.
Override Kconfig warnings
Kconfig options often depend on each other, and because of this the build system can override any Kconfig changes you make. If that happens, a warning will be printed in the build log, but the build may still complete successfully.
Here is an example for such a warning:
warning: UART_CONSOLE (defined at drivers/console/Kconfig:43) was assigned the value 'y' but got the
value 'n'. Check these unsatisfied dependencies: SERIAL (=n), SERIAL_HAS_DRIVER (=n). See
http://docs.zephyrproject.org/latest/kconfig.html#CONFIG_UART_CONSOLE and/or look up UART_CONSOLE in
the menuconfig/guiconfig interface. The Application Development Primer, Setting Configuration
Values, and Kconfig - Tips and Best Practices sections of the manual might be helpful too.
Look for these warnings to make sure no Kconfig options are overridden unexpectedly.
These warnings might be more frequent if you edit the Kconfig files manually. The Kconfig GUI and other Kconfig tools give you an overview over dependencies, which allows you to see which Kconfig options have been overridden and why before you build the project.