Linux Audio

Check our new training course

Embedded Linux Audio

Check our new training course
with Creative Commons CC-BY-SA
lecture materials

Bootlin logo

Elixir Cross Referencer

Loading...
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
# Copyright Runtime.io 2018. All rights reserved.
# Copyright Nordic Semiconductor ASA 2020. All rights reserved.
# SPDX-License-Identifier: Apache-2.0

menuconfig MCUMGR
	bool "mcumgr Support"
	select NET_BUF
	select TINYCBOR
	help
	  This option enables the mcumgr management library.

if MCUMGR

module = MCUMGR
module-str = mcumgr
source "subsys/logging/Kconfig.template.log_config"


config APP_LINK_WITH_MCUMGR
	bool "Link 'app' with MCUMGR"
	default y
	help
	  Add MCUMGR header files to the 'app' include path. It may be
	  disabled if the include paths for MCUMGR are causing aliasing
	  issues for 'app'.

config MGMT_CBORATTR_MAX_SIZE
	int "The maximum size of a CBOR attribute during decoding"
        default 512
        help
          The maximum size of a CBOR attribute during decoding

menu "Command Handlers"
menuconfig MCUMGR_CMD_FS_MGMT
	bool "Enable mcumgr handlers for file management (insecure)"
	depends on FILE_SYSTEM
	help
	  Enables mcumgr handlers for file management

	  This option allows mcumgr clients to access anything in the
	  file system, including application-stored secrets like
	  private keys. Use of this feature in production is strongly
	  discouraged.

if MCUMGR_CMD_FS_MGMT

choice FS_MGMT_MAX_FILE_SIZE
	prompt "Maximum file size that could be uploaded/downloaded"
	default FS_MGMT_MAX_FILE_SIZE_64KB
	help
	  Maximum file size that will be allowed to be downloaded from
	  device.
	  This option decides on number of bytes that are reserved in
	  CBOR frame for storage of offset/size of file downloaded.

config FS_MGMT_MAX_FILE_SIZE_64KB
	bool "<= 64KB"
	help
	  Files that have size up to 64KB require 1 to 3 bytes to encode
	  size/offset within CBOR frame with file chunk.

config FS_MGMT_MAX_FILE_SIZE_4GB
	bool "<= 4GB"
	help
	  Files that have size up to 4GB require 1 to 5 bytes to encode
	  size/offset within CBOR frame with file chunk.

endchoice

config FS_MGMT_MAX_OFFSET_LEN
	int
	default	3 if FS_MGMT_MAX_FILE_SIZE_64KB
	default 5 if FS_MGMT_MAX_FILE_SIZE_4GB
	help
	  Maximal byte length of encoded offset/size, within transferred
	  CBOR frame containing chunk of downloaded file.
	  This value affects how much of data will fit into download buffer,
	  as it selects sizes of fields within headers.
	  NOTE: This option is hidden intentionally as it is intended
	  to be assigned from limited set of allowed values, depending on
	  the selection made in FS_MGMT_MAX_FILE_SIZE menu.

config FS_MGMT_UL_CHUNK_SIZE
	int "Maximum chunk size for file uploads"
	default 512
	help
	  Limits the maximum chunk size for file uploads, in bytes.  A buffer of
	  this size gets allocated on the stack during handling of a file upload command.

config FS_MGMT_DL_CHUNK_SIZE_LIMIT
	bool "Enable setting custom size of download file chunk"
	help
	  By default file chunk, that will be read off storage and fit into
	  mcumgr frame, is automatically calculated to fit into buffer
	  of size MCUGMR_BUF_SIZE with all headers.
	  Enabling this option allows to set MAXIMUM value that will be
	  allowed for such chunk.
	  Look inside fs_mgmt_config.h for details.

if FS_MGMT_DL_CHUNK_SIZE_LIMIT

