Linux debugging

Check our new training course

Linux debugging, tracing, profiling & perf. analysis

Check our new training course
with 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
# Copyright (c) 2021 Nordic Semiconductor ASA
# SPDX-License-Identifier: Apache-2.0

menu "Backends"

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

if LOG_BACKEND_UART

config LOG_BACKEND_UART_ASYNC
	bool "Use UART Asynchronous API"
	depends on UART_ASYNC_API
	depends on !LOG_BACKEND_UART_OUTPUT_DICTIONARY_HEX

config LOG_BACKEND_UART_BUFFER_SIZE
	int "Number of bytes to buffer in RAM before flushing"
	default 32 if LOG_BACKEND_UART_ASYNC
	default 1
	help
	  Sets the number of bytes which can be buffered in RAM before log_output_flush
	  is automatically called on the backend.

backend = UART
backend-str = uart
source "subsys/logging/Kconfig.template.log_format_config"

if LOG_BACKEND_UART_OUTPUT_DICTIONARY

choice
	prompt "Dictionary mode output format"
	default LOG_BACKEND_UART_OUTPUT_DICTIONARY_BIN

config LOG_BACKEND_UART_OUTPUT_DICTIONARY_BIN
	bool "Dictionary (binary)"
	help
	  Dictionary-based logging output in binary.

config LOG_BACKEND_UART_OUTPUT_DICTIONARY_HEX
	bool "Dictionary (hexadecimal)"
	help
	  Dictionary-based logging output in hexadecimal. Supported only for UART backend.

endchoice

endif # LOG_BACKEND_UART_OUTPUT_DICTIONARY

endif # LOG_BACKEND_UART

config LOG_BACKEND_SWO
	bool "Serial Wire Output (SWO) backend"
	depends on HAS_SWO
	select LOG_OUTPUT
	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.

backend = SWO
backend-str = swo
source "subsys/logging/Kconfig.template.log_format_config"

endif # LOG_BACKEND_SWO

config LOG_BACKEND_RTT
	bool "Segger J-Link RTT backend"
	depends on USE_SEGGER_RTT
	default y if !SHELL_BACKEND_RTT
	select SEGGER_RTT_CUSTOM_LOCKING
	select LOG_OUTPUT
	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 LOG_BACKEND_RTT_MODE
	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_MODE_OVERWRITE
	bool "Overwrite messages if up-buffer full"
	help
	  If there is not enough space in up-buffer for a message overwrite
	  oldest one.

endchoice

backend = RTT
backend-str = rtt
source "subsys/logging/Kconfig.template.log_format_config"

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_SPINEL
	bool "OpenThread dedicated Spinel protocol backend"
	depends on !LOG_BACKEND_UART
	depends on NET_L2_OPENTHREAD
	select LOG_OUTPUT
	help
	  When enabled, backend will use OpenThread dedicated SPINEL protocol for logging.
	  This protocol is byte oriented and wraps given messages into serial frames.
	  Backend should be enabled only to OpenThread purposes and when UART backend is disabled
	  or works on another UART device to avoid interference.

if LOG_BACKEND_SPINEL

config LOG_BACKEND_SPINEL_BUFFER_SIZE
	int "Size of reserved up-buffer for logger output."
	default 64
	help
	  Specify reserved size of up-buffer used for logger output.

backend = SPINEL
backend-str = spinel
source "subsys/logging/Kconfig.template.log_format_config"

endif # LOG_BACKEND_SPINEL

config LOG_BACKEND_NATIVE_POSIX
	bool "Native backend"
	depends on ARCH_POSIX
	default y if !SERIAL
	select LOG_OUTPUT
	help
	  Enable backend in native_posix

if LOG_BACKEND_NATIVE_POSIX

backend = NATIVE_POSIX
backend-str = native_posix
source "subsys/logging/Kconfig.template.log_format_config"

endif # LOG_BACKEND_NATIVE_POSIX

config LOG_BACKEND_XTENSA_SIM
	bool "Xtensa simulator backend"
	depends on SOC_XTENSA_SAMPLE_CONTROLLER || SOC_FAMILY_INTEL_ADSP
	default y if SOC_XTENSA_SAMPLE_CONTROLLER
	select LOG_OUTPUT
	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).

if LOG_BACKEND_XTENSA_SIM

backend = XTENSA_SIM
backend-str = xtensa_sim
source "subsys/logging/Kconfig.template.log_format_config"

endif # LOG_BACKEND_XTENSA_SIM

# Immediate mode cannot be used with network backend as it would cause the sent
# rsyslog message to be malformed.
config LOG_BACKEND_NET
	bool "Networking backend"
	depends on NETWORKING && NET_UDP && !LOG_MODE_IMMEDIATE
	select NET_CONTEXT_NET_PKT_POOL
	select LOG_OUTPUT
	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_AUTOSTART
	bool "Automatically start networking backend"
	default y if NET_CONFIG_NEED_IPV4 || NET_CONFIG_NEED_IPV6
	help
	  When enabled automatically start the networking backend on
	  application start. If no routes to the logging server are available
	  on application startup, this must be set to n and the backend must be
	  started by the application later on. Otherwise the logging
	  thread might block.

backend = NET
backend-str = net
source "subsys/logging/Kconfig.template.log_format_config"

endif # LOG_BACKEND_NET

config LOG_BACKEND_ADSP
	bool "Intel ADSP buffer backend"
	depends on SOC_FAMILY_INTEL_ADSP
	select LOG_OUTPUT
	help
	  Enable backend for the host trace protocol of the Intel ADSP
	  family of audio processors

if LOG_BACKEND_ADSP

backend = ADSP
backend-str = adsp
source "subsys/logging/Kconfig.template.log_format_config"

endif # LOG_BACKEND_ADSP

config LOG_BACKEND_ADSP_HDA
	bool "Intel ADSP HDA backend"
	depends on SOC_FAMILY_INTEL_ADSP && DMA && DMA_INTEL_ADSP_HDA_HOST_OUT
	select LOG_OUTPUT
	help
	  Provide a logging backend which writes to a buffer and
	  periodically flushes to hardware using ringbuffer like
	  semantics provided by DMA_INTEL_ADSP_HDA.

if LOG_BACKEND_ADSP_HDA

backend = ADSP_HDA
backend-str = adsp_hda
source "subsys/logging/Kconfig.template.log_format_config"

config LOG_BACKEND_ADSP_HDA_SIZE
	int "Size of ring buffer"
	range 128 8192
	default 4096
	help
	  Sets the ring buffer size cAVS HDA uses for logging. Effectively
	  determines how many log messages may be written to in a period of time.
	  The period of time is decided by how often to inform the hardware of
	  writes to the buffer.

config LOG_BACKEND_ADSP_HDA_FLUSH_TIME
	int "Time in milliseconds to periodically flush writes to hardware"
	range 1 10000
	default 500
	help
	    The Intel ADSP HDA backend periodically writes out its buffer contents
	    to hardware by informing the DMA hardware the contents of the ring
	    buffer.

config LOG_BACKEND_ADSP_HDA_CAVSTOOL
	bool "Log backend is to be used with cavstool"
	help
		Use cavstool understood IPC messages to inform setup and logging of
		HDA messages.

config LOG_BACKEND_ADSP_HDA_PADDING
	bool "Log backend should pad the buffer with \0 characters when flushing"
	help
		HDA requires transfers be 128 byte aligned such that a partial message may
		never make it across unless padded with \0 characters to the next 128 byte
		aligned address. This may or may not work depending on the log format
		being used but should certainly work with text based logging.

endif # LOG_BACKEND_ADSP_HDA

config LOG_BACKEND_ADSP_MTRACE
	bool "Intel ADSP mtrace backend"
	depends on SOC_FAMILY_INTEL_ADSP
	select LOG_OUTPUT
	help
	  Provide a logging backend which writes to SRAM window
	  using the SOF Linux driver mtrace buffer layout.

if LOG_BACKEND_ADSP_MTRACE

backend = ADSP_MTRACE
backend-str = adsp_mtrace
source "subsys/logging/Kconfig.template.log_format_config"

endif # LOG_BACKEND_ADSP_MTRACE

config LOG_BACKEND_FS
	bool "File system backend"
	depends on FILE_SYSTEM
	select LOG_OUTPUT
	help
	  When enabled, backend is using the configured file system to output logs.
	  As the file system must be mounted for the logging to work, it must be
	  either configured for auto-mount or manually mounted by the application.
	  Log messages are discarded as long as the file system is not mounted.

if LOG_BACKEND_FS

backend = FS
backend-str = fs
source "subsys/logging/Kconfig.template.log_format_config"

config LOG_BACKEND_FS_OVERWRITE
	bool "Old log files overwrite"
	default y
	help
	  When enabled backend overwrites oldest log files.
	  In other case, when memory is full, new messages are dropped.

config LOG_BACKEND_FS_FILE_PREFIX
	string "Log file name prefix"
	default "log."
	help
	  User defined name of log files saved in the file system.
	  The prefix is followed by the number of log file.

config LOG_BACKEND_FS_DIR
	string "Log directory"
	default "/lfs1"
	help
	  Directory to which log files will be written.

config LOG_BACKEND_FS_FILE_SIZE
	int "User defined log file size"
	default 4096
	range 128 1073741824
	help
	  Max log file size (in bytes).

config LOG_BACKEND_FS_FILES_LIMIT
	int "Max number of files containing logs"
	default 10
	help
	  Limit of number of files with logs. It is also limited by
	  size of file system partition.

endif # LOG_BACKEND_FS

config LOG_BACKEND_EFI_CONSOLE
	bool "EFI_CONSOLE backend"
	depends on X86_EFI_CONSOLE
	select LOG_OUTPUT
	default y if !UART_CONSOLE
	help
	  When enabled backend is using EFI CONSOLE to output logs.

if LOG_BACKEND_EFI_CONSOLE

backend = EFI_CON
backend-str = efi_console
source "subsys/logging/Kconfig.template.log_format_config"

endif # LOG_BACKEND_EFI_CONSOLE

endmenu