Skip to content

Commit cd5e6e9

Browse files
committed
[nrf noup] Add routines for application
Adapt manifest headers, so they can be used by the main application. Signed-off-by: Tomasz Chyrowicz <[email protected]>
1 parent a9f7a21 commit cd5e6e9

File tree

2 files changed

+82
-40
lines changed

2 files changed

+82
-40
lines changed

boot/bootutil/include/bootutil/mcuboot_manifest.h

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,29 @@
1515

1616
#include <stdint.h>
1717
#include "bootutil/bootutil.h"
18+
#ifdef CONFIG_MCUBOOT
1819
#include "bootutil/crypto/sha.h"
20+
#elif defined(CONFIG_MCUBOOT_BOOTLOADER_USES_SHA512)
21+
#define IMAGE_HASH_SIZE (64)
22+
#else
23+
#define IMAGE_HASH_SIZE (32)
24+
#endif
25+
26+
#ifndef MCUBOOT_MANIFEST_IMAGE_NUMBER
27+
#ifdef CONFIG_NCS_MCUBOOT_MANIFEST_IMAGE_NUMBER
28+
#define MCUBOOT_MANIFEST_IMAGE_NUMBER CONFIG_NCS_MCUBOOT_MANIFEST_IMAGE_NUMBER
29+
#else
30+
#error "MCUBOOT_MANIFEST_IMAGE_NUMBER must be defined when MCUBOOT_MANIFEST_UPDATES is enabled"
31+
#endif
32+
#endif
33+
34+
#ifndef MCUBOOT_IMAGE_NUMBER
35+
#ifdef CONFIG_UPDATEABLE_IMAGE_NUMBER
36+
#define MCUBOOT_IMAGE_NUMBER CONFIG_UPDATEABLE_IMAGE_NUMBER
37+
#else
38+
#error "MCUBOOT_IMAGE_NUMBER must be defined when MCUBOOT_MANIFEST_UPDATES is enabled"
39+
#endif
40+
#endif
1941

2042
#ifndef __packed
2143
#define __packed __attribute__((__packed__))

boot/bootutil/src/bootutil_public.c

Lines changed: 60 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,10 @@
5656
#define SEND_BOOT_REQUEST
5757
#endif /* CONFIG_NRF_MCUBOOT_BOOT_REQUEST && !CONFIG_MCUBOOT */
5858

59+
#ifdef CONFIG_NCS_MCUBOOT_MANIFEST_UPDATES
60+
#include <bootutil/mcuboot_manifest.h>
61+
#endif /* CONFIG_NCS_MCUBOOT_MANIFEST_UPDATES */
62+
5963
#ifdef CONFIG_MCUBOOT
6064
BOOT_LOG_MODULE_DECLARE(mcuboot);
6165
#else
@@ -243,6 +247,45 @@ boot_read_copy_done(const struct flash_area *fap, uint8_t *copy_done)
243247
return boot_read_flag(fap, copy_done, boot_copy_done_off(fap));
244248
}
245249

250+
#if defined(SEND_BOOT_REQUEST) || (!defined(MCUBOOT_BOOTUTIL_LIB_FOR_DIRECT_XIP)) || \
251+
defined(CONFIG_NCS_MCUBOOT_MANIFEST_UPDATES)
252+
static int flash_area_to_image_slot(const struct flash_area *fa, uint32_t *slot)
253+
{
254+
int id = flash_area_get_id(fa);
255+
#if BOOT_IMAGE_NUMBER > 1
256+
uint8_t i = 0;
257+
258+
for (i = 0; i < BOOT_IMAGE_NUMBER; i++) {
259+
if (FLASH_AREA_IMAGE_PRIMARY(i) == id) {
260+
if (slot != NULL) {
261+
*slot = 0;
262+
}
263+
return i;
264+
} else if (FLASH_AREA_IMAGE_SECONDARY(i) == id) {
265+
if (slot != NULL) {
266+
*slot = 1;
267+
}
268+
return i;
269+
}
270+
}
271+
272+
/* Image not found */
273+
*slot = UINT32_MAX;
274+
#else
275+
(void)fa;
276+
if (slot != NULL) {
277+
if (FLASH_AREA_IMAGE_PRIMARY(0) == id) {
278+
*slot = 0;
279+
} else if (FLASH_AREA_IMAGE_SECONDARY(0) == id) {
280+
*slot = 1;
281+
} else {
282+
*slot = UINT32_MAX;
283+
}
284+
}
285+
#endif
286+
return 0;
287+
}
288+
#endif /* SEND_BOOT_REQUEST || !MCUBOOT_BOOTUTIL_LIB_FOR_DIRECT_XIP || CONFIG_NCS_MCUBOOT_MANIFEST_UPDATES */
246289

