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:
parent
8120bd7519
commit
0630c5cfb5
14 changed files with 174 additions and 0 deletions
8
samples/sysbuild/hello_world/CMakeLists.txt
Normal file
8
samples/sysbuild/hello_world/CMakeLists.txt
Normal 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)
|
7
samples/sysbuild/hello_world/Kconfig.sysbuild
Normal file
7
samples/sysbuild/hello_world/Kconfig.sysbuild
Normal 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"
|
69
samples/sysbuild/hello_world/README.rst
Normal file
69
samples/sysbuild/hello_world/README.rst
Normal 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
|
|
@ -0,0 +1,4 @@
|
|||
# Copyright (c) 2024 Nordic Semiconductor ASA
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
CONFIG_BOARD_ENABLE_CPUNET=y
|
1
samples/sysbuild/hello_world/prj.conf
Normal file
1
samples/sysbuild/hello_world/prj.conf
Normal file
|
@ -0,0 +1 @@
|
|||
# no additional configuration is required
|
8
samples/sysbuild/hello_world/remote/CMakeLists.txt
Normal file
8
samples/sysbuild/hello_world/remote/CMakeLists.txt
Normal 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)
|
1
samples/sysbuild/hello_world/remote/prj.conf
Normal file
1
samples/sysbuild/hello_world/remote/prj.conf
Normal file
|
@ -0,0 +1 @@
|
|||
# no additional configuration is required
|
44
samples/sysbuild/hello_world/sample.yaml
Normal file
44
samples/sysbuild/hello_world/sample.yaml
Normal 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
|
13
samples/sysbuild/hello_world/src/main.c
Normal file
13
samples/sysbuild/hello_world/src/main.c
Normal 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;
|
||||
}
|
15
samples/sysbuild/hello_world/sysbuild.cmake
Normal file
15
samples/sysbuild/hello_world/sysbuild.cmake
Normal 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)
|
|
@ -0,0 +1 @@
|
|||
SB_CONFIG_REMOTE_BOARD="nrf5340dk/nrf5340/cpunet"
|
|
@ -0,0 +1 @@
|
|||
SB_CONFIG_REMOTE_BOARD="nrf54h20dk/nrf54h20/cpuppr"
|
|
@ -0,0 +1 @@
|
|||
SB_CONFIG_REMOTE_BOARD="nrf54h20dk/nrf54h20/cpuppr/xip"
|
|
@ -0,0 +1 @@
|
|||
SB_CONFIG_REMOTE_BOARD="nrf54h20dk/nrf54h20/cpurad"
|
Loading…
Add table
Add a link
Reference in a new issue