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