247290
int
248291
boot_read_swap_state(const struct flash_area *fap,
@@ -251,7 +294,23 @@ boot_read_swap_state(const struct flash_area *fap,
251294
uint8_t magic[BOOT_MAGIC_SZ];
252295
uint32_t off;
253296
uint8_t swap_info;
254-
int rc;
297+
int rc = -1;
298+
#ifdef CONFIG_NCS_MCUBOOT_MANIFEST_UPDATES
299+
enum boot_slot slot_id = BOOT_SLOT_NONE;
300+
int image_id = flash_area_to_image_slot(fap, &slot_id);
301+
302+
/* If manifest-based updates are used, only the manifest image is considered. */
303+
image_id = CONFIG_NCS_MCUBOOT_MANIFEST_IMAGE_NUMBER;
304+
if (slot_id == BOOT_SLOT_PRIMARY) {
305+
rc = flash_area_open(FLASH_AREA_IMAGE_PRIMARY(image_id), &fap);
306+
} else if (slot_id == BOOT_SLOT_SECONDARY) {
307+
rc = flash_area_open(FLASH_AREA_IMAGE_SECONDARY(image_id), &fap);
308+
}
309+
310+
if (rc != 0) {
311+
return rc;
312+
}
313+
#endif /* CONFIG_NCS_MCUBOOT_MANIFEST_UPDATES */
255314

256315
off = boot_magic_off(fap);
257316
rc = flash_area_read(fap, off, magic, BOOT_MAGIC_SZ);
@@ -398,45 +457,6 @@ boot_write_image_ok(const struct flash_area *fap)
398457
return boot_write_trailer_flag(fap, off, BOOT_FLAG_SET);
399458
}
400459

401-
#if defined(SEND_BOOT_REQUEST) || (!defined(MCUBOOT_BOOTUTIL_LIB_FOR_DIRECT_XIP))
402-
static int flash_area_to_image_slot(const struct flash_area *fa, uint32_t *slot)
403-
{
404-
int id = flash_area_get_id(fa);
405-
#if BOOT_IMAGE_NUMBER > 1
406-
uint8_t i = 0;
407-
408-
for (i = 0; i < BOOT_IMAGE_NUMBER; i++) {
409-
if (FLASH_AREA_IMAGE_PRIMARY(i) == id) {
410-
if (slot != NULL) {
411-
*slot = 0;
412-
}
413-
return i;
414-
} else if (FLASH_AREA_IMAGE_SECONDARY(i) == id) {
415-
if (slot != NULL) {
416-
*slot = 1;
417-
}
418-
return i;
419-
}
420-
}
421-
422-
/* Image not found */
423-
*slot = UINT32_MAX;
424-
#else
425-
(void)fa;
426-
if (slot != NULL) {
427-
if (FLASH_AREA_IMAGE_PRIMARY(0) == id) {
428-
*slot = 0;
429-
} else if (FLASH_AREA_IMAGE_SECONDARY(0) == id) {
430-
*slot = 1;
431-
} else {
432-
*slot = UINT32_MAX;
433-
}
434-
}
435-
#endif
436-
return 0;
437-
}
438-
#endif /* SEND_BOOT_REQUEST || !MCUBOOT_BOOTUTIL_LIB_FOR_DIRECT_XIP */
439-
440460
int
441461
boot_read_image_ok(const struct flash_area *fap, uint8_t *image_ok)
442462
{

0 commit comments

Comments
 (0)