Skip to content

Commit

Permalink
boot: zephyr: Add optional MCUboot boot banner
Browse files Browse the repository at this point in the history
Adds an optional MCUboot boot banner which displays the MCUboot
version and zephyr version

Signed-off-by: Jamie McCrae <jamie.mccrae@nordicsemi.no>
  • Loading branch information
nordicjm committed Apr 23, 2024
1 parent 7174dd2 commit 1496129
Show file tree
Hide file tree
Showing 3 changed files with 68 additions and 0 deletions.
5 changes: 5 additions & 0 deletions boot/zephyr/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -358,6 +358,11 @@ zephyr_library_sources(
)
endif()

if(CONFIG_MCUBOOT_BOOT_BANNER)
# Replace Zephyr's boot banner with the MCUboot one
zephyr_sources(kernel/banner.c)
endif()

if(SYSBUILD)
function(align_up num align result)
math(EXPR out "(((${num}) + ((${align}) - 1)) & ~((${align}) - 1))")
Expand Down
17 changes: 17 additions & 0 deletions boot/zephyr/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -700,6 +700,23 @@ config BOOT_DISABLE_CACHES
increases protection against data leakage from MCUboot to applications via
these caches.

config MCUBOOT_BOOT_BANNER
bool "Use MCUboot boot banner"
depends on BOOT_BANNER
depends on "$(APP_VERSION_EXTENDED_STRING)" != ""
default y
help
Uses a MCUboot boot banner instead of the default zephyr one, which will output the
MCUboot name and version, followed by the zephyr name and version.

For example:

*** Booting MCUboot v2.0.0-72-g8c0e36c88663 ***
*** Using Zephyr OS build v3.6.0-2607-gd0be2010c31f ***

config BOOT_BANNER_STRING
default "Using Zephyr OS build" if MCUBOOT_BOOT_BANNER

endmenu

config MCUBOOT_DEVICE_SETTINGS
Expand Down
46 changes: 46 additions & 0 deletions boot/zephyr/kernel/banner.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
/*
* Copyright (c) 2020 Intel Corporation
* Copyright (c) 2024 Nordic Semiconductor ASA
*
* SPDX-License-Identifier: Apache-2.0
*/

#include <zephyr/kernel.h>
#include <zephyr/init.h>
#include <zephyr/device.h>
#include <version.h>
#include <app_version.h>

#if defined(CONFIG_BOOT_DELAY) && (CONFIG_BOOT_DELAY > 0)
#define DELAY_STR STRINGIFY(CONFIG_BOOT_DELAY)
#define BANNER_POSTFIX " (delayed boot " DELAY_STR "ms)"
#else
#define BANNER_POSTFIX ""
#endif /* defined(CONFIG_BOOT_DELAY) && (CONFIG_BOOT_DELAY > 0) */

#ifndef BANNER_VERSION
#if defined(BUILD_VERSION) && !IS_EMPTY(BUILD_VERSION)
#define BANNER_VERSION STRINGIFY(BUILD_VERSION)
#else
#define BANNER_VERSION KERNEL_VERSION_STRING
#endif /* BUILD_VERSION */
#endif /* !BANNER_VERSION */

#if defined(APP_BUILD_VERSION)
#define APPLICATION_BANNER_VERSION STRINGIFY(APP_BUILD_VERSION)
#elif defined(APP_VERSION_EXTENDED_STRING)
#define APPLICATION_BANNER_VERSION APP_VERSION_EXTENDED_STRING
#endif

#if defined(APPLICATION_BANNER_VERSION)
void boot_banner(void)
{
#if defined(CONFIG_BOOT_DELAY) && (CONFIG_BOOT_DELAY > 0)
printk("***** delaying boot " DELAY_STR "ms (per build configuration) *****\n");
k_busy_wait(CONFIG_BOOT_DELAY * USEC_PER_MSEC);
#endif /* defined(CONFIG_BOOT_DELAY) && (CONFIG_BOOT_DELAY > 0) */

printk("*** Booting MCUboot " APPLICATION_BANNER_VERSION " ***\n");
printk("*** " CONFIG_BOOT_BANNER_STRING " " BANNER_VERSION BANNER_POSTFIX " ***\n");
}
#endif /* APP_BUILD_VERSION */

0 comments on commit 1496129

Please sign in to comment.