blob: a67126a0b7829fd3f2efad998bcba76c83038baa [file] [log] [blame]
David Vincze03368b82020-04-01 12:53:53 +02001# Copyright (c) 2017-2020 Linaro Limited
David Vinczec3084132020-02-18 14:50:47 +01002# Copyright (c) 2020 Arm Limited
Andrzej Puzdrowski64ad0922017-09-22 11:33:41 +02003#
4# SPDX-License-Identifier: Apache-2.0
5#
6
Marti Bolivar0e091c92018-04-12 11:23:16 -04007mainmenu "MCUboot configuration"
Andrzej Puzdrowski64ad0922017-09-22 11:33:41 +02008
Marti Bolivar0e091c92018-04-12 11:23:16 -04009comment "MCUboot-specific configuration options"
Andrzej Puzdrowski64ad0922017-09-22 11:33:41 +020010
Emanuele Di Santo865777d2018-11-08 11:28:15 +010011# Hidden option to mark a project as MCUboot
12config MCUBOOT
13 default y
14 bool
Rajavardhan Gundi07ba28f2018-12-10 15:44:48 +053015 select MPU_ALLOW_FLASH_WRITE if ARM_MPU
Marcin Niestrojc6be76a2020-03-22 14:39:35 +010016 select USE_DT_CODE_PARTITION if HAS_FLASH_LOAD_OFFSET
Andrzej Puzdrowskif573b392020-11-10 14:35:15 +010017 select MCUBOOT_BOOTUTIL_LIB
Emanuele Di Santo865777d2018-11-08 11:28:15 +010018
Marti Bolivarbc2fa4e2018-04-12 12:18:32 -040019config BOOT_USE_MBEDTLS
20 bool
21 # Hidden option
22 default n
23 help
24 Use mbedTLS for crypto primitives.
25
26config BOOT_USE_TINYCRYPT
27 bool
28 # Hidden option
29 default n
Sebastian Bøe913a3852019-01-22 13:53:12 +010030 # When building for ECDSA, we use our own copy of mbedTLS, so the
31 # Zephyr one must not be enabled or the MBEDTLS_CONFIG_FILE macros
32 # will collide.
Jamie McCrae47b34362023-11-21 10:38:41 +000033 select MBEDTLS_PROMPTLESS
Marti Bolivarbc2fa4e2018-04-12 12:18:32 -040034 help
35 Use TinyCrypt for crypto primitives.
36
Sigvart Hovlandebd05032019-03-21 10:47:32 +010037config BOOT_USE_CC310
38 bool
39 # Hidden option
40 default n
41 # When building for ECDSA, we use our own copy of mbedTLS, so the
42 # Zephyr one must not be enabled or the MBEDTLS_CONFIG_FILE macros
43 # will collide.
Sigvart Hovlandebd05032019-03-21 10:47:32 +010044 help
45 Use cc310 for crypto primitives.
46
47config BOOT_USE_NRF_CC310_BL
48 bool
49 default n
50
51config NRFXLIB_CRYPTO
52 bool
53 default n
54
55config NRF_CC310_BL
56 bool
57 default n
58
Andrzej Puzdrowski97543282018-04-12 15:16:56 +020059menu "MCUBoot settings"
60
Andrzej Puzdrowskifdff3e12020-09-15 08:23:25 +020061config SINGLE_APPLICATION_SLOT
62 bool "Single slot bootloader"
Dominik Ermel4dc3f442020-05-26 08:45:14 +000063 default n
64 help
65 Single image area is used for application which means that
66 uploading a new application overwrites the one that previously
67 occupied the area.
68
Håkon Øye Amundsen21f03762021-11-12 08:21:31 +000069choice BOOT_SIGNATURE_TYPE
Marti Bolivarbc2fa4e2018-04-12 12:18:32 -040070 prompt "Signature type"
71 default BOOT_SIGNATURE_TYPE_RSA
72
Arvin Farahmandfb5ec182020-05-05 11:44:12 -040073config BOOT_SIGNATURE_TYPE_NONE
74 bool "No signature; use only hash check"
75 select BOOT_USE_TINYCRYPT
76
Marti Bolivarbc2fa4e2018-04-12 12:18:32 -040077config BOOT_SIGNATURE_TYPE_RSA
78 bool "RSA signatures"
79 select BOOT_USE_MBEDTLS
Marti Bolivara4818a52018-04-12 13:02:38 -040080 select MBEDTLS
Jamie McCrae25d2f2c2023-07-17 14:17:53 +010081 select BOOT_ENCRYPTION_SUPPORT
Marti Bolivarbc2fa4e2018-04-12 12:18:32 -040082
Fabio Utzig105b59a2019-05-13 15:08:12 -070083if BOOT_SIGNATURE_TYPE_RSA
84config BOOT_SIGNATURE_TYPE_RSA_LEN
85 int "RSA signature length"
86 range 2048 3072
87 default 2048
88endif
89
Marti Bolivarbc2fa4e2018-04-12 12:18:32 -040090config BOOT_SIGNATURE_TYPE_ECDSA_P256
91 bool "Elliptic curve digital signatures with curve P-256"
Jamie McCrae25d2f2c2023-07-17 14:17:53 +010092 select BOOT_ENCRYPTION_SUPPORT
Marti Bolivarbc2fa4e2018-04-12 12:18:32 -040093
Sigvart Hovlandebd05032019-03-21 10:47:32 +010094if BOOT_SIGNATURE_TYPE_ECDSA_P256
Håkon Øye Amundsen21f03762021-11-12 08:21:31 +000095choice BOOT_ECDSA_IMPLEMENTATION
Sigvart Hovlandebd05032019-03-21 10:47:32 +010096 prompt "Ecdsa implementation"
Fabio Utzig34e93a52020-02-03 09:59:53 -030097 default BOOT_ECDSA_TINYCRYPT
Håkon Øye Amundsenee7282d2020-09-28 09:48:29 +000098
Fabio Utzig34e93a52020-02-03 09:59:53 -030099config BOOT_ECDSA_TINYCRYPT
Sigvart Hovlandebd05032019-03-21 10:47:32 +0100100 bool "Use tinycrypt"
101 select BOOT_USE_TINYCRYPT
Håkon Øye Amundsenee7282d2020-09-28 09:48:29 +0000102
103config BOOT_ECDSA_CC310
Sigvart Hovlandebd05032019-03-21 10:47:32 +0100104 bool "Use CC310"
Håkon Øye Amundsenee7282d2020-09-28 09:48:29 +0000105 depends on HAS_HW_NRF_CC310
106 select BOOT_USE_NRF_CC310_BL
107 select NRF_CC310_BL
108 select NRFXLIB_CRYPTO
Sigvart Hovlandebd05032019-03-21 10:47:32 +0100109 select BOOT_USE_CC310
Håkon Øye Amundsenee7282d2020-09-28 09:48:29 +0000110endchoice # Ecdsa implementation
Sigvart Hovlandebd05032019-03-21 10:47:32 +0100111endif
Fabio Utzig34e93a52020-02-03 09:59:53 -0300112
113config BOOT_SIGNATURE_TYPE_ED25519
114 bool "Edwards curve digital signatures using ed25519"
Jamie McCrae25d2f2c2023-07-17 14:17:53 +0100115 select BOOT_ENCRYPTION_SUPPORT
Fabio Utzig34e93a52020-02-03 09:59:53 -0300116
117if BOOT_SIGNATURE_TYPE_ED25519
Håkon Øye Amundsen21f03762021-11-12 08:21:31 +0000118choice BOOT_ED25519_IMPLEMENTATION
Fabio Utzig34e93a52020-02-03 09:59:53 -0300119 prompt "Ecdsa implementation"
120 default BOOT_ED25519_TINYCRYPT
121config BOOT_ED25519_TINYCRYPT
122 bool "Use tinycrypt"
123 select BOOT_USE_TINYCRYPT
124config BOOT_ED25519_MBEDTLS
125 bool "Use mbedTLS"
126 select BOOT_USE_MBEDTLS
127 select MBEDTLS
128endchoice
129endif
130
Marti Bolivarbc2fa4e2018-04-12 12:18:32 -0400131endchoice
132
Fabio Utzigc690c762018-04-26 10:51:09 -0300133config BOOT_SIGNATURE_KEY_FILE
134 string "PEM key file"
Håkon Øye Amundsen705c6c22020-09-28 09:45:40 +0000135 default "root-ec-p256.pem" if BOOT_SIGNATURE_TYPE_ECDSA_P256
136 default "root-ed25519.pem" if BOOT_SIGNATURE_TYPE_ED25519
137 default "root-rsa-3072.pem" if BOOT_SIGNATURE_TYPE_RSA && BOOT_SIGNATURE_TYPE_RSA_LEN=3072
138 default "root-rsa-2048.pem" if BOOT_SIGNATURE_TYPE_RSA && BOOT_SIGNATURE_TYPE_RSA_LEN=2048
Fabio Utzigc690c762018-04-26 10:51:09 -0300139 default ""
140 help
Marek Pietabdcfc852020-08-04 02:22:55 -0700141 You can use either absolute or relative path.
142 In case relative path is used, the build system assumes that it starts
143 from the directory where the MCUBoot KConfig configuration file is
144 located. If the key file is not there, the build system uses relative
145 path that starts from the MCUBoot repository root directory.
Fabio Utzigc690c762018-04-26 10:51:09 -0300146 The key file will be parsed by imgtool's getpub command and a .c source
147 with the public key information will be written in a format expected by
148 MCUboot.
149
Andrzej Puzdrowski9a605b62020-03-16 13:34:30 +0100150config MCUBOOT_CLEANUP_ARM_CORE
151 bool "Perform core cleanup before chain-load the application"
152 depends on CPU_CORTEX_M
Jamie McCrae9e8eddc2023-02-27 12:51:09 +0000153 default y
Ioannis Glaropoulos518d93a2020-10-22 14:22:14 +0200154 help
155 This option instructs MCUboot to perform a clean-up of a set of
Marcin Niestroj9ced4592023-05-17 14:50:57 +0200156 architecture core HW registers before jumping to the application
Ioannis Glaropoulos518d93a2020-10-22 14:22:14 +0200157 firmware. The clean-up sets these registers to their warm-reset
158 values as specified by the architecture.
159
Jamie McCrae9e8eddc2023-02-27 12:51:09 +0000160 This option is enabled by default to prevent possible problems when
161 booting zephyr (or other) applications whereby e.g. a MPU stack guard
162 may be initialised in RAM which is then used by the application
163 start-up code which can cause a module fault and potentially make the
164 module irrecoverable.
Andrzej Puzdrowski9a605b62020-03-16 13:34:30 +0100165
Marti Bolivara4818a52018-04-12 13:02:38 -0400166config MBEDTLS_CFG_FILE
167 default "mcuboot-mbedtls-cfg.h"
168
David Vincze03368b82020-04-01 12:53:53 +0200169config BOOT_HW_KEY
170 bool "Use HW key for image verification"
171 default n
172 help
173 Use HW key for image verification, otherwise the public key is embedded
174 in MCUBoot. If enabled the public key is appended to the signed image
175 and requires the hash of the public key to be provisioned to the device
176 beforehand.
177
Marti Bolivarbc2fa4e2018-04-12 12:18:32 -0400178config BOOT_VALIDATE_SLOT0
David Vincze2d736ad2019-02-18 11:50:22 +0100179 bool "Validate image in the primary slot on every boot"
Marti Bolivarbc2fa4e2018-04-12 12:18:32 -0400180 default y
181 help
David Vincze2d736ad2019-02-18 11:50:22 +0100182 If y, the bootloader attempts to validate the signature of the
183 primary slot every boot. This adds the signature check time to
Marti Bolivarbc2fa4e2018-04-12 12:18:32 -0400184 every boot, but can mitigate against some changes that are
185 able to modify the flash image itself.
186
Wouter Cappellebb7a39d2021-05-03 16:44:44 +0200187config BOOT_VALIDATE_SLOT0_ONCE
188 bool "Validate image in the primary slot just once after after upgrade"
189 depends on !BOOT_VALIDATE_SLOT0 && SINGLE_APPLICATION_SLOT
190 default n
191 help
192 If y, the bootloader attempts to validate the signature of the
193 primary slot only once after an upgrade of the main slot.
194 It caches the result in the magic area, which makes it an unsecure
195 method. This option is usefull for lowering the boot up time for
196 low end devices with as a compromise lowering the security level.
197 If unsure, leave at the default value.
198
David Brown08a30a42022-04-26 14:49:51 -0600199config BOOT_PREFER_SWAP_MOVE
200 bool "Prefer the newer swap move algorithm"
201 default y if SOC_FAMILY_NRF
Thomas Strangeraa217e22022-10-28 21:17:55 +0200202 default y if !$(dt_nodelabel_enabled,scratch_partition)
David Brown08a30a42022-04-26 14:49:51 -0600203 help
204 If y, the BOOT_IMAGE_UPGRADE_MODE will default to using
205 "move" instead of "scratch". This is a separate bool config
206 option, because Kconfig doesn't allow defaults to be
207 overridden in choice options. Most devices should be using
208 swap move.
209
Andrzej Puzdrowskifdff3e12020-09-15 08:23:25 +0200210if !SINGLE_APPLICATION_SLOT
Håkon Øye Amundsen21f03762021-11-12 08:21:31 +0000211choice BOOT_IMAGE_UPGRADE_MODE
David Vincze5a6e1812020-06-29 13:34:42 +0200212 prompt "Image upgrade modes"
David Brown08a30a42022-04-26 14:49:51 -0600213 default BOOT_SWAP_USING_MOVE if BOOT_PREFER_SWAP_MOVE
David Vincze5a6e1812020-06-29 13:34:42 +0200214 default BOOT_SWAP_USING_SCRATCH
215
216config BOOT_SWAP_USING_SCRATCH
217 bool "Swap mode that run with the scratch partition"
218 help
219 This is the most conservative swap mode but it can work even on
220 devices with heterogeneous flash page layout.
221
Marti Bolivarbc2fa4e2018-04-12 12:18:32 -0400222config BOOT_UPGRADE_ONLY
223 bool "Overwrite image updates instead of swapping"
Marti Bolivarbc2fa4e2018-04-12 12:18:32 -0400224 help
David Vincze2d736ad2019-02-18 11:50:22 +0100225 If y, overwrite the primary slot with the upgrade image instead
226 of swapping them. This prevents the fallback recovery, but
Marti Bolivarbc2fa4e2018-04-12 12:18:32 -0400227 uses a much simpler code path.
228
Fabio Utzigc58842e2019-11-28 10:30:01 -0300229config BOOT_SWAP_USING_MOVE
Fabio Utzigdd2b6802020-01-06 09:10:45 -0300230 bool "Swap mode that can run without a scratch partition"
Fabio Utzigc58842e2019-11-28 10:30:01 -0300231 help
232 If y, the swap upgrade is done in two steps, where first every
233 sector of the primary slot is moved up one sector, then for
234 each sector X in the secondary slot, it is moved to index X in
235 the primary slot, then the sector at X+1 in the primary is
236 moved to index X in the secondary.
237 This allows a swap upgrade without using a scratch partition,
238 but is currently limited to all sectors in both slots being of
239 the same size.
David Vincze5a6e1812020-06-29 13:34:42 +0200240
241config BOOT_DIRECT_XIP
242 bool "Run the latest image directly from its slot"
243 help
244 If y, mcuboot selects the newest valid image based on the image version
245 numbers, thereafter the selected image can run directly from its slot
246 without having to move/copy it into the primary slot. For this reason the
247 images must be linked to be executed from the given image slot. Using this
248 mode results in a simpler code path and smaller code size.
249
Johan Öhmanb5889072022-04-01 09:10:28 +0200250config BOOT_RAM_LOAD
251 bool "RAM load"
252 help
253 If y, mcuboot selects the newest valid image based on the image version
254 numbers, thereafter the selected image is copied to RAM and executed from
255 there. For this reason, the image has to be linked to be executed from RAM.
256 The address that the image is copied to is specified using the load-addr
257 argument to the imgtool.py script which writes it to the image header.
258
Jamie McCrae215345f2023-08-16 07:37:18 +0100259config BOOT_FIRMWARE_LOADER
260 bool "Firmware loader"
261 help
262 If y, mcuboot will have a single application slot, and the secondary
263 slot will be for a non-upgradeable firmware loaded image (e.g. for
264 loading firmware via Bluetooth). The main application will boot by
265 default unless there is an error with it or the boot mode has been
266 forced to the firmware loader.
267
268 Note: The firmware loader image must be signed with the same signing
269 key as the primary image.
270
David Vincze5a6e1812020-06-29 13:34:42 +0200271endchoice
Fabio Utzigc58842e2019-11-28 10:30:01 -0300272
Johan Öhmanb5889072022-04-01 09:10:28 +0200273# Workaround for not being able to have commas in macro arguments
274DT_CHOSEN_Z_SRAM := zephyr,sram
275
276if BOOT_RAM_LOAD
277config BOOT_IMAGE_EXECUTABLE_RAM_START
278 hex "Boot image executable ram start"
279 default $(dt_chosen_reg_addr_hex,$(DT_CHOSEN_Z_SRAM))
280
281config BOOT_IMAGE_EXECUTABLE_RAM_SIZE
282 int "Boot image executable base size"
283 default $(dt_chosen_reg_size_int,$(DT_CHOSEN_Z_SRAM),0)
284endif
285
David Vincze505fba22020-10-22 13:53:29 +0200286config BOOT_DIRECT_XIP_REVERT
287 bool "Enable the revert mechanism in direct-xip mode"
Andrzej Puzdrowski32342e72020-11-18 17:04:44 +0100288 depends on BOOT_DIRECT_XIP
David Vincze505fba22020-10-22 13:53:29 +0200289 default n
290 help
291 If y, enables the revert mechanism in direct-xip similar to the one in
292 swap mode. It requires the trailer magic to be added to the signed image.
293 When a reboot happens without the image being confirmed at runtime, the
294 bootloader considers the image faulty and erases it. After this it will
295 attempt to boot the previous image. The images can also be made permanent
296 (marked as confirmed in advance) just like in swap mode.
297
Fabio Utzigd0533ed2018-12-19 07:56:33 -0200298config BOOT_BOOTSTRAP
Sam Bristowd0ca0ff2019-10-30 20:51:35 +1300299 bool "Bootstrap erased the primary slot from the secondary slot"
Fabio Utzigd0533ed2018-12-19 07:56:33 -0200300 default n
301 help
302 If y, enables bootstraping support. Bootstrapping allows an erased
David Vincze2d736ad2019-02-18 11:50:22 +0100303 primary slot to be initialized from a valid image in the secondary slot.
Fabio Utzigd0533ed2018-12-19 07:56:33 -0200304 If unsure, leave at the default value.
305
Fabio Utzigca8ead22019-12-20 07:06:04 -0300306config BOOT_SWAP_SAVE_ENCTLV
307 bool "Save encrypted key TLVs instead of plaintext keys in swap metadata"
308 default n
309 help
310 If y, instead of saving the encrypted image keys in plaintext in the
311 swap resume metadata, save the encrypted image TLVs. This should be used
312 when there is no security mechanism protecting the data in the primary
313 slot from being dumped. If n is selected (default), the keys are written
314 after being decrypted from the image TLVs and could be read by an
315 attacker who has access to the flash contents of the primary slot (eg
316 JTAG/SWD or primary slot in external flash).
317 If unsure, leave at the default value.
318
David Vincze505fba22020-10-22 13:53:29 +0200319endif # !SINGLE_APPLICATION_SLOT
Fabio Utzigb6f014c2020-04-02 13:25:01 -0300320
Jamie McCrae25d2f2c2023-07-17 14:17:53 +0100321config BOOT_ENCRYPTION_SUPPORT
322 bool
323 help
324 Hidden option used to check if image encryption is supported.
325
326config BOOT_ENCRYPT_IMAGE
327 bool "Support for encrypted image updates"
328 depends on BOOT_ENCRYPTION_SUPPORT
329 select BOOT_ENCRYPT_RSA if BOOT_SIGNATURE_TYPE_RSA
330 select BOOT_ENCRYPT_EC256 if BOOT_SIGNATURE_TYPE_ECDSA_P256
331 select BOOT_ENCRYPT_X25519 if BOOT_SIGNATURE_TYPE_ED25519
332 depends on !SINGLE_APPLICATION_SLOT || MCUBOOT_SERIAL
333 help
334 If y, images in the secondary slot can be encrypted and are decrypted
335 on the fly when upgrading to the primary slot, as well as encrypted
336 back when swapping from the primary slot to the secondary slot. The
337 encryption mechanism must match the same type as the signature type,
338 supported types include:
339 - RSA-OAEP (2048 bits).
340 - ECIES using primitives described under "ECIES-P256 encryption" in
341 docs/encrypted_images.md.
342 - ECIES using primitives described under "ECIES-X25519 encryption"
343 in docs/encrypted_images.md.
344
345 Note that for single slot operation, this can still be used to allow
346 loading encrypted images via serial recovery which are then
347 decrypted on-the-fly without needing a second slot.
348
349config BOOT_ENCRYPT_RSA
350 bool
351 help
352 Hidden option selecting RSA encryption.
353
354config BOOT_ENCRYPT_EC256
355 bool
356 help
357 Hidden option selecting EC256 encryption.
358
359config BOOT_ENCRYPT_X25519
360 bool
361 help
362 Hidden option selecting x25519 encryption.
363
Wouter Cappelle953a7612021-05-03 16:53:05 +0200364config BOOT_ENCRYPTION_KEY_FILE
Jamie McCrae25d2f2c2023-07-17 14:17:53 +0100365 string "Encryption key file"
366 depends on BOOT_ENCRYPT_IMAGE
367 default "enc-rsa2048-priv.pem" if BOOT_ENCRYPT_RSA
368 default "enc-ec256-priv.pem" if BOOT_ENCRYPT_EC256
369 default "enc-x25519-priv.pem" if BOOT_ENCRYPT_X25519
Wouter Cappelle953a7612021-05-03 16:53:05 +0200370 default ""
371 help
372 You can use either absolute or relative path.
373 In case relative path is used, the build system assumes that it starts
374 from the directory where the MCUBoot KConfig configuration file is
375 located. If the key file is not there, the build system uses relative
376 path that starts from the MCUBoot repository root directory.
377 The key file will be parsed by imgtool's getpriv command and a .c source
378 with the public key information will be written in a format expected by
379 MCUboot.
380
Marti Bolivar0e091c92018-04-12 11:23:16 -0400381config BOOT_MAX_IMG_SECTORS
382 int "Maximum number of sectors per image slot"
383 default 128
384 help
385 This option controls the maximum number of sectors that each of
386 the two image areas can contain. Smaller values reduce MCUboot's
387 memory usage; larger values allow it to support larger images.
388 If unsure, leave at the default value.
389
Jamie McCrae4da51012023-08-03 16:23:02 +0100390config BOOT_SHARE_BACKEND_AVAILABLE
391 bool
David Vincze1cf11b52020-03-24 07:51:09 +0100392 default n
393 help
Jamie McCrae4da51012023-08-03 16:23:02 +0100394 Hidden open which indicates if there is a sharing backend available.
395
396# Workaround for not being able to have commas in macro arguments
397DT_CHOSEN_BOOTLOADER_INFO := zephyr,bootloader-info
398
399config BOOT_SHARE_BACKEND_AVAILABLE
400 bool
401 default n
402 help
403 Hidden open which indicates if there is a sharing backend available.
404
405choice BOOT_SHARE_BACKEND
406 prompt "Shared data backend"
407 default BOOT_SHARE_BACKEND_DISABLED
408
409config BOOT_SHARE_BACKEND_DISABLED
410 bool "Disabled"
411 help
412 No data sharing support.
413
414config BOOT_SHARE_BACKEND_RETENTION
415 bool "Retention"
416 depends on RETENTION
417 depends on $(dt_chosen_enabled,$(DT_CHOSEN_BOOTLOADER_INFO))
418 select BOOT_SHARE_BACKEND_AVAILABLE
419 help
420 Use retention to share data with application. Requires:
421 - Retained memory area
422 - Retention partition of retained memory area
423 - Chosen node "zephyr,bootloader-info" to be set to the retention
424 partition
425
426config BOOT_SHARE_BACKEND_EXTERNAL
427 bool "External (user-provided code)"
428 select BOOT_SHARE_BACKEND_AVAILABLE
429 help
430 Use a custom user-specified storage.
431
432endchoice
433
434menuconfig BOOT_SHARE_DATA
435 bool "Save application specific data"
436 default n
437 depends on BOOT_SHARE_BACKEND_AVAILABLE
438 help
439 This will allow data to be shared between MCUboot and an application,
440 it does not include any informatiom by default.
441
442 Note: This requires a backend to function, see
443 BOOT_SHARE_BACKEND_RETENTION for details on using the retention
444 subsystem as a backend.
445
446config BOOT_SHARE_DATA_BOOTINFO
447 bool "Save boot information data"
448 default n
449 depends on BOOT_SHARE_DATA
450 help
451 This will place information about the MCUboot configuration and
452 running application into a shared memory area.
453
454menuconfig MEASURED_BOOT
455 bool "Store the boot state/measurements in shared memory area"
456 default n
457 depends on BOOT_SHARE_BACKEND_AVAILABLE
458 help
David Vincze1cf11b52020-03-24 07:51:09 +0100459 If enabled, the bootloader will store certain boot measurements such as
460 the hash of the firmware image in a shared memory area. This data can
461 be used later by runtime services (e.g. by a device attestation service).
462
Jamie McCrae4da51012023-08-03 16:23:02 +0100463 Note: This requires a backend to function, see
464 BOOT_SHARE_BACKEND_RETENTION for details on using the retention
465 subsystem as a backend.
466
467config MEASURED_BOOT_MAX_CBOR_SIZE
468 int "Maximum CBOR size of boot state/measurements"
469 default 64
470 range 0 256
471 depends on MEASURED_BOOT
472 help
473 The maximum size of the CBOR message which stores boot
474 state/measurements.
David Vincze1cf11b52020-03-24 07:51:09 +0100475
Håkon Øye Amundsen21f03762021-11-12 08:21:31 +0000476choice BOOT_FAULT_INJECTION_HARDENING_PROFILE
Tamas Banfce87332020-07-10 12:40:11 +0100477 prompt "Fault injection hardening profile"
478 default BOOT_FIH_PROFILE_OFF
479
480config BOOT_FIH_PROFILE_OFF
481 bool "No hardening against hardware level fault injection"
482 help
483 No hardening in SW against hardware level fault injection: power or
484 clock glitching, etc.
485
486config BOOT_FIH_PROFILE_LOW
487 bool "Moderate level hardening against hardware level fault injection"
488 help
489 Moderate level hardening: Long global fail loop to avoid break out,
490 control flow integrity check to discover discrepancy in expected code
491 flow.
492
493config BOOT_FIH_PROFILE_MEDIUM
494 bool "Medium level hardening against hardware level fault injection"
495 help
496 Medium level hardening: Long global fail loop to avoid break out,
497 control flow integrity check to discover discrepancy in expected code
498 flow, double variables to discover register or memory corruption.
499
500config BOOT_FIH_PROFILE_HIGH
501 bool "Maximum level hardening against hardware level fault injection"
502 select MBEDTLS
503 help
504 Maximum level hardening: Long global fail loop to avoid break out,
505 control flow integrity check to discover discrepancy in expected code
506 flow, double variables to discover register or memory corruption, random
507 delays to make code execution less predictable. Random delays requires an
508 entropy source.
509
510endchoice
511
Josh Gao837cf882020-11-13 18:51:27 -0800512choice BOOT_USB_DFU
513 prompt "USB DFU"
514 default BOOT_USB_DFU_NO
515
516config BOOT_USB_DFU_NO
517 prompt "Disabled"
518
519config BOOT_USB_DFU_WAIT
Rajavardhan Gundi51c9d702019-02-20 14:08:52 +0530520 bool "Wait for a prescribed duration to see if USB DFU is invoked"
Johann Fischer25852972021-08-02 13:20:09 +0200521 select USB_DEVICE_STACK
Rajavardhan Gundi51c9d702019-02-20 14:08:52 +0530522 select USB_DFU_CLASS
523 select IMG_MANAGER
Dominik Ermel143485e2023-03-17 11:33:42 +0000524 select STREAM_FLASH
525 select MULTITHREADING
Rajavardhan Gundi51c9d702019-02-20 14:08:52 +0530526 help
527 If y, MCUboot waits for a prescribed duration of time to allow
528 for USB DFU to be invoked. Please note DFU always updates the
529 slot1 image.
530
Josh Gao837cf882020-11-13 18:51:27 -0800531config BOOT_USB_DFU_GPIO
532 bool "Use GPIO to detect whether to trigger DFU mode"
Johann Fischer25852972021-08-02 13:20:09 +0200533 select USB_DEVICE_STACK
Josh Gao837cf882020-11-13 18:51:27 -0800534 select USB_DFU_CLASS
535 select IMG_MANAGER
Dominik Ermel143485e2023-03-17 11:33:42 +0000536 select STREAM_FLASH
537 select MULTITHREADING
Josh Gao837cf882020-11-13 18:51:27 -0800538 help
539 If y, MCUboot uses GPIO to detect whether to invoke USB DFU.
540
541endchoice
542
543config BOOT_USB_DFU_WAIT_DELAY_MS
544 int "USB DFU wait duration"
545 depends on BOOT_USB_DFU_WAIT
546 default 12000
547 help
548 Milliseconds to wait for USB DFU to be invoked.
549
550if BOOT_USB_DFU_GPIO
551
Josh Gao837cf882020-11-13 18:51:27 -0800552config BOOT_USB_DFU_DETECT_DELAY
553 int "Serial detect pin detection delay time [ms]"
554 default 0
555 help
556 Used to prevent the bootloader from loading on button press.
557 Useful for powering on when using the same button as
558 the one used to place the device in bootloader mode.
559
560endif # BOOT_USB_DFU_GPIO
561
David Brownf6d14c22019-12-10 15:36:36 -0700562config BOOT_USE_BENCH
563 bool "Enable benchmark code"
564 default n
565 help
566 If y, adds support for simple benchmarking that can record
567 time intervals between two calls. The time printed depends
568 on the particular Zephyr target, and is generally ticks of a
569 specific board-specific timer.
570
Michael Scott74ceae52019-02-01 14:01:09 -0800571module = MCUBOOT
Piotr Mienkowski15aa6ef2019-04-08 22:48:15 +0200572module-str = MCUBoot bootloader
Michael Scott74ceae52019-02-01 14:01:09 -0800573source "subsys/logging/Kconfig.template.log_config"
Michael Scott74ceae52019-02-01 14:01:09 -0800574
Andrzej Puzdrowskiaf148532020-02-25 12:51:26 +0100575config MCUBOOT_LOG_THREAD_STACK_SIZE
576 int "Stack size for the MCUBoot log processing thread"
577 depends on LOG && !LOG_IMMEDIATE
578 default 2048 if COVERAGE_GCOV
579 default 1024 if NO_OPTIMIZATIONS
580 default 1024 if XTENSA
581 default 4096 if (X86 && X86_64)
582 default 4096 if ARM64
583 default 768
584 help
585 Set the internal stack size for MCUBoot log processing thread.
586
Andrzej Puzdrowski6c00b5e2022-04-01 16:51:27 +0200587config MCUBOOT_INDICATION_LED
588 bool "Turns on LED indication when device is in DFU"
Jamie McCrae2c867552023-07-27 14:18:47 +0100589 select GPIO
Andrzej Puzdrowski6c00b5e2022-04-01 16:51:27 +0200590 help
591 Device device activates the LED while in bootloader mode.
Jeppe Odgaard1dbe0cf2023-05-17 11:09:10 +0200592 mcuboot-led0 alias must be set in the device's .dts
Andrzej Puzdrowski6c00b5e2022-04-01 16:51:27 +0200593 definitions for this to work.
594
Andrzej Puzdrowski35f61d32022-04-01 17:00:08 +0200595rsource "Kconfig.serial_recovery"
Andrzej Puzdrowski64ad0922017-09-22 11:33:41 +0200596
Jamie McCrae215345f2023-08-16 07:37:18 +0100597rsource "Kconfig.firmware_loader"
598
Rafał Kuźniad854bb62020-06-17 15:06:47 +0200599config BOOT_INTR_VEC_RELOC
600 bool "Relocate the interrupt vector to the application"
601 default n
602 depends on SW_VECTOR_RELAY || CPU_CORTEX_M_HAS_VTOR
603 help
604 Relocate the interrupt vector to the application before it is started.
605 Select this option if application requires vector relocation,
606 but it doesn't relocate vector in its reset handler.
607
Andrzej Puzdrowski16b6d152020-06-01 14:16:54 +0200608config UPDATEABLE_IMAGE_NUMBER
609 int "Number of updateable images"
610 default 1
Andrzej Puzdrowskifdff3e12020-09-15 08:23:25 +0200611 range 1 1 if SINGLE_APPLICATION_SLOT
Andrzej Puzdrowski16b6d152020-06-01 14:16:54 +0200612 help
613 Enables support of multi image update.
614
Marek Pietaa95a41b2023-04-21 14:03:19 +0200615config BOOT_VERSION_CMP_USE_BUILD_NUMBER
616 bool "Use build number while comparing image version"
617 depends on (UPDATEABLE_IMAGE_NUMBER > 1) || BOOT_DIRECT_XIP || \
618 BOOT_RAM_LOAD || MCUBOOT_DOWNGRADE_PREVENTION
619 help
620 By default, the image version comparison relies only on version major,
621 minor and revision. Enable this option to take into account the build
622 number as well.
623
Håkon Øye Amundsen21f03762021-11-12 08:21:31 +0000624choice BOOT_DOWNGRADE_PREVENTION_CHOICE
Andrzej Puzdrowski16b6d152020-06-01 14:16:54 +0200625 prompt "Downgrade prevention"
626 optional
627
628config MCUBOOT_DOWNGRADE_PREVENTION
629 bool "SW based downgrade prevention"
Jerzy Kasenbergb8801fc2022-06-29 15:54:37 +0200630 depends on !BOOT_DIRECT_XIP
Andrzej Puzdrowski16b6d152020-06-01 14:16:54 +0200631 help
632 Prevent downgrades by enforcing incrementing version numbers.
633 When this option is set, any upgrade must have greater major version
634 or greater minor version with equal major version. This mechanism
635 only protects against some attacks against version downgrades (for
636 example, a JTAG could be used to write an older version).
637
Jerzy Kasenbergb8801fc2022-06-29 15:54:37 +0200638config MCUBOOT_DOWNGRADE_PREVENTION_SECURITY_COUNTER
639 bool "Use image security counter instead of version number"
640 depends on MCUBOOT_DOWNGRADE_PREVENTION
641 depends on (BOOT_SWAP_USING_MOVE || BOOT_SWAP_USING_SCRATCH)
642 help
643 Security counter is used for version eligibility check instead of pure
644 version. When this option is set, any upgrade must have greater or
645 equal security counter value.
646 Because of the acceptance of equal values it allows for software
647 downgrades to some extent.
648
Andrzej Puzdrowski16b6d152020-06-01 14:16:54 +0200649config MCUBOOT_HW_DOWNGRADE_PREVENTION
650 bool "HW based downgrade prevention"
651 help
652 Prevent undesirable/malicious software downgrades. When this option is
653 set, any upgrade must have greater or equal security counter value.
654 Because of the acceptance of equal values it allows for software
655 downgrade to some extent.
656
657endchoice
658
Andrzej Puzdrowskid21442a2020-10-12 16:47:28 +0200659config BOOT_WATCHDOG_FEED
660 bool "Feed the watchdog while doing swap"
Andrzej Puzdrowskib25ba4b2022-09-28 15:58:19 +0200661 default y if WATCHDOG
662 default y if SOC_FAMILY_NRF
663 # for nRF nrfx based implementation is available
Bartosz Bilasa1c8c8e2022-08-30 21:50:28 +0200664 imply NRFX_WDT if SOC_FAMILY_NRF
665 imply NRFX_WDT0 if SOC_FAMILY_NRF
666 imply NRFX_WDT1 if SOC_FAMILY_NRF
Andrzej Puzdrowskid21442a2020-10-12 16:47:28 +0200667 help
668 Enables implementation of MCUBOOT_WATCHDOG_FEED() macro which is
669 used to feed watchdog while doing time consuming operations.
670
Andrzej Puzdrowski914204d2021-07-09 19:20:46 +0200671config BOOT_IMAGE_ACCESS_HOOKS
672 bool "Enable hooks for overriding MCUboot's native routines"
673 help
674 Allow to provide procedures for override or extend native
675 MCUboot's routines required for access the image data and the image
Andrzej Puzdrowski1c150c62022-07-07 14:55:22 +0200676 update. It is up to the project customization to add required source
677 files to the build.
Andrzej Puzdrowski914204d2021-07-09 19:20:46 +0200678
Jamie McCrae56cb6102022-03-23 11:57:03 +0000679config MCUBOOT_ACTION_HOOKS
680 bool "Enable hooks for responding to MCUboot status changes"
681 help
682 This will call a handler when the MCUboot status changes which allows
683 for some level of user feedback, for instance to change LED status to
684 indicate a failure, using the callback:
685 'void mcuboot_status_change(mcuboot_status_type_t status)' where
686 'mcuboot_status_type_t' is listed in
687 boot/bootutil/include/bootutil/mcuboot_status.h
688
Andrzej Puzdrowski97543282018-04-12 15:16:56 +0200689endmenu
690
Carles Cufi84ede582018-01-29 15:12:00 +0100691config MCUBOOT_DEVICE_SETTINGS
692 # Hidden selector for device-specific settings
693 bool
694 default y
695 # CPU options
696 select MCUBOOT_DEVICE_CPU_CORTEX_M0 if CPU_CORTEX_M0
Carles Cufi67c792e2018-01-29 15:14:31 +0100697 # Enable flash page layout if available
698 select FLASH_PAGE_LAYOUT if FLASH_HAS_PAGE_LAYOUT
Andrzej Puzdrowskib788c712018-04-12 12:42:49 +0200699 # Enable flash_map module as flash I/O back-end
700 select FLASH_MAP
Carles Cufi84ede582018-01-29 15:12:00 +0100701
702config MCUBOOT_DEVICE_CPU_CORTEX_M0
703 # Hidden selector for Cortex-M0 settings
704 bool
705 default n
706 select SW_VECTOR_RELAY if !CPU_CORTEX_M0_HAS_VECTOR_TABLE_REMAP
707
Marti Bolivar0e091c92018-04-12 11:23:16 -0400708comment "Zephyr configuration options"
Andrzej Puzdrowski64ad0922017-09-22 11:33:41 +0200709
Marti Bolivarf84cc4b2019-08-20 16:06:56 -0700710# Disabling MULTITHREADING provides a code size advantage, but
711# it requires peripheral drivers (particularly a flash driver)
712# that works properly with the option enabled.
713#
714# If you know for sure that your hardware will work, you can default
715# it to n here. Otherwise, having it on by default makes the most
716# hardware work.
717config MULTITHREADING
Andrzej Puzdrowski9a4946c2020-02-20 12:39:12 +0100718 default y if BOOT_SERIAL_CDC_ACM #usb driver requires MULTITHREADING
Josh Gao837cf882020-11-13 18:51:27 -0800719 default y if BOOT_USB_DFU_GPIO || BOOT_USB_DFU_WAIT
Marti Bolivarf84cc4b2019-08-20 16:06:56 -0700720 default n if SOC_FAMILY_NRF
Marek Matej67693442023-01-23 17:54:36 +0100721 default n if SOC_FAMILY_ESP32 && MCUBOOT
Marti Bolivarf84cc4b2019-08-20 16:06:56 -0700722 default y
723
Andrzej Puzdrowski3f092bd2020-02-17 13:25:32 +0100724config LOG_PROCESS_THREAD
725 default n # mcuboot has its own log processing thread
726
727# override USB device name
728config USB_DEVICE_PRODUCT
729 default "MCUBOOT"
Andrzej Puzdrowski9a4946c2020-02-20 12:39:12 +0100730
Andrzej Puzdrowskif573b392020-11-10 14:35:15 +0100731# use MCUboot's own log configuration
732config MCUBOOT_BOOTUTIL_LIB_OWN_LOG
733 bool
734 default n
735
Håkon Øye Amundsene829e9d2021-11-12 14:01:01 +0000736config MCUBOOT_VERIFY_IMG_ADDRESS
737 bool "Verify reset address of image in secondary slot"
738 depends on UPDATEABLE_IMAGE_NUMBER > 1
739 depends on !BOOT_ENCRYPT_IMAGE
740 depends on ARM
741 default y if BOOT_UPGRADE_ONLY
742 help
743 Verify that the reset address in the image located in the secondary slot
744 is contained within the corresponding primary slot. This is recommended
745 if swapping is not used (that is, BOOT_UPGRADE_ONLY is set). If a user
746 incorrectly uploads an update for image 1 to image 0's secondary slot
747 MCUboot will overwrite image 0's primary slot with this image even
748 though it will not boot. If swapping is enabled this will be handled
749 since the image will not confirm itself. If, however, swapping is not
750 enabled then the only mitigation is serial recovery. This feature can
751 also be useful when BOOT_DIRECT_XIP is enabled, to ensure that the image
752 linked at the correct address is loaded.
753
Robert Lubos1b19d2a2020-01-31 14:05:35 +0100754source "Kconfig.zephyr"