tests: boot: Add MCUboot data sharing test
Adds a test for the data sharing retention feature of MCUboot configuration to an application. Signed-off-by: Jamie McCrae <jamie.mccrae@nordicsemi.no>
This commit is contained in:
parent
db4febc584
commit
ce65806cd4
11 changed files with 266 additions and 0 deletions
|
@ -625,6 +625,7 @@ flagged.
|
||||||
"BOOT_SERIAL_ENTRANCE_GPIO", # Used in (sysbuild-based) test
|
"BOOT_SERIAL_ENTRANCE_GPIO", # Used in (sysbuild-based) test
|
||||||
"BOOT_SERIAL_IMG_GRP_HASH", # Used in documentation
|
"BOOT_SERIAL_IMG_GRP_HASH", # Used in documentation
|
||||||
"BOOT_SHARE_DATA", # Used in Kconfig text
|
"BOOT_SHARE_DATA", # Used in Kconfig text
|
||||||
|
"BOOT_SHARE_DATA_BOOTINFO", # Used in (sysbuild-based) test
|
||||||
"BOOT_SHARE_BACKEND_RETENTION", # Used in Kconfig text
|
"BOOT_SHARE_BACKEND_RETENTION", # Used in Kconfig text
|
||||||
"BOOT_SIGNATURE_KEY_FILE", # MCUboot setting used by sysbuild
|
"BOOT_SIGNATURE_KEY_FILE", # MCUboot setting used by sysbuild
|
||||||
"BOOT_SIGNATURE_TYPE_ECDSA_P256", # MCUboot setting used by sysbuild
|
"BOOT_SIGNATURE_TYPE_ECDSA_P256", # MCUboot setting used by sysbuild
|
||||||
|
|
30
tests/boot/mcuboot_data_sharing/CMakeLists.txt
Normal file
30
tests/boot/mcuboot_data_sharing/CMakeLists.txt
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
#
|
||||||
|
# Copyright (c) 2023 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(mcuboot_recovery_retention)
|
||||||
|
|
||||||
|
if(NOT (DEFINED SYSBUILD))
|
||||||
|
message(FATAL_ERROR "This test must be built with sysbuild.")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
FILE(GLOB app_sources
|
||||||
|
src/*.c
|
||||||
|
)
|
||||||
|
|
||||||
|
target_sources(app PRIVATE ${app_sources})
|
||||||
|
|
||||||
|
# Get MCUboot version from the VERSION file in the repository and create a local output header
|
||||||
|
# version file so that it can be compared against in the test
|
||||||
|
set(VERSION_FILE ${ZEPHYR_MCUBOOT_MODULE_DIR}/boot/zephyr/VERSION)
|
||||||
|
set(VERSION_TYPE MCUBOOT)
|
||||||
|
set(BUILD_VERSION_NAME MCUBOOT_BUILD_VERSION)
|
||||||
|
include(${ZEPHYR_BASE}/cmake/modules/version.cmake)
|
||||||
|
file(READ ${ZEPHYR_BASE}/version.h.in version_content)
|
||||||
|
string(CONFIGURE "${version_content}" version_content)
|
||||||
|
string(CONFIGURE "${version_content}" version_content)
|
||||||
|
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/zephyr/include/generated/mcuboot_version.h "${version_content}")
|
|
@ -0,0 +1,7 @@
|
||||||
|
#
|
||||||
|
# Copyright (c) 2023 Nordic Semiconductor ASA
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
#
|
||||||
|
CONFIG_RETAINED_MEM_NRF_GPREGRET=n
|
||||||
|
CONFIG_RETAINED_MEM_ZEPHYR_RAM=y
|
|
@ -0,0 +1,58 @@
|
||||||
|
/* SPDX-License-Identifier: Apache-2.0 */
|
||||||
|
|
||||||
|
/ {
|
||||||
|
sram@2003F000 {
|
||||||
|
compatible = "zephyr,memory-region", "mmio-sram";
|
||||||
|
reg = <0x2003F000 DT_SIZE_K(1)>;
|
||||||
|
zephyr,memory-region = "RetainedMem";
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
retainedmem {
|
||||||
|
compatible = "zephyr,retained-ram";
|
||||||
|
status = "okay";
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
|
||||||
|
boot_info0: boot_info@0 {
|
||||||
|
compatible = "zephyr,retention";
|
||||||
|
status = "okay";
|
||||||
|
reg = <0x0 0x100>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
chosen {
|
||||||
|
zephyr,bootloader-info = &boot_info0;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
/delete-node/ &gpregret1;
|
||||||
|
/delete-node/ &gpregret2;
|
||||||
|
/delete-node/ &boot_partition;
|
||||||
|
/delete-node/ &slot0_partition;
|
||||||
|
/delete-node/ &slot1_partition;
|
||||||
|
|
||||||
|
&sram0 {
|
||||||
|
reg = <0x20000000 DT_SIZE_K(255)>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&flash0 {
|
||||||
|
partitions {
|
||||||
|
compatible = "fixed-partitions";
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
|
||||||
|
boot_partition: partition@0 {
|
||||||
|
label = "mcuboot";
|
||||||
|
reg = <0x00000000 0x00020000>;
|
||||||
|
};
|
||||||
|
slot0_partition: partition@20000 {
|
||||||
|
label = "image-0";
|
||||||
|
reg = <0x00020000 0x00022000>;
|
||||||
|
};
|
||||||
|
slot1_partition: partition@42000 {
|
||||||
|
label = "image-1";
|
||||||
|
reg = <0x00042000 0x00024000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
13
tests/boot/mcuboot_data_sharing/prj.conf
Normal file
13
tests/boot/mcuboot_data_sharing/prj.conf
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
#
|
||||||
|
# Copyright (c) 2023 Nordic Semiconductor ASA
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
#
|
||||||
|
CONFIG_ZTEST=y
|
||||||
|
CONFIG_ZTEST_NEW_API=y
|
||||||
|
CONFIG_RETAINED_MEM=y
|
||||||
|
CONFIG_RETENTION=y
|
||||||
|
CONFIG_SETTINGS=y
|
||||||
|
CONFIG_SETTINGS_RUNTIME=y
|
||||||
|
CONFIG_RETENTION_BOOTLOADER_INFO=y
|
||||||
|
CONFIG_RETENTION_BOOTLOADER_INFO_TYPE_MCUBOOT=y
|
122
tests/boot/mcuboot_data_sharing/src/main.c
Normal file
122
tests/boot/mcuboot_data_sharing/src/main.c
Normal file
|
@ -0,0 +1,122 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2023 Nordic Semiconductor ASA
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <zephyr/ztest.h>
|
||||||
|
#include <zephyr/kernel.h>
|
||||||
|
#include <zephyr/settings/settings.h>
|
||||||
|
#include <bootutil/boot_status.h>
|
||||||
|
#include <bootutil/image.h>
|
||||||
|
#include <mcuboot_version.h>
|
||||||
|
|
||||||
|
#define FLASH_SECTOR_SIZE 1024
|
||||||
|
#define FLASH_SECTOR_SIZE_KB 4
|
||||||
|
#define FLASH_MAX_APP_SECTORS 34
|
||||||
|
#define FLASH_RESERVED_SECTORS 1
|
||||||
|
#define FLASH_MAX_APP_SIZE ((FLASH_MAX_APP_SECTORS - FLASH_RESERVED_SECTORS) \
|
||||||
|
* FLASH_SECTOR_SIZE_KB)
|
||||||
|
#define RUNNING_SLOT 0
|
||||||
|
|
||||||
|
ZTEST(mcuboot_shared_data, test_mode)
|
||||||
|
{
|
||||||
|
uint8_t var[1];
|
||||||
|
int rc;
|
||||||
|
|
||||||
|
memset(var, 0xff, sizeof(var));
|
||||||
|
rc = settings_runtime_get("blinfo/mode", var, sizeof(var));
|
||||||
|
zassert_equal(rc, sizeof(var), "Expected data length mismatch");
|
||||||
|
zassert_equal(var[0], MCUBOOT_MODE_SWAP_USING_MOVE, "Expected data mismatch");
|
||||||
|
}
|
||||||
|
|
||||||
|
ZTEST(mcuboot_shared_data, test_signature_type)
|
||||||
|
{
|
||||||
|
uint8_t var[1];
|
||||||
|
int rc;
|
||||||
|
|
||||||
|
memset(var, 0xff, sizeof(var));
|
||||||
|
rc = settings_runtime_get("blinfo/signature_type", var, sizeof(var));
|
||||||
|
zassert_equal(rc, sizeof(var), "Expected data length mismatch");
|
||||||
|
zassert_equal(var[0], MCUBOOT_SIGNATURE_TYPE_RSA, "Expected data mismatch");
|
||||||
|
}
|
||||||
|
|
||||||
|
ZTEST(mcuboot_shared_data, test_recovery)
|
||||||
|
{
|
||||||
|
uint8_t var[1];
|
||||||
|
int rc;
|
||||||
|
|
||||||
|
memset(var, 0xff, sizeof(var));
|
||||||
|
rc = settings_runtime_get("blinfo/recovery", var, sizeof(var));
|
||||||
|
zassert_equal(rc, sizeof(var), "Expected data length mismatch");
|
||||||
|
zassert_equal(var[0], MCUBOOT_RECOVERY_MODE_NONE, "Expected data mismatch");
|
||||||
|
}
|
||||||
|
|
||||||
|
ZTEST(mcuboot_shared_data, test_running_slot)
|
||||||
|
{
|
||||||
|
uint8_t var[1];
|
||||||
|
int rc;
|
||||||
|
|
||||||
|
memset(var, 0xff, sizeof(var));
|
||||||
|
rc = settings_runtime_get("blinfo/running_slot", var, sizeof(var));
|
||||||
|
zassert_equal(rc, sizeof(var), "Expected data length mismatch");
|
||||||
|
zassert_equal(var[0], RUNNING_SLOT, "Expected data mismatch");
|
||||||
|
}
|
||||||
|
|
||||||
|
ZTEST(mcuboot_shared_data, test_bootloader_version)
|
||||||
|
{
|
||||||
|
uint8_t var[8];
|
||||||
|
int rc;
|
||||||
|
struct image_version *version = (void *)var;
|
||||||
|
|
||||||
|
memset(var, 0xff, sizeof(var));
|
||||||
|
rc = settings_runtime_get("blinfo/bootloader_version", var, sizeof(var));
|
||||||
|
zassert_equal(rc, sizeof(var), "Expected data length mismatch");
|
||||||
|
|
||||||
|
zassert_equal(version->iv_major, MCUBOOT_VERSION_MAJOR,
|
||||||
|
"Expected version (major) mismatch");
|
||||||
|
zassert_equal(version->iv_minor, MCUBOOT_VERSION_MINOR,
|
||||||
|
"Expected version (minor) mismatch");
|
||||||
|
zassert_equal(version->iv_revision, MCUBOOT_PATCHLEVEL,
|
||||||
|
"Expected version (patch level) mismatch");
|
||||||
|
zassert_equal(version->iv_build_num, 0, "Expected version (build number) mismatch");
|
||||||
|
}
|
||||||
|
|
||||||
|
ZTEST(mcuboot_shared_data, test_max_application_size)
|
||||||
|
{
|
||||||
|
uint8_t var[4];
|
||||||
|
uint32_t value;
|
||||||
|
int rc;
|
||||||
|
|
||||||
|
memset(var, 0xff, sizeof(var));
|
||||||
|
rc = settings_runtime_get("blinfo/max_application_size", var, sizeof(var));
|
||||||
|
zassert_equal(rc, sizeof(var), "Expected data length mismatch");
|
||||||
|
memcpy(&value, var, sizeof(value));
|
||||||
|
value /= FLASH_SECTOR_SIZE;
|
||||||
|
zassert_equal(value, FLASH_MAX_APP_SIZE, "Expected data mismatch");
|
||||||
|
}
|
||||||
|
|
||||||
|
ZTEST(mcuboot_shared_data, test_invalid)
|
||||||
|
{
|
||||||
|
uint8_t var[4];
|
||||||
|
int rc;
|
||||||
|
|
||||||
|
memset(var, 0xff, sizeof(var));
|
||||||
|
rc = settings_runtime_get("blinfo/does_not_exist", var, sizeof(var));
|
||||||
|
zassert_not_equal(rc, sizeof(var), "Expected data length (error) mismatch");
|
||||||
|
zassert_not_equal(rc, 0, "Expected data length (error) mismatch");
|
||||||
|
}
|
||||||
|
|
||||||
|
ZTEST(mcuboot_shared_data, test_bootloader_version_limited)
|
||||||
|
{
|
||||||
|
uint8_t var[2];
|
||||||
|
int rc;
|
||||||
|
|
||||||
|
memset(var, 0xff, sizeof(var));
|
||||||
|
rc = settings_runtime_get("blinfo/bootloader_version", var, sizeof(var));
|
||||||
|
zassert_not_equal(rc, sizeof(var), "Expected data length mismatch");
|
||||||
|
}
|
||||||
|
|
||||||
|
ZTEST_SUITE(mcuboot_shared_data, NULL, NULL, NULL, NULL, NULL);
|
1
tests/boot/mcuboot_data_sharing/sysbuild.conf
Normal file
1
tests/boot/mcuboot_data_sharing/sysbuild.conf
Normal file
|
@ -0,0 +1 @@
|
||||||
|
SB_CONFIG_BOOTLOADER_MCUBOOT=y
|
|
@ -0,0 +1,5 @@
|
||||||
|
CONFIG_USE_SEGGER_RTT=n
|
||||||
|
CONFIG_NORDIC_QSPI_NOR=n
|
||||||
|
CONFIG_BOOT_VALIDATE_SLOT0=n
|
||||||
|
CONFIG_MCUBOOT_CLEANUP_ARM_CORE=n
|
||||||
|
CONFIG_BOOT_WATCHDOG_FEED=n
|
|
@ -0,0 +1,8 @@
|
||||||
|
/* SPDX-License-Identifier: Apache-2.0 */
|
||||||
|
#include "../../../boards/nrf52840dk_nrf52840.overlay"
|
||||||
|
|
||||||
|
/ {
|
||||||
|
chosen {
|
||||||
|
zephyr,code-partition = &boot_partition;
|
||||||
|
};
|
||||||
|
};
|
|
@ -0,0 +1,7 @@
|
||||||
|
CONFIG_RETAINED_MEM=y
|
||||||
|
CONFIG_RETENTION=y
|
||||||
|
CONFIG_BOOT_SHARE_DATA=y
|
||||||
|
CONFIG_BOOT_SHARE_DATA_BOOTINFO=y
|
||||||
|
CONFIG_BOOT_SHARE_BACKEND_RETENTION=y
|
||||||
|
CONFIG_FLASH=y
|
||||||
|
CONFIG_FLASH_MAP=y
|
14
tests/boot/mcuboot_data_sharing/testcase.yaml
Normal file
14
tests/boot/mcuboot_data_sharing/testcase.yaml
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
#
|
||||||
|
# Copyright (c) 2023 Nordic Semiconductor ASA
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
#
|
||||||
|
common:
|
||||||
|
sysbuild: true
|
||||||
|
tests:
|
||||||
|
mcuboot.data.sharing:
|
||||||
|
platform_allow: nrf52840dk_nrf52840
|
||||||
|
tags:
|
||||||
|
- mcuboot
|
||||||
|
- sysbuild
|
||||||
|
- retention
|
Loading…
Add table
Add a link
Reference in a new issue