config FS_MGMT_DL_CHUNK_SIZE
	int "Maximum chunk size for file downloads"
	range 65 MCUMGR_BUF_SIZE
	default MCUMGR_BUF_SIZE
	help
	  Sets the MAXIMUM size of chunk which will be rounded down to
	  number of bytes that, with all the required headers, will fit
	  into MCUMGR_BUF_SIZE. This means that actual value might be lower
	  then selected, in which case compiler warning will be issued.
	  Look inside fs_mgmt_config.h for details.
	  Note that header sizes are affected by FS_MGMT_MAX_OFFSET_LEN.

endif


config FS_MGMT_PATH_SIZE
	int "Maximum file path length"
	default 64
	help
	  Limits the maximum path length for file operations, in bytes.  A buffer
	  of this size gets allocated on the stack during handling of file upload
	  and download commands.
endif

config MCUMGR_CMD_SHELL_MGMT
	bool "Enable mcumgr handlers for shell management"
	depends on SHELL
	select SHELL_BACKEND_DUMMY
	help
	  Enables mcumgr handlers for shell management. The handler will utilize
	  the dummy backend to execute shell commands and capture the output to
	  an internal memory buffer. This way, there is no interaction with
	  physical interfaces outside of the scope of the user.
	  It is possible to use additional shell backends in coordination
	  with this handler and they will not interfere.
	  The SHELL_BACKEND_DUMMY_BUF_SIZE will affect how many characters
	  will be returned from command output, if your output gets cut, then
	  increase the value. Remember to set MCUMGR_BUF_SIZE accordingly.

menuconfig MCUMGR_CMD_IMG_MGMT
	bool "Enable mcumgr handlers for image management"
	select FLASH
	select MPU_ALLOW_FLASH_WRITE if ARM_MPU
	select IMG_MANAGER
	help
	  Enables mcumgr handlers for image management

if MCUMGR_CMD_IMG_MGMT
config IMG_MGMT_UL_CHUNK_SIZE
	int "Maximum chunk size for image uploads"
	default 512
	depends on MCUMGR_CMD_IMG_MGMT
	help
	  Limits the maximum chunk size for image uploads, in bytes.  A buffer of
	  this size gets allocated on the stack during handling of a image upload
	  command.


config IMG_MGMT_VERBOSE_ERR
	bool "Verbose logging when uploading a new image"
	help
	  Enable verbose logging during a firmware upgrade.

config IMG_MGMT_DUMMY_HDR
	bool "Return dummy image header data for imgr functions"
	help
	  Returns dummy image header data for imgr functions,
	  useful when there are no images present, Eg: unit tests.

config IMG_MGMT_DIRECT_IMAGE_UPLOAD
	bool "Allow direct image upload"
	help
	  Enables directly uploading image to selected image partition.
	  This changes how "image" is understood by mcumgr: normally the mcumgr allows to upload
	  to first slot of the only image it knows, where image is understood as two slots
	  (two DTS images for Zephyr); this allows to treat every DTS defined image as direct
	  target for upload, and more than two may be used (4 at this time).
	  NOTE: When direct upload is used the image numbers are shifted by + 1, and the default
	  behaviour is, when image is not selected, to upload to image that represents secndary
	  slot in normal operation.

config IMG_MGMT_REJECT_DIRECT_XIP_MISMATCHED_SLOT
	bool "Reject Direct-XIP applications with mismatched address"
	help
	  When enabled, the mcumgr will compare base address of application,
	  encoded into .bin file header with use of imgtool, on upload and will
	  reject binaries that would not be able to start from available
	  Direct-XIP address.
	  The base address can be set, to an image binary header, with imgtool,
	  using the --rom-fixed command line option.

endif


menuconfig MCUMGR_CMD_OS_MGMT
	bool "Enable mcumgr handlers for OS management"
	select REBOOT
	help
	  Enables mcumgr handlers for OS management

if MCUMGR_CMD_OS_MGMT
config OS_MGMT_RESET_MS
	int "Delay before executing reset command (ms)"
	default 250
	help
	  When a reset command is received, the system waits this many milliseconds
	  before performing the reset.  This delay allows time for the mcumgr
	  response to be delivered.

config OS_MGMT_TASKSTAT
	bool "Support for taskstat command"
	default y

config OS_MGMT_ECHO
	bool "Support for echo command"
	default y
endif


menuconfig MCUMGR_CMD_STAT_MGMT
	bool "Enable mcumgr handlers for statistics management"
	depends on STATS
	help
	  Enables mcumgr handlers for statistics management.

config STAT_MGMT_MAX_NAME_LEN
	int "Maximum stat group name length"
	default 32
	depends on MCUMGR_CMD_STAT_MGMT
	help
	  Limits the maximum stat group name length in mcumgr requests, in bytes.
	  A buffer of this size gets allocated on the stack during handling of all
	  stat read commands.  If a stat group's name exceeds this limit, it will
	  be impossible to retrieve its values with a stat show command.


menuconfig MCUMGR_GRP_ZEPHYR_BASIC
	bool "Enable Zephyr specific basic group of commands"
	help
	  Enables mcumgr to processing of Zephyr specific groups.

if MCUMGR_GRP_ZEPHYR_BASIC
config MCUMGR_GRP_BASIC_CMD_STORAGE_ERASE
	bool "Enables storage erase command"
	help
	  Enables command that allows to erase storage partition.

module=MGMT_SETTINGS
module-dep=LOG
module-str=SETTINGS
source "${ZEPHYR_BASE}/subsys/logging/Kconfig.template.log_config"

endif

endmenu

config MCUMGR_SMP_BT
	bool "Bluetooth mcumgr SMP transport"
	select BT
	select BT_PERIPHERAL
	select BT_GATT_DYNAMIC_DB
	help
	  Enables handling of SMP commands received over Bluetooth.

config MCUMGR_SMP_BT_AUTHEN
	bool "Authenticated requirement for Bluetooth mcumgr SMP transport"
	depends on MCUMGR_SMP_BT
	select BT_SMP
	default y
	help
	  Enables encrypted and authenticated connection requirement to
	  Bluetooth SMP transport.


config MCUMGR_SMP_SHELL
	bool "Shell mcumgr SMP transport"
	select SHELL
	select SHELL_BACKEND_SERIAL
	select BASE64
	help
	  Enables handling of SMP commands received over shell.  This allows
	  the shell to be use for both mcumgr commands and shell commands.

if MCUMGR_SMP_SHELL

config MCUMGR_SMP_SHELL_MTU
	int "Shell SMP MTU"
	default 256
	help
	  Maximum size of SMP frames sent and received over shell.  This value
	  must satisfy the following relation:
	  MCUMGR_SMP_SHELL_MTU <= MCUMGR_BUF_SIZE + 2

config MCUMGR_SMP_SHELL_RX_BUF_COUNT
	int "Shell SMP RX buffer count"
	default 2
	help
	  Number of buffers used for receiving SMP fragments over shell.

endif # MCUMGR_SMP_SHELL

config MCUMGR_SMP_UART
	bool "UART mcumgr SMP transport"
	select UART_MCUMGR
	select BASE64
	help
	  Enables handling of SMP commands received over UART.  This is a
	  lightweight alternative to MCUMGR_SMP_SHELL.  It allows mcumgr
	  commands to be received over UART without requiring an additional
	  thread.

if UART_ASYNC_API && MCUMGR_SMP_UART

menuconfig MCUMGR_SMP_UART_ASYNC
	bool "Use async UART API when available"
	help
	  The option enables use of UART async API when available for selected mcumgr uart port.

if MCUMGR_SMP_UART_ASYNC
config MCUMGR_SMP_UART_ASYNC_BUFS
	int "Number of async RX UART buffers"
	range 2 8
	default 2
	help
	  The asynchronous UART API requires registering RX buffers for received data; when the RX
	  reaches the end of a buffer, it will send event requesting next buffer, to be able to
	  receive data without stopping due to running out of buffer space.  At least two buffers
	  area required for smooth RX operation.

config MCUMGR_SMP_UART_ASYNC_BUF_SIZE
	int "Size of single async RX UART buffer"
	default 64
	help
	  The size of single buffer for asynchronous RX.

endif # MCUMGR_SMP_UART_ASYNC
endif # UART_ASYNC_API

config MCUMGR_SMP_UART_MTU
	int "UART SMP MTU"
	default 256
	depends on MCUMGR_SMP_UART
	help
	  Maximum size of SMP frames sent and received over UART, in bytes.
	  This value must satisfy the following relation:
	  MCUMGR_SMP_UART_MTU <= MCUMGR_BUF_SIZE + 2


config MCUMGR_SMP_UDP
	bool "UDP mcumgr SMP transport"
	select NETWORKING
	select NET_UDP
	select NET_SOCKETS
	select NET_SOCKETS_POSIX_NAMES
	help
	  Enables handling of SMP commands received over UDP.
	  Will start a thread for listening on the configured UDP port.

if MCUMGR_SMP_UDP
config MCUMGR_SMP_UDP_IPV4
	bool "UDP SMP using IPv4"
	depends on NET_IPV4
	default y
	help
	  Enable SMP UDP using IPv4 addressing.
	  Can be enabled alongside IPv6 addressing.

config MCUMGR_SMP_UDP_IPV6
	bool "UDP SMP using IPv6"
	depends on NET_IPV6
	help
	  Enable SMP UDP using IPv6 addressing.
	  Can be enabled alongside IPv4 addressing.

config MCUMGR_SMP_UDP_PORT
	int "UDP SMP port"
	default 1337
	help
	  UDP port that SMP server will listen for SMP commands on.

config MCUMGR_SMP_UDP_STACK_SIZE
	int "UDP SMP stack size"
	default 512
	help
	  Stack size of the SMP UDP listening thread

config MCUMGR_SMP_UDP_THREAD_PRIO
	int "UDP SMP thread priority"
	default 0
	help
	  Scheduling priority of the SMP UDP listening thread.

config MCUMGR_SMP_UDP_MTU
	int "UDP SMP MTU"
	default 1500
	help
	  Maximum size of SMP frames sent and received over UDP, in bytes.
	  This value must satisfy the following relation:
	  MCUMGR_SMP_UDP_MTU <= MCUMGR_BUF_SIZE + SMP msg overhead - address size
	  where address size is determined by IPv4/IPv6 selection.

endif # MCUMGR_SMP_UDP

config MCUMGR_BUF_COUNT
	int "Number of mcumgr buffers"
	default 2 if MCUMGR_SMP_UDP
	default 4
	help
	  The number of net_bufs to allocate for mcumgr.  These buffers are
	  used for both requests and responses.

config MCUMGR_BUF_SIZE
	int "Size of each mcumgr buffer"
	default 2048 if MCUMGR_SMP_UDP
	default 384
	help
	  The size, in bytes, of each mcumgr buffer.  This value must satisfy
	  the following relation:
	  MCUMGR_BUF_SIZE >= transport-specific-MTU + transport-overhead
	  In case when MCUMGR_SMP_SHELL is enabled this value should be set to
	  at least SHELL_BACKEND_DUMMY_BUF_SIZE + 32.

config MCUMGR_BUF_USER_DATA_SIZE
	int "Size of mcumgr buffer user data"
	default 24 if MCUMGR_SMP_UDP && MCUMGR_SMP_UDP_IPV6
	default 8 if MCUMGR_SMP_UDP && MCUMGR_SMP_UDP_IPV4
	default 8 if MCUMGR_SMP_BT
	default 4
	help
	  The size, in bytes, of user data to allocate for each mcumgr buffer.

	  Different mcumgr transports impose different requirements for this
	  setting. A value of 4 is sufficient for UART and shell, a value of 8
	  is sufficient for Bluetooth. For UDP, the userdata must be large
	  enough to hold a IPv4/IPv6 address.

	  Note that CONFIG_NET_BUF_USER_DATA_SIZE must be at least as big as
	  MCUMGR_BUF_USER_DATA_SIZE.
endif # MCUMGR