.. _flashing-soc-board-config: Flashing configuration ###################### Zephyr supports setting up configuration for flash runners (invoked from :ref:`west flash`) which allows for customising how commands are used when programming boards. This configuration is used for :ref:`sysbuild` projects and allows for configuring when commands are ran for groups of board targets. As an example: a multi-core SoC might want to only allow the ``--erase`` argument to be used once for all of the cores in the SoC which would prevent multiple erase tasks running in a single ``west flash`` invocation, which could wrongly clear the memory which is used by the other images being programmed. Priority ******** Flashing configuration is singular, it will only be read from a single location, this configuration can reside in the following files starting with the highest priority: * ``soc.yml`` (in soc folder) * ``board.yml`` (in board folder) Configuration ************* Configuration is applied in the yml file by using a ``runners`` map with a single ``run_once`` child, this then contains a map of commands as they would be provided to the flash runner e.g. ``--reset`` followed by a list which specifies the settings for each of these commands (these are grouped by flash runner, and by qualifiers/boards). Commands have associated runners that they apply to using a ``runners`` list value, this can contain ``all`` if it applies to all runners, otherwise must contain each runner that it applies to using the runner-specific name. Groups of board targets can be specified using the ``groups`` key which has a list of board target sets. Board targets are regular expression matches, for ``soc.yml`` files each set of board targets must be in a ``qualifiers`` key (only regular expression matches for board qualifiers are allowed, board names must be omitted from these entries). For ``board.yml`` files each set of board targets must be in a ``boards`` key, these are lists containing the matches which form a singular group. A final parameter ``run`` can be set to ``first`` which means that the command will be ran once with the first image flashing process per set of board targets, or to ``last`` which will be ran once for the final image flash per set of board targets. An example flashing configuration for a ``soc.yml`` is shown below in which the ``--recover`` command will only be used once for any board targets which used the nRF5340 SoC application or network CPU cores, and will only reset the network or application core after all images for the respective core have been flashed. .. code-block:: yaml runners: run_once: '--recover': - run: first runners: - nrfjprog groups: - qualifiers: - nrf5340/cpunet - nrf5340/cpuapp - nrf5340/cpuapp/ns '--reset': - run: last runners: - nrfjprog - jlink groups: - qualifiers: - nrf5340/cpunet - qualifiers: - nrf5340/cpuapp - nrf5340/cpuapp/ns # Made up non-real world example to show how to specify different options for different # flash runners - run: first runners: - some_other_runner groups: - qualifiers: - nrf5340/cpunet - qualifiers: - nrf5340/cpuapp - nrf5340/cpuapp/ns Usage ***** Commands that are supported by flash runners can be used as normal when flashing non-sysbuild applications, the run once configuration will not be used. When flashing a sysbuild project with multiple images, the flash runner run once configuration will be applied. For example, building the :zephyr:code-sample:`smp-svr` sample for the nrf5340dk which will include MCUboot as a secondary image: .. code-block:: console cmake -GNinja -Sshare/sysbuild/ -Bbuild -DBOARD=nrf5340dk/nrf5340/cpuapp -DAPP_DIR=samples/subsys/mgmt/mcumgr/smp_svr cmake --build build Once built with an nrf5340dk connected, the following command can be used to flash the board with both applications and will only perform a single device recovery operation when programming the first image: .. code-block:: console west flash --recover If the above was ran without the flashing configuration, the recovery process would be ran twice and the device would be unbootable.