Boot Linux faster!

Check our new training course

Boot Linux faster!

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

Bootlin logo

Elixir Cross Referencer

  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
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
# Copyright (c) 2016 Intel Corporation
# SPDX-License-Identifier: Apache-2.0

menuconfig LOG
	bool "Logging"
	select PRINTK if USERSPACE
	help
	  Global switch for the logger, when turned off log calls will not be
	  compiled in.

if LOG

config LOG_MINIMAL
	bool "Enable minimal-footprint logging"
	imply PRINTK
	help
	  Enable minimal logging implementation. This has very little footprint
	  overhead on top of the printk() implementation for standard
	  logging macros. Hexdump macros are also supported, with a small
	  amount of code pulled in if used. Build time filtering is supported,
	  but not runtime filtering. There are no timestamps, prefixes,
	  colors, or asynchronous logging, and all messages are simply
	  sent to printk().

config LOG_RUNTIME_FILTERING
	bool "Enable runtime reconfiguration of the logger"
	depends on !LOG_FRONTEND && !LOG_MINIMAL
	help
	  Allow runtime configuration of maximal, independent severity
	  level for instance.

config LOG_DEFAULT_LEVEL
	int "Default log level"
	default 3
	range 0 4
	help
	  Sets log level for modules which don't specify it explicitly. When
	  set to 0 it means log will not be activated for those modules.
	  Levels are:

	  - 0 OFF, do not write by default
	  - 1 ERROR, default to only write LOG_LEVEL_ERR
	  - 2 WARNING, default to write LOG_LEVEL_WRN
	  - 3 INFO, default to write LOG_LEVEL_INFO
	  - 4 DEBUG, default to write LOG_LEVEL_DBG

config LOG_OVERRIDE_LEVEL
	int "Override lowest log level"
	default 0
	range 0 4
	help
	  Forces a minimum log level for all modules. Modules use their
	  specified level if it is greater than this option, otherwise they use
	  the level specified by this option instead of their default or
	  whatever was manually set.
	  Levels are:

	  - 0 OFF, do not override
	  - 1 ERROR, override to write LOG_LEVEL_ERR
	  - 2 WARNING, override to write LOG_LEVEL_WRN
	  - 3 INFO, override to write LOG_LEVEL_INFO
	  - 4 DEBUG, override to write LOG_LEVEL_DBG

config LOG_MAX_LEVEL
	int "Maximal log level compiled in the system"
	default 4
	range 0 4
	help
	  Forces a maximal log level for all modules. Modules saturates their
	  specified level if it is greater than this option, otherwise they use
	  the level specified by this option instead of their default or
	  whatever was manually set.
	  Levels are:

	  - 0 OFF, logging is turned off
	  - 1 ERROR, maximal level set to LOG_LEVEL_ERR
	  - 2 WARNING, maximal level set to LOG_LEVEL_WRN
	  - 3 INFO, maximal level set to LOG_LEVEL_INFO
	  - 4 DEBUG, maximal level set to LOG_LEVEL_DBG

config LOG_MIPI_SYST_ENABLE
	bool "Enable mipi syst format output"
	select MIPI_SYST_LIB
	help
	  Enable mipi syst format output for the logger system.

if !LOG_MINIMAL

menu "Prepend log message with function name"
	depends on !LOG_FRONTEND

config LOG_FUNC_NAME_PREFIX_ERR
	bool "Error messages prepended"

config LOG_FUNC_NAME_PREFIX_WRN
	bool "Warning messages prepended"

config LOG_FUNC_NAME_PREFIX_INF
	bool "Info messages prepended"

config LOG_FUNC_NAME_PREFIX_DBG
	bool "Debug messages prepended"
	default y

endmenu

config LOG_PRINTK
	bool "Enable processing of printk messages."
	help
	  LOG_PRINTK messages are formatted in place and logged unconditionally.

config LOG_PRINTK_MAX_STRING_LENGTH
	int "Maximum string length supported by LOG_PRINTK"
	depends on LOG_PRINTK
	depends on (!LOG_IMMEDIATE || USERSPACE)
	default 128
	help
	  Array is allocated on the stack.

config LOG_IMMEDIATE
	bool "Enable synchronous processing"
	help
	  When enabled log is processed in the context of the call. It impacts
	  performance of the system since time consuming operations are
	  performed in the context of the log entry (e.g. high priority
	  interrupt).Logger backends must support exclusive access to work
	  flawlessly in that mode because one log operation can be interrupted
	  by another one in the higher priority context.

