samples: sysbuild: add hello world for multiple board targets

Add a new "hello world" sample that can be built for multiple board
targets. This sample can be used to see if Zephyr boots successfully
with _minimal_ configuration on SoCs with multiple cores, or boards with
multiple SoCs.

The following configurations are provided for now:

- nRF5340 DK: cpuapp+cpunet
- nRF54H20 DK: cpuapp+cpurad, cpuapp+cpuppr, cpuapp+cpuppr(xip)

Note that because of a quoting bug somewhere in the build system,
SB_CONFIG_REMOTE_BOARD is specified in .conf files (see the sysbuild/
directory). This should be fixed in the near future.

Signed-off-by: Gerard Marull-Paretas <gerard@teslabs.com>
This commit is contained in:
Gerard Marull-Paretas 2024-03-01 10:14:14 +01:00 committed by Anas Nashif
commit 0630c5cfb5
14 changed files with 174 additions and 0 deletions

View file

@ -0,0 +1,8 @@
# Copyright (c) 2024 Nordic Semiconductor ASA
# SPDX-License-Identifier: Apache-2.0
cmake_minimum_required(VERSION 3.20.0)
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
project(hello_world)
target_sources(app PRIVATE src/main.c)

View file

@ -0,0 +1,7 @@
# Copyright (c) 2024 Nordic Semiconductor ASA
# SPDX-License-Identifier: Apache-2.0
source "${ZEPHYR_BASE}/share/sysbuild/Kconfig"
config REMOTE_BOARD
string "The board used for remote target"

View file

@ -0,0 +1,69 @@
.. zephyr:code-sample:: sysbuild_hello_world
:name: Hello World for multiple board targets using Sysbuild
Run a hello world sample on multiple board targets
Overview
********
The sample demonstrates how to build a Hello World application for two board
targets with :ref:`sysbuild`. This sample can be useful to test, for example,
SoCs with multiple cores as each core is exposed as a board target. Other
scenarios could include boards embedding multiple SoCs. When building with
Zephyr Sysbuild, the build system adds additional images based on the options
selected in the project's additional configuration and build files.
All images use the same :file:`main.c` that prints the board target on which the
application is programmed.
Building and Running
********************
This sample needs to be built with Sysbuild by using the ``--sysbuild`` option.
The remote board needs to be specified using ``SB_CONFIG_REMOTE_BOARD``. Some
additional settings may be required depending on the platform, for example,
to boot a remote core.
.. note::
It is recommended to use sample setups from
:zephyr_file:`samples/basic/multitarget_hello_world/sample.yaml` using the
``-T`` option.
Here's an example to build and flash the sample for the
:ref:`nrf54h20dk_nrf54h20`, using application and radio cores:
.. zephyr-app-commands::
:zephyr-app: samples/basic/multitarget_hello_world
:board: nrf54h20dk/nrf54h20/cpuapp
:west-args: --sysbuild
:gen-args: -DSB_CONFIG_REMOTE_BOARD='"nrf54h20dk/nrf54h20/cpurad"'
:goals: build flash
:compact:
The same can be achieved by using the
:zephyr_file:`samples/basic/multitarget_hello_world/sample.yaml` setup:
.. zephyr-app-commands::
:zephyr-app: samples/basic/multitarget_hello_world
:board: nrf54h20dk/nrf54h20/cpuapp
:west-args: -T sample.basic.multitarget_hello_world.nrf54h20dk_cpuapp_cpurad
:goals: build flash
:compact:
After programming the sample to your board, you should observe a hello world
message in the Zephyr console configured on each target. For example, for the
sample above:
Application core
.. code-block:: console
*** Booting Zephyr OS build v3.6.0-274-g466084bd8c5d ***
Hello world from nrf54h20dk/nrf54h20/cpuapp
Radio core
.. code-block:: console
*** Booting Zephyr OS build v3.6.0-274-g466084bd8c5d ***
Hello world from nrf54h20dk/nrf54h20/cpurad

View file

@ -0,0 +1,4 @@
# Copyright (c) 2024 Nordic Semiconductor ASA
# SPDX-License-Identifier: Apache-2.0
CONFIG_BOARD_ENABLE_CPUNET=y

View file

@ -0,0 +1 @@
# no additional configuration is required

View file

@ -0,0 +1,8 @@
# Copyright (c) 2024 Nordic Semiconductor ASA
# SPDX-License-Identifier: Apache-2.0
cmake_minimum_required(VERSION 3.20.0)
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
project(remote)
target_sources(app PRIVATE ../src/main.c)

View file

@ -0,0 +1 @@
# no additional configuration is required

View file

@ -0,0 +1,44 @@
sample:
name: Hello World for multiple board targets using Sysbuild
description: |
Hello World application that builds for multiple targets. Both images print
the board target they were run on.
common:
build_only: true
sysbuild: true
tests:
sample.sysbuild.hello_world.nrf5340dk_cpuapp_cpunet:
platform_allow:
- nrf5340dk/nrf5340/cpuapp
integration_platforms:
- nrf5340dk/nrf5340/cpuapp
extra_args:
SB_CONF_FILE=sysbuild/nrf5340dk_nrf5340_cpunet.conf
sample.sysbuild.hello_world.nrf54h20dk_cpuapp_cpurad:
platform_allow:
- nrf54h20dk/nrf54h20/cpuapp
integration_platforms:
- nrf54h20dk/nrf54h20/cpuapp
extra_args:
SB_CONF_FILE=sysbuild/nrf54h20dk_nrf54h20_cpurad.conf
sample.sysbuild.hello_world.nrf54h20dk_cpuapp_cpuppr:
platform_allow:
- nrf54h20dk/nrf54h20/cpuapp
integration_platforms:
- nrf54h20dk/nrf54h20/cpuapp
extra_args:
SB_CONF_FILE=sysbuild/nrf54h20dk_nrf54h20_cpuppr.conf
hello_world_SNIPPET=nordic-ppr
sample.sysbuild.hello_world.nrf54h20dk_cpuapp_cpuppr_xip:
platform_allow:
- nrf54h20dk/nrf54h20/cpuapp
integration_platforms:
- nrf54h20dk/nrf54h20/cpuapp
extra_args:
SB_CONF_FILE=sysbuild/nrf54h20dk_nrf54h20_cpuppr_xip.conf
hello_world_SNIPPET=nordic-ppr-xip

View file

@ -0,0 +1,13 @@
/*
* Copyright (c) 2024 Nordic Semiconductor ASA
* SPDX-License-Identifier: Apache-2.0
*/
#include <zephyr/sys/printk.h>
int main(void)
{
printk("Hello world from %s\n", CONFIG_BOARD_TARGET);
return 0;
}

View file

@ -0,0 +1,15 @@
# Copyright (c) 2024 Nordic Semiconductor ASA
# SPDX-License-Identifier: Apache-2.0
if("${SB_CONFIG_REMOTE_BOARD}" STREQUAL "")
message(FATAL_ERROR "REMOTE_BOARD must be set to a valid board name")
endif()
ExternalZephyrProject_Add(
APPLICATION remote
SOURCE_DIR ${APP_DIR}/remote
BOARD ${SB_CONFIG_REMOTE_BOARD}
)
add_dependencies(hello_world remote)
sysbuild_add_dependencies(FLASH hello_world remote)

View file

@ -0,0 +1 @@
SB_CONFIG_REMOTE_BOARD="nrf5340dk/nrf5340/cpunet"

View file

@ -0,0 +1 @@
SB_CONFIG_REMOTE_BOARD="nrf54h20dk/nrf54h20/cpuppr"

View file

@ -0,0 +1 @@
SB_CONFIG_REMOTE_BOARD="nrf54h20dk/nrf54h20/cpuppr/xip"

View file

@ -0,0 +1 @@
SB_CONFIG_REMOTE_BOARD="nrf54h20dk/nrf54h20/cpurad"