1# Copyright Runtime.io 2018. All rights reserved. 2# Copyright Nordic Semiconductor ASA 2020-2022. All rights reserved. 3# SPDX-License-Identifier: Apache-2.0 4 5# The Kconfig file is dedicated to Application Image management group of 6# of MCUmgr subsystem and provides Kconfig options to configure 7# group commands behaviour and other aspects. 8# 9# Options defined in this file should be prefixed: 10# MCUMGR_GRP_IMG_ -- general group options; 11# 12# When adding Kconfig options, that control the same feature, 13# try to group them together by the same stem after prefix. 14 15menuconfig MCUMGR_GRP_IMG 16 bool "Mcumgr handlers for image management" 17 depends on FLASH 18 depends on IMG_MANAGER 19 depends on !MCUBOOT_BOOTLOADER_MODE_SINGLE_APP 20 select MPU_ALLOW_FLASH_WRITE if ARM_MPU 21 select MCUMGR_SMP_CBOR_MIN_DECODING_LEVEL_2 22 select MCUMGR_SMP_CBOR_MIN_ENCODING_LEVEL_3 if ZCBOR_CANONICAL 23 help 24 Enables MCUmgr handlers for image management 25 26if MCUMGR_GRP_IMG 27 28if HEAP_MEM_POOL_SIZE > 0 29 30config MCUMGR_GRP_IMG_USE_HEAP_FOR_FLASH_IMG_CONTEXT 31 bool "Use heap mem pool for flash image DFU context" 32 help 33 Use heap to allocate flash image upload context, otherwise a static variable will 34 be used. The context object is used by MCUMGR_GRP_IMG_MANAGER to buffer image writes 35 and has significant size, mainly affected by image write buffer of 36 the CONFIG_IMG_BLOCK_BUF_SIZE size and additional fields that hold the state information 37 (struct flash_img_context). 38 When the option is not enabled it increases static RAM use. 39 Make sure with testing, when enabling the option, that the heap has enough size 40 to allocate this context or it will not be possible to perform DFU; it may also not be 41 possible to allocate such context when heap is under pressure, due to application 42 operation, an issue that should also be addressed within application. 43 44endif 45 46config MCUMGR_GRP_IMG_UPDATABLE_IMAGE_NUMBER 47 int "Number of supported images" 48 default UPDATEABLE_IMAGE_NUMBER 49 range 1 3 50 help 51 Sets how many application images are supported (pairs of secondary and primary slots). 52 Setting this to 2 requires MCUMGR_TRANSPORT_NETBUF_SIZE to be at least 512b. 53 NOTE: The UPDATEABLE_IMAGE_NUMBER of MCUBOOT configuration, even for Zephyr build, 54 needs to be set to the same value; this is due to the fact that the MCUmgr uses 55 boot_util and the UPDATEABLE_IMAGE_NUMBER controls number of images supported 56 by that library. 57 58config MCUMGR_GRP_IMG_VERBOSE_ERR 59 bool "Verbose error responses when uploading application image" 60 select MCUMGR_SMP_VERBOSE_ERR_RESPONSE 61 help 62 Add additional "rsn" key to SMP responses, where provided, explaining 63 non-0 "rc" codes. 64 65config MCUMGR_GRP_IMG_ALLOW_CONFIRM_NON_ACTIVE_IMAGE_SECONDARY 66 bool "Allow to confirm secondary slot of non-active image" 67 default y 68 help 69 Allows to confirm secondary (non-active) slot of non-active image. 70 Normally it should not be allowed to confirm any slots of non-active 71 image, via MCUmgr commands, to prevent confirming something that is 72 broken and may not boot in other slot; instead application should 73 have means to test and confirm the image. 74 75config MCUMGR_GRP_IMG_ALLOW_CONFIRM_NON_ACTIVE_IMAGE_ANY 76 bool "Allow to confirm slots of non-active image" 77 select MCUMGR_GRP_IMG_ALLOW_CONFIRM_NON_ACTIVE_IMAGE_SECONDARY 78 help 79 Allows to confirm any slot of non-active image. 80 Normally it should not be allowed to confirm any slots of non-active 81 image, via MCUmgr commands, to prevent confirming something that is 82 broken and may not boot in other slot; instead application should 83 have means to test and confirm the image. 84 85if !MCUBOOT_BOOTLOADER_MODE_DIRECT_XIP 86config MCUMGR_GRP_IMG_ALLOW_ERASE_PENDING 87 bool "Allow to erase pending slot" 88 help 89 Allows erasing secondary slot which is marked for test or confirmed; this allows 90 erasing slots that have been set for next boot but the device has not 91 reset yet, so has not yet been swapped. 92endif 93 94config MCUMGR_GRP_IMG_DIRECT_UPLOAD 95 bool "Allow direct image upload" 96 help 97 Enables directly uploading image to selected image partition. 98 This changes how "image" is understood by MCUmgr: normally MCUmgr allows uploading to 99 the first slot of the only image it knows, where image is understood as two slots 100 (two DTS images for Zephyr); this allows to treat every DTS defined image as direct 101 target for upload, and more than two may be used (4 at this time). 102 NOTE: When direct upload is used the image numbers are shifted by + 1, and the default 103 behaviour is, when image is not selected, to upload to image that represents secondary 104 slot in normal operation. 105 106config MCUMGR_GRP_IMG_REJECT_DIRECT_XIP_MISMATCHED_SLOT 107 bool "Reject Direct-XIP applications with mismatched address" 108 help 109 When enabled, the MCUmgr will compare base address of application, 110 encoded into .bin file header with use of imgtool, on upload and will 111 reject binaries that would not be able to start from available 112 Direct-XIP address. 113 The base address can be set, to an image binary header, with imgtool, 114 using the --rom-fixed command line option. 115 116config MCUMGR_GRP_IMG_FRUGAL_LIST 117 bool "Omit zero, empty or false values from status list" 118 help 119 The status list send back from the device will only be filled with data that is non-zero, 120 non-empty or true. This option slightly reduces number of bytes transferred back from 121 a device but requires support in client software, which has to default omitted values. 122 Works correctly with the go mcumgr-cli application. 123 124config MCUMGR_GRP_IMG_VERSION_CMP_USE_BUILD_NUMBER 125 bool "Use build number while comparing image version" 126 help 127 By default, the image version comparison relies only on version major, 128 minor and revision. Enable this option to take into account the build 129 number as well. 130 131config MCUMGR_GRP_IMG_UPLOAD_CHECK_HOOK 132 bool "Upload check hook" 133 depends on MCUMGR_MGMT_NOTIFICATION_HOOKS 134 help 135 This will enable the upload check hook which will send image upload requests to 136 registered callbacks to check with the user application if an upload should be accepted 137 or rejected. 138 139config MCUMGR_GRP_IMG_STATUS_HOOKS 140 bool "Status hooks" 141 depends on MCUMGR_MGMT_NOTIFICATION_HOOKS 142 help 143 This will enable DFU status hooks which can be checked by the application to monitor DFU 144 uploads. Note that these are status checking only, to allow inspecting of a file upload 145 or prevent it, CONFIG_MCUMGR_GRP_IMG_UPLOAD_CHECK_HOOK must be used. 146 147config MCUMGR_GRP_IMG_MUTEX 148 bool "Mutex locking" 149 help 150 This will enable use of a mutex to lock the image group object access, preventing issues 151 of concurrent thread (i.e. multiple transport) access. This option also makes the 152 ``img_mgmt_reset_upload()`` function visible in the image management group header, which 153 can be used by applications to reset the image management state (useful if there are 154 multiple ways that firmware updates can be loaded). 155 156choice MCUMGR_GRP_IMG_TOO_LARGE_CHECK 157 prompt "Image size check overhead" 158 default MCUMGR_GRP_IMG_TOO_LARGE_DISABLED 159 help 160 MCUboot images should be limited to the maximum size that the bootloader can swap, in 161 order to know this size, additional information is needed from the MCUboot 162 configuration, otherwise an image can be uploaded that is too large for the bootloader 163 to swap, this selects which method to use. 164 165 Note: setting this to a non-disabled option will prevent uploading of padded and 166 confirmed images, if support for that is required then this feature should be left as 167 disabled. 168 169config MCUMGR_GRP_IMG_TOO_LARGE_DISABLED 170 bool "Disabled" 171 help 172 Will not take MCUboot configuration into account when checking for maximum file size. 173 174config MCUMGR_GRP_IMG_TOO_LARGE_SYSBUILD 175 bool "Via Sysbuild from MCUboot configuration" 176 depends on ROM_END_OFFSET > 0 || MCUBOOT_UPDATE_FOOTER_SIZE > 0 177 help 178 Will use the image overhead size calculated during Sysbuild image configuration. 179 180config MCUMGR_GRP_IMG_TOO_LARGE_BOOTLOADER_INFO 181 bool "Via retention bootloader info" 182 depends on RETENTION_BOOTLOADER_INFO_OUTPUT_FUNCTION 183 help 184 Will fetch the maximum image size from the bootloader info retention subsystem module. 185 186endchoice 187 188module = MCUMGR_GRP_IMG 189module-str = mcumgr_grp_img 190source "subsys/logging/Kconfig.template.log_config" 191 192endif 193