config LOG_IMMEDIATE_CLEAN_OUTPUT
	bool "Enable clean log output"
	depends on LOG_IMMEDIATE
	help
	  If enabled, interrupts are locked during whole log message processing.
	  As a result, processing on one log message cannot be interrupted by
	  another one and output is clean, not interleaved. However, enabling
	  this option is causing interrupts locking for significant amount of
	  time (up to multiple milliseconds).

config LOG_ENABLE_FANCY_OUTPUT_FORMATTING
	depends on MINIMAL_LIBC
	bool "Format strings with minimal libc _prf() instead of _vprintk()"
	help
	  Selecting this option will choose more robust _prf() function from
	  minimal libc for handling format strings instead of the _vprintk()
	  function. Choosing this option adds around ~3K flash and ~250 bytes on
	  stack.

if !LOG_IMMEDIATE

choice
	prompt "Log full strategy"

config LOG_MODE_OVERFLOW
	bool "Oldest logs are discarded"

config LOG_MODE_NO_OVERFLOW
	bool "New logs are dropped"

endchoice

config LOG_BLOCK_IN_THREAD
	bool "On log full block in thread context"
	help
	  When enabled logger will block (if in the thread context) when
	  internal logger buffer is full and new message cannot be allocated.

config LOG_BLOCK_IN_THREAD_TIMEOUT_MS
	int "Maximum time (in milliseconds) thread can be blocked"
	default 1000
	range -1 10000
	depends on LOG_BLOCK_IN_THREAD
	help
	  If new buffer for a log message cannot be allocated in that time, log
	  message is dropped. Forever blocking (-1) is possible however may lead
	  to the logger deadlock if logging is enabled in threads used for
	  logging (e.g. logger or shell thread).

config LOG_PROCESS_TRIGGER_THRESHOLD
	int "Amount of buffered logs which triggers processing thread."
	default 10
	help
	  When number of buffered messages reaches the threshold thread is waken
	  up. Log processing thread ID is provided during log initialization.
	  Set 0 to disable the feature. If LOG_PROCESS_THREAD is enabled then
	  this threshold is used by the internal thread.

config LOG_PROCESS_THREAD
	bool "Enable internal thread for log processing"
	depends on MULTITHREADING
	default y
	help
	  When enabled thread is created by the logger subsystem. Thread is
	  waken up periodically (see LOG_PROCESS_THREAD_SLEEP_MS) and whenever
	  number of buffered messages exceeds the threshold (see
	  LOG_PROCESS_TRIGGER_THR).

if LOG_PROCESS_THREAD

config LOG_PROCESS_THREAD_SLEEP_MS
	int "Set internal log processing thread sleep period"
	default 1000
	help
	  Log processing thread sleeps for requested period given in
	  milliseconds. When waken up, thread process any buffered messages.

config LOG_PROCESS_THREAD_STACK_SIZE
	int "Stack size for the internal log processing thread"
	default 2048 if COVERAGE_GCOV
	default 1024 if NO_OPTIMIZATIONS
	default 1024 if XTENSA
	default 4096 if (X86 && X86_64)
	default 4096 if ARM64
	default 768
	help
	  Set the internal stack size for log processing thread.

endif # LOG_PROCESS_THREAD

config LOG_BUFFER_SIZE
	int "Number of bytes dedicated for the logger internal buffer."
	default 1024
	range 128 65536
	help
	  Number of bytes dedicated for the logger internal buffer.

config LOG_DETECT_MISSED_STRDUP
	bool "Detect missed handling of transient strings"
	default y if !LOG_IMMEDIATE
	help
	  If enabled, logger will assert and log error message is it detects
	  that string format specifier (%s) and string address which is not from
	  read only memory section and not from pool used for string duplicates.
	  String argument must be duplicated in that case using log_strdup().
	  Detection is performed during log processing thus it does not impact
	  logging timing.

config LOG_STRDUP_MAX_STRING
	int "Longest string that can be duplicated using log_strdup()"
	default 46 if NETWORKING
	default 32
	help
	  Longer strings are truncated.

config LOG_STRDUP_BUF_COUNT
	int "Number of buffers in the pool used by log_strdup()"
	default 4
	help
	  Number of calls to log_strdup() which can be pending before flushed
	  to output. If "<log_strdup alloc failed>" message is seen in the log
	  output, it means this value is too small and should be increased.
	  Each entry takes CONFIG_LOG_STRDUP_MAX_STRING bytes of memory plus
	  some additional fixed overhead.

config LOG_STRDUP_POOL_PROFILING
	bool "Enable profiling of pool used for log_strdup()"
	help
	  When enabled, maximal utilization of the pool is tracked. It can
	  be read out using shell command.

endif # !LOG_IMMEDIATE

config LOG_DOMAIN_ID
	int "Domain ID"
	default 0
	range 0 7
	help
	  In multicore system each application/core must have unique domain ID.

config LOG_CMDS
	bool "Enable shell commands"
	depends on SHELL
	default y if SHELL

config LOG_FRONTEND
	bool "Enable frontend"
	select LOG_IMMEDIATE
	help
	  When enabled, logs are redirected to a custom frontend instead
	  of being processed by the logger.

config LOG_BACKEND_UART
	bool "Enable UART backend"
	depends on UART_CONSOLE
	default y if !SHELL_BACKEND_SERIAL
	help
	  When enabled backend is using UART to output logs.

config LOG_BACKEND_UART_SYST_ENABLE
	bool "Enable UART syst backend"
	depends on LOG_BACKEND_UART
	depends on LOG_MIPI_SYST_ENABLE
	help
	  When enabled backend is using UART to output syst format logs.

config LOG_BACKEND_SWO
	bool "Enable Serial Wire Output (SWO) backend"
	depends on HAS_SWO
	help
	  When enabled, backend will use SWO for logging.

if LOG_BACKEND_SWO

config LOG_BACKEND_SWO_FREQ_HZ
	int "Set SWO output frequency"
	default 0
	help
	  Set SWO output frequency. Value 0 will select maximum frequency
	  supported by the given MCU. Not all debug probes support high
	  frequency SWO operation. In this case the frequency has to be set
	  manually.

	  SWO value defined by this option will be configured at boot. Most SWO
	  viewer programs will configure SWO frequency when attached to the
	  debug probe. Such configuration will persist only until the device
	  reset. To ensure flawless operation the frequency configured here and
	  by the SWO viewer program has to match.

config LOG_BACKEND_SWO_SYST_ENABLE
	bool "Enable SWO syst backend"
	depends on LOG_MIPI_SYST_ENABLE
	help
	  When enabled backend is using SWO to output syst format logs.

endif # LOG_BACKEND_SWO

config LOG_BACKEND_RTT
	bool "Enable Segger J-Link RTT backend"
	depends on USE_SEGGER_RTT
	default y if !SHELL_BACKEND_RTT
	help
	  When enabled, backend will use RTT for logging. This backend works on a per
	  message basis. Only a whole message (terminated with a carriage return: '\r')
	  is transferred to up-buffer at once depending on available space and
	  selected mode.
	  In panic mode backend always blocks and waits until there is space
	  in up-buffer for a message and message is transferred to host.

if LOG_BACKEND_RTT

choice
	prompt "Logger behavior"
	default LOG_BACKEND_RTT_MODE_BLOCK

config LOG_BACKEND_RTT_MODE_DROP
	bool "Drop messages that do not fit in up-buffer."
	help
	  If there is not enough space in up-buffer for a message, drop it.
	  Number of dropped messages will be logged.
	  Increase up-buffer size helps to reduce dropping of messages.

config LOG_BACKEND_RTT_MODE_BLOCK
	bool "Block until message is transferred to host."
	help
	  Waits until there is enough space in the up-buffer for a message.

config LOG_BACKEND_RTT_SYST_ENABLE
	bool "Enable RTT syst backend"
	depends on LOG_MIPI_SYST_ENABLE
	help
	  When enabled backend is using RTT to output syst format logs.

endchoice

config LOG_BACKEND_RTT_MESSAGE_SIZE
	int "Size of internal buffer for storing messages."
	range 32 256
	default 128
	depends on LOG_BACKEND_RTT_MODE_DROP
	help
	  This option defines maximum message size transferable to up-buffer.

if LOG_BACKEND_RTT_MODE_BLOCK

config LOG_BACKEND_RTT_OUTPUT_BUFFER_SIZE
	int "Size of the output buffer"
	default 16
	help
	  Buffer is used by log_output module for preparing output data (e.g.
	  string formatting).

config LOG_BACKEND_RTT_RETRY_CNT
	int "Number of retries"
	default 4
	help
	  Number of TX retries before dropping the data and assuming that
	  RTT session is inactive.

config LOG_BACKEND_RTT_RETRY_DELAY_MS
	int "Delay between TX retries in milliseconds"
	default 5
	help
	  Sleep period between TX retry attempts. During RTT session, host pulls
	  data periodically. Period starts from 1-2 milliseconds and can be
	  increased if traffic on RTT increases (also from host to device). In
	  case of heavy traffic data can be lost and it may be necessary to
	  increase delay or number of retries.

endif # LOG_BACKEND_RTT_MODE_BLOCK

config LOG_BACKEND_RTT_BUFFER
	int "Buffer number used for logger output."
	range 0 SEGGER_RTT_MAX_NUM_UP_BUFFERS
	default 0
	help
	  Select index of up-buffer used for logger output, by default it uses
	  terminal up-buffer and its settings.

config LOG_BACKEND_RTT_BUFFER_SIZE
	int "Size of reserved up-buffer for logger output."
	default 1024
	depends on LOG_BACKEND_RTT_BUFFER > 0
	help
	  Specify reserved size of up-buffer used for logger output.

# Enable processing of printk calls using log if terminal buffer is used.
# Same buffer is used by RTT console. If printk would go through RTT console
# that will lead to corruption of RTT data which is not protected against being
# interrupted by an interrupt.
config LOG_BACKEND_RTT_FORCE_PRINTK
	bool
	default y if LOG_BACKEND_RTT_BUFFER = 0 && RTT_CONSOLE
	select LOG_PRINTK

endif # LOG_BACKEND_RTT

config LOG_BACKEND_NATIVE_POSIX
	bool "Enable native backend"
	depends on ARCH_POSIX
	help
	  Enable backend in native_posix

config LOG_BACKEND_XTENSA_SIM
	bool "Enable xtensa simulator backend"
	depends on SOC_XTENSA_SAMPLE_CONTROLLER || SOC_INTEL_APL_ADSP
	help
	  Enable backend in xtensa simulator

config LOG_BACKEND_XTENSA_OUTPUT_BUFFER_SIZE
	int "Size of the output buffer"
	default 16
	depends on LOG_BACKEND_XTENSA_SIM
	help
	  Buffer is used by log_output module for preparing output data (e.g.
	  string formatting).

config LOG_BACKEND_NET
	bool "Enable networking backend"
	depends on NETWORKING
	select NET_CONTEXT_NET_PKT_POOL
	help
	  Send syslog messages to network server.
	  See RFC 5424 (syslog protocol) and RFC 5426 (syslog over UDP)
	  specifications for details.

if LOG_BACKEND_NET

config LOG_BACKEND_NET_SERVER
	string "Syslog server IP address"
	help
	  This can be either IPv4 or IPv6 address.
	  Server listen UDP port number can be configured here too.
	  Following syntax is supported:
	  192.0.2.1:514
	  192.0.2.42
	  [2001:db8::1]:514
	  [2001:db8::2]
	  2001:db::42

config LOG_BACKEND_NET_MAX_BUF
	int "How many network buffers to allocate for sending messages"
	range 3 256
	default 3
	help
	  Each syslog message should fit into a network packet that will be
	  sent to server. This number tells how many syslog messages can be
	  in transit to the server.

config LOG_BACKEND_NET_MAX_BUF_SIZE
	int "Max syslog message size"
	range 64 1180
	default 1180 if NET_IPV6
	default 480 if NET_IPV4
	default 256
	help
	  As each syslog message needs to fit to UDP packet, set this value
	  so that messages are not truncated.
	  The RFC 5426 recommends that for IPv4 the size is 480 octets and for
	  IPv6 the size is 1180 octets. As each buffer will use RAM, the value
	  should be selected so that typical messages will fit the buffer.

config LOG_BACKEND_NET_SYST_ENABLE
	bool "Enable networking syst backend"
	depends on LOG_MIPI_SYST_ENABLE
	help
	  When enabled backend is using networking to output syst format logs.

endif # LOG_BACKEND_NET

config LOG_BACKEND_ADSP
	bool "Enable Intel ADSP backend"
	depends on SOC_INTEL_APL_ADSP
	select RING_BUFFER
	help
	  Enable backend in APL ADSP using memory mailbox

if LOG_BACKEND_ADSP

config LOG_BACKEND_ADSP_RINGBUF_BASE
	hex "Ringbuf base address"
	help
	  Address of the ring buffer in the memory.

config LOG_BACKEND_ADSP_RINGBUF_SIZE
	hex "Size of the ring buffer"
	help
	  Size of the ring buffer.

endif # LOG_BACKEND_ADSP

config LOG_BACKEND_SHOW_COLOR
	bool "Enable colors in the backend"
	depends on LOG_BACKEND_UART || LOG_BACKEND_NATIVE_POSIX || LOG_BACKEND_RTT \
	           || LOG_BACKEND_SWO || LOG_BACKEND_XTENSA_SIM
	default y
	help
	  When enabled selected backend prints errors in red and warning in yellow.

config LOG_BACKEND_FORMAT_TIMESTAMP
	bool "Enable timestamp formatting in the backend"
	depends on LOG_BACKEND_UART || LOG_BACKEND_NATIVE_POSIX || LOG_BACKEND_RTT \
	           || LOG_BACKEND_SWO || LOG_BACKEND_XTENSA_SIM
	default y
	help
	  When enabled timestamp is formatted to hh:mm:ss:ms,us.

endif # LOG_MINIMAL
endif # LOG