log: Add a new logging feature
v4 cover log: Add a new logging feature
U-Boot currently has fairly rudimentary logging features. A basic printf() provides console output and debug() provides debug output which is activated if DEBUG is defined in the file containing the debug() statements.
It would be useful to have a few more features:
- control of debug output at runtime, so problems can potentially be debugged without recompiling U-Boot
- control of which subsystems output debug information, so that (for example) it is possible to enable debugging for MMC or SATA at runtime
- indication of severity with each message, so that the user can control whether just errors are displayed, warnings, or all debug messages
- sending logging information to different destinations, such as console, memory, linux, etc,
At present U-Boot has a logbuffer feature which records output in a memory buffer for later display or storage. This is useful but is not at present enabled for any board.
This series introduced a new logging system which supports:
- various log levels from panic to debug
- log categories including all uclasses and a few others
- log drivers to which all log records can be sent
- log filters which control which log records make it to which drivers
Enabling logging with the default options does not add much to code size. By default the maximum recorded log level is LOGL_INFO, meaning that debug messages (and above) are discarded a build-time. Increasing this level provides more run-time flexibility to enable/disable logging at the cost of increased code size.
This feature is by no means finished. The README provides a long list of features and clean-ups that could be done. But hopefully this is a starting point for improving this important area in U-Boot.
The series is available at u-boot-dm/log-working
Changes in v4:
- Add an extra tab in the debug_cond() macro
- Add new patch to correct use of debug() in usb_hub.c
- Handle casting uclass ID to lgo category (for clang)
Changes in v3:
- Rebase to master
Changes in v2:
- Add a comment as to why CONFIG_LOG_MAX_LEVEL is not defined
- Change log levels to match new header
- Change sandbox log level to 6
- Drop MAINTAINERS entries for files not added by this patch
- Drop the special log() functions from the README
- Drop the use of 'continue' in the macro
- Fix LOG_SPL_MAX_LEVEL typo (should be SPL_LOG_MAX_LEVEL)
- Fix function called when test command is selected
- Fix help output for 'log test'
- Fix up bad use of #if CONFIG_VAL() - use #ifdef instead
- Line up log levels with Linux
- Only execute log tests if CONFIG_LOG is enabled
- Rename LOGL_WARN to LOGL_WARNING
- Split pre-console address change into a separate patch
- Update commit message to explain that this is not just for serial output
Simon Glass (15):
Revert "sandbox: remove os_putc() and os_puts()"
sandbox: Adjust pre-console address to avoid conflict Revert "sandbox: Drop special case console code for sandbox" Move debug and logging support to a separate header
mtdparts: Correct use of debug()
usb: Correct use of debug()
Drop the log buffer
log: Add an implementation of logging
log: Add a console driver
log: Add a 'log level' command
log: Add a test command
log: Plumb logging into the init sequence
log: sandbox: Enable logging
log: test: Add a pytest for logging
log: Add documentation
MAINTAINERS | 9 ++ arch/sandbox/cpu/os.c | 11 ++ cmd/Kconfig | 8 + cmd/Makefile | 2 +- cmd/log.c | 326 +++++--------------------------------- cmd/mtdparts.c | 3 - common/Kconfig | 86 ++++++++++ common/Makefile | 2 + common/board_f.c | 23 +-- common/board_r.c | 27 +--- common/console.c | 7 + common/image.c | 9 -- common/log.c | 245 ++++++++++++++++++++++++++++ common/log_console.c | 23 +++ common/stdio.c | 6 - common/usb_hub.c | 4 +- configs/sandbox_defconfig | 5 +- doc/README.log | 214 +++++++++++++++++++++++++ include/asm-generic/global_data.h | 8 +- include/common.h | 46 +----- include/log.h | 304 +++++++++++++++++++++++++++++++++++ include/logbuff.h | 49 ------ include/os.h | 20 +++ include/post.h | 4 +- post/post.c | 9 -- post/tests.c | 4 - scripts/config_whitelist.txt | 1 - test/Makefile | 1 + test/log/Makefile | 7 + test/log/log_test.c | 205 ++++++++++++++++++++++++ test/py/tests/test_log.py | 101 ++++++++++++ 31 files changed, 1304 insertions(+), 465 deletions(-) create mode 100644 common/log.c create mode 100644 common/log_console.c create mode 100644 doc/README.log create mode 100644 include/log.h delete mode 100644 include/logbuff.h create mode 100644 test/log/Makefile create mode 100644 test/log/log_test.c create mode 100644 test/py/tests/test_log.py
Signature · 1 line
2.15.0.531.g2ccb3012c9-goog
PATCH v4 1/15 Revert "sandbox: remove os_putc() and os_puts()"
While sandbox works OK without the special-case code, it does result in console output being stored in the pre-console buffer while sandbox starts up. If there is a crash or a problem then there is no indication of what is going on.
For ease of debugging it seems better to revert this change.
This reverts commit 47b98ad0f6779485d0f0c14f337c3eece273eb54.
---
Changes in v4: None
Changes in v3: None
Changes in v2: None
arch/sandbox/cpu/os.c | 11 +++++++++++ include/os.h | 20 ++++++++++++++++++++ 2 files changed, 31 insertions(+)
arch/sandbox/cpu/os.c +11 -0
@@ -421,6 +421,17 @@ int os_get_filesize(const char *fname, loff_t *size)return 0 ; } +void os_putc (int ch) +{ +putchar (ch); +} + +void os_puts (const char *str) +{ +while (*str) +os_putc (*str++); +} +int os_write_ram_buf (const char *fname) {struct sandbox_state *state =state_get_current ();
include/os.h +20 -0
@@ -240,6 +240,26 @@ const char *os_dirent_get_typename(enum os_dirent_t type);*/ int os_get_filesize (const char *fname,loff_t *size); +/** +* Write a character to the controlling OS terminal +* +* This bypasses the U-Boot console support and writes directly to the OS +* stdout file descriptor. +* +* @param ch Character to write +*/ +void os_putc (int ch); + +/** +* Write a string to the controlling OS terminal +* +* This bypasses the U-Boot console support and writes directly to the OS +* stdout file descriptor. +* +* @param str String to write (note that \n is not appended) +*/ +void os_puts (const char *str); +/** * Write the sandbox RAM buffer to a existing file *
Signature · 1 line
2.15.0.531.g2ccb3012c9-goog
PATCH v4 1/15 Revert "sandbox: remove os_putc() and os_puts()"
Quoted 10 lines · Simon Glass
While sandbox works OK without the special-case code, it does result in console output being stored in the pre-console buffer while sandbox starts up. If there is a crash or a problem then there is no indication of what is going on.
For ease of debugging it seems better to revert this change.
This reverts commit
47b98ad0f6779485d0f0c14f337c3eece273eb54.Signed-off-by Simon Glass <[email protected]>
Applied to u-boot/master, thanks!
Signature · 8 lines
Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 819 bytes Desc: not available URL: <http://lists.denx.de/pipermail/u-boot/attachments/20171207/e2c1126a/attachment.sig>
PATCH v4 2/15 sandbox: Adjust pre-console address to avoid conflict
In reply to Simon GlassWe cannot use sandbox memory at 0 since other things use memory at that address. Move it up out of the way.
Note that the pre-console buffer is currently disabled with sandbox, but this change will avoid confusion if it is manually enabled.
---
Changes in v4: None
Changes in v3: None
Changes in v2:
- Split pre-console address change into a separate patch
configs/sandbox_defconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
configs/sandbox_defconfig +1 -1
@@ -15,7 +15,7 @@ CONFIG_CONSOLE_RECORD=y CONFIG_CONSOLE_RECORD_OUT_SIZE=0x1000 CONFIG_SILENT_CONSOLE=y CONFIG_PRE_CONSOLE_BUFFER=y -CONFIG_PRE_CON_BUF_ADDR=0 +CONFIG_PRE_CON_BUF_ADDR=0x100000 CONFIG_CMD_CPU=y CONFIG_CMD_LICENSE=y CONFIG_CMD_BOOTZ=y
Signature · 1 line
2.15.0.531.g2ccb3012c9-goog
PATCH v4 2/15 sandbox: Adjust pre-console address to avoid conflict
Quoted 7 lines · Simon Glass
We cannot use sandbox memory at 0 since other things use memory at that address. Move it up out of the way.
Note that the pre-console buffer is currently disabled with sandbox, but this change will avoid confusion if it is manually enabled.
Signed-off-by Simon Glass <[email protected]>
Applied to u-boot/master, thanks!
Signature · 8 lines
Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 819 bytes Desc: not available URL: <http://lists.denx.de/pipermail/u-boot/attachments/20171207/14e9dd7b/attachment.sig>
PATCH v4 3/15 Revert "sandbox: Drop special case console code for sandbox"
In reply to Simon GlassWhile sandbox works OK without the special-case code, it does result in console output being stored in the pre-console buffer while sandbox starts up. If there is a crash or a problem then there is no indication of what is going on.
For ease of debugging it seems better to revert this change also.
This reverts commit d8c6fb8cedbc35eee27730a7fa544e499b3c81cc.
---
Changes in v4: None
Changes in v3: None
Changes in v2: None
common/console.c | 7 +++++++ 1 file changed, 7 insertions(+)
common/console.c +7 -0
@@ -489,6 +489,13 @@ static inline void print_pre_console_buffer(int flushpoint) {}void putc (const char c) { +#ifdef CONFIG_SANDBOX +/* sandbox can send characters to stdout before it has a console */ +if (!gd || !(gd->flags &GD_FLG_SERIAL_READY )) { +os_putc (c); +return ; + } +#endif #ifdef CONFIG_DEBUG_UART /* if we don't have a console yet, use the debug UART */ if (!gd || !(gd->flags &GD_FLG_SERIAL_READY )) {
Signature · 1 line
2.15.0.531.g2ccb3012c9-goog
PATCH v4 3/15 Revert "sandbox: Drop special case console code for sandbox"
Quoted 10 lines · Simon Glass
While sandbox works OK without the special-case code, it does result in console output being stored in the pre-console buffer while sandbox starts up. If there is a crash or a problem then there is no indication of what is going on.
For ease of debugging it seems better to revert this change also.
This reverts commit
d8c6fb8cedbc35eee27730a7fa544e499b3c81cc.Signed-off-by Simon Glass <[email protected]>
Applied to u-boot/master, thanks!
Signature · 8 lines
Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 819 bytes Desc: not available URL: <http://lists.denx.de/pipermail/u-boot/attachments/20171207/24186519/attachment.sig>
PATCH v4 4/15 Move debug and logging support to a separate header
In reply to Simon GlassBefore adding new features, move these definitions to a separate header to avoid further cluttering common.h.
---
Changes in v4: None
Changes in v3: None
Changes in v2: None
include/common.h | 46 +------------------------------------------ include/log.h | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+), 45 deletions(-) create mode 100644 include/log.h
include/common.h +1 -45
@@ -45,51 +45,7 @@ typedef volatile unsigned char vu_char;#define CONFIG_SYS_SUPPORT_64BIT_DATA #endif -#ifdef DEBUG -#define _DEBUG 1 -#else -#define _DEBUG 0 -#endif - -#ifdef CONFIG_SPL_BUILD -#define _SPL_BUILD 1 -#else -#define _SPL_BUILD 0 -#endif - -/* -* Output a debug text when condition "cond" is met. The "cond" should be -* computed by a preprocessor in the best case, allowing for the best -* optimization. -*/ -#define debug_cond(cond, fmt, args...) \ - do { \ - if (cond) \ - printf(pr_fmt(fmt), ##args); \ - } while (0) - -/* Show a message if DEBUG is defined in a file */ -#define debug(fmt, args...) \ - debug_cond(_DEBUG, fmt, ##args) - -/* Show a message if not in SPL */ -#define warn_non_spl(fmt, args...) \ - debug_cond(!_SPL_BUILD, fmt, ##args) - -/* -* An assertion is run-time check done in debug mode only. If DEBUG is not -* defined then it is skipped. If DEBUG is defined and the assertion fails, -* then it calls panic*( which may or may not reset/halt U-Boot (see -* CONFIG_PANIC_HANG), It is hoped that all failing assertions are found -* before release, and after release it is hoped that they don't matter. But -* in any case these failing assertions cannot be fixed with a reset (which -* may just do the same assertion again). -*/ -void __assert_fail (const char *assertion,const char *file,unsigned line, -const char *function); -#define assert (x) \ - ({ if (!(x) && _DEBUG) \ - __assert_fail(#x, __FILE__, __LINE__, __func__); }) +#include <log.h> typedef void (interrupt_handler_t )(void *);
include/log.h new file +59 -0
59 lines not on this page · raw message
Signature · 1 line
2.15.0.531.g2ccb3012c9-goog
PATCH v4 4/15 Move debug and logging support to a separate header
Quoted 5 lines · Simon Glass
Before adding new features, move these definitions to a separate header to avoid further cluttering
common.h.Signed-off-by Simon Glass <[email protected]>Reviewed-by Bin Meng <[email protected]>
Applied to u-boot/master, thanks!
Signature · 8 lines
Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 819 bytes Desc: not available URL: <http://lists.denx.de/pipermail/u-boot/attachments/20171207/f598f1c0/attachment.sig>
PATCH v4 5/15 mtdparts: Correct use of debug()
In reply to Simon GlassThe debug() macro now evaluates its expression so does not need #ifdef protection. In fact the current code causes a warning with the new log implementation. Adjust the code to fix this.
---
Changes in v4: None
Changes in v3: None
Changes in v2: None
cmd/mtdparts.c | 3 --- 1 file changed, 3 deletions(-)
cmd/mtdparts.c +0 -3
@@ -873,15 +873,12 @@ static int device_parse(const char *const mtd_dev, const char **ret, struct mtd_return 1 ; } -#ifdef DEBUG pend =strchr (p,';' ); -#endif debug ("dev type = %d (%s), dev num = %d, mtd-id = %s\n" , id->type,MTD_DEV_TYPE (id->type), id->num, id->mtd_id);debug ("parsing partitions %.*s\n" , (int )(pend ? pend - p :strlen (p)), p); -/* parse partitions */ num_parts =0 ;
Signature · 1 line
2.15.0.531.g2ccb3012c9-goog
PATCH v4 5/15 mtdparts: Correct use of debug()
Quoted 6 lines · Simon Glass
The
debug()macro now evaluates its expression so does not need #ifdef protection. In fact the current code causes a warning with the new log implementation. Adjust the code to fix this.Signed-off-by Simon Glass <[email protected]>Reviewed-by Bin Meng <[email protected]>
Applied to u-boot/master, thanks!
Signature · 8 lines
Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 819 bytes Desc: not available URL: <http://lists.denx.de/pipermail/u-boot/attachments/20171207/d065c2c8/attachment.sig>
PATCH v4 6/15 usb: Correct use of debug()
In reply to Simon GlassWith clang this gives a warning because hubsts appears to be used before it is set, even if ultimately it is not used. Simplify the code to avoid this problem.
---
Changes in v4:
- Add new patch to correct use of debug() in usb_hub.c
Changes in v3: None
Changes in v2: None
common/usb_hub.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-)
common/usb_hub.c +1 -3
@@ -625,7 +625,7 @@ static int usb_hub_configure(struct usb_device *dev)short hubCharacteristics;struct usb_hub_descriptor *descriptor;struct usb_hub_device *hub; -__maybe_unused struct usb_hub_status *hubsts; +struct usb_hub_status *hubsts;int ret; hub =usb_get_hub_device (dev);
@@ -779,9 +779,7 @@ static int usb_hub_configure(struct usb_device *dev)return ret; } -#ifdef DEBUG hubsts = (struct usb_hub_status *)buffer; -#endif debug("get_hub_status returned status %X, change %X\n", le16_to_cpu(hubsts->wHubStatus),
Signature · 1 line
2.15.0.531.g2ccb3012c9-goog
PATCH v4 6/15 usb: Correct use of debug()
Quoted 5 lines · Simon Glass
With clang this gives a warning because hubsts appears to be used before it is set, even if ultimately it is not used. Simplify the code to avoid this problem.
Signed-off-by Simon Glass <[email protected]>
Applied to u-boot/master, thanks!
Signature · 8 lines
Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 819 bytes Desc: not available URL: <http://lists.denx.de/pipermail/u-boot/attachments/20171207/48000300/attachment.sig>
PATCH v4 7/15 Drop the log buffer
In reply to Simon GlassThis does not appear to be used by any boards. Before introducing a new log system, remove this old one.
---
Changes in v4: None
Changes in v3: None
Changes in v2: None
cmd/Makefile | 1 - cmd/log.c | 313 -------------------------------------- common/board_f.c | 18 --- common/board_r.c | 25 +-- common/image.c | 9 -- common/stdio.c | 6 - include/asm-generic/global_data.h | 2 +- include/logbuff.h | 49 ------ include/post.h | 4 +- post/post.c | 9 -- post/tests.c | 4 - scripts/config_whitelist.txt | 1 - 12 files changed, 5 insertions(+), 436 deletions(-) delete mode 100644 cmd/log.c delete mode 100644 include/logbuff.h
cmd/Makefile +0 -1
@@ -76,7 +76,6 @@ obj-$(CONFIG_LED_STATUS_CMD) += legacy_led.o obj-$(CONFIG_CMD_LED) += led.o obj-$(CONFIG_CMD_LICENSE) += license.o obj-y += load.o -obj-$(CONFIG_LOGBUFFER) += log.o obj-$(CONFIG_ID_EEPROM) += mac.o obj-$(CONFIG_CMD_MD5SUM) += md5sum.o obj-$(CONFIG_CMD_MEMORY) += mem.o
cmd/log.c deleted +0 -313
313 lines not on this page · raw message
common/board_f.c +0 -18
@@ -19,7 +19,6 @@#include <i2c.h> #include <initcall.h> #include <init_helpers.h> -#include <logbuff.h> #include <malloc.h> #include <mapmem.h> #include <os.h>
@@ -296,20 +295,6 @@ static int setup_dest_addr(void)return 0 ; } -#if defined(CONFIG_LOGBUFFER ) -static int reserve_logbuffer (void ) -{ -#ifndef CONFIG_ALT_LB_ADDR -/* reserve kernel log buffer */ - gd->relocaddr -=LOGBUFF_RESERVE ; -debug ("Reserving %dk for kernel logbuffer at %08lx\n" ,LOGBUFF_LEN , - gd->relocaddr); -#endif - -return 0 ; -} -#endif -#ifdef CONFIG_PRAM /* reserve protected RAM */ static int reserve_pram (void )
@@ -846,9 +831,6 @@ static const init_fnc_t init_sequence_f[] = {* - board info struct */ setup_dest_addr, -#if defined(CONFIG_LOGBUFFER ) - reserve_logbuffer, -#endif #ifdef CONFIG_PRAM reserve_pram,#endif
common/board_r.c +2 -23
@@ -30,7 +30,6 @@#if defined(CONFIG_CMD_KGDB )#include <kgdb.h> #endif -#include <logbuff.h> #include <malloc.h> #include <mapmem.h> #ifdef CONFIG_BITBANGMII
@@ -200,19 +199,6 @@ static int initr_addr_map(void) }#endif -#ifdef CONFIG_LOGBUFFER -unsigned long logbuffer_base (void ) -{ -return gd->ram_top -LOGBUFF_LEN ; -} - -static int initr_logbuffer (void ) -{ -logbuff_init_ptrs (); -return 0 ; -} -#endif -#ifdef CONFIG_POST static int initr_post_backlog (void ) {
@@ -628,7 +614,7 @@ static int initr_ide(void) }#endif -#if defined(CONFIG_PRAM ) || defined(CONFIG_LOGBUFFER ) +#if defined(CONFIG_PRAM )/* * Export available size of memory for Linux, taking into account the * protected RAM at top of memory
@@ -640,10 +626,6 @@ int initr_mem(void)# ifdef CONFIG_PRAM pram =env_get_ulong ("pram" ,10 ,CONFIG_PRAM ); -# endif -# if defined(CONFIG_LOGBUFFER ) && !defined(CONFIG_ALT_LB_ADDR ) -/* Also take the logbuffer into account (pram is in kB) */ - pram += (LOGBUFF_LEN +LOGBUFF_OVERHEAD ) /1024 ;# endif sprintf (memsz,"%ldk" , (long int ) ((gd->ram_size /1024 ) - pram));env_set ("mem" , memsz);
@@ -753,9 +735,6 @@ static init_fnc_t init_sequence_r[] = { board_early_init_r, #endif INIT_FUNC_WATCHDOG_RESET -#ifdef CONFIG_LOGBUFFER - initr_logbuffer, -#endif #ifdef CONFIG_POST initr_post_backlog,#endif
@@ -877,7 +856,7 @@ static init_fnc_t init_sequence_r[] = { INIT_FUNC_WATCHDOG_RESET initr_bedbug,#endif -#if defined(CONFIG_PRAM ) || defined(CONFIG_LOGBUFFER ) +#if defined(CONFIG_PRAM ) initr_mem,#endif #ifdef CONFIG_PS2KBD
common/image.c +0 -9
@@ -15,10 +15,6 @@#include <status_led.h> #endif -#ifdef CONFIG_LOGBUFFER -#include <logbuff.h> -#endif -#include <rtc.h> #include <environment.h>
@@ -1154,11 +1150,6 @@ int boot_ramdisk_high(struct lmb *lmb, ulong rd_data, ulong rd_len, } -#ifdef CONFIG_LOGBUFFER -/* Prevent initrd from overwriting logbuffer */ -lmb_reserve (lmb,logbuffer_base () -LOGBUFF_OVERHEAD ,LOGBUFF_RESERVE ); -#endif -debug ("## initrd_high = 0x%08lx, copy_to_ram = %d\n" , initrd_high, initrd_copy_to_ram);
common/stdio.c +0 -6
@@ -17,9 +17,6 @@#include <malloc.h> #include <stdio_dev.h> #include <serial.h> -#ifdef CONFIG_LOGBUFFER -#include <logbuff.h> -#endif #if defined(CONFIG_SYS_I2C )#include <i2c.h>
@@ -380,9 +377,6 @@ int stdio_add_devices(void)#endif /* CONFIG_DM_VIDEO */ #if defined(CONFIG_KEYBOARD ) && !defined(CONFIG_DM_KEYBOARD )drv_keyboard_init (); -#endif -#ifdef CONFIG_LOGBUFFER -drv_logbuff_init ();#endif drv_system_init ();serial_stdio_init ();
include/asm-generic/global_data.h +1 -1
@@ -36,7 +36,7 @@ typedef struct global_data {#if defined(CONFIG_LCD ) || defined(CONFIG_VIDEO )unsigned long fb_base;/* Base address of framebuffer mem */ #endif -#if defined(CONFIG_POST ) || defined(CONFIG_LOGBUFFER ) +#if defined(CONFIG_POST )unsigned long post_log_word;/* Record POST activities */ unsigned long post_log_res;/* success of POST test */ unsigned long post_init_f_time;/* When post_init_f started */
include/logbuff.h deleted +0 -49
49 lines not on this page · raw message
include/post.h +2 -2
@@ -15,7 +15,7 @@#include <common.h> #include <asm/io.h> -#if defined(CONFIG_POST ) || defined(CONFIG_LOGBUFFER ) +#if defined(CONFIG_POST )#ifndef CONFIG_POST_EXTERNAL_WORD_FUNCS #ifdef CONFIG_SYS_POST_WORD_ADDR
@@ -58,7 +58,7 @@ extern ulong post_word_load(void);extern void post_word_store (ulong value);#endif /* CONFIG_POST_EXTERNAL_WORD_FUNCS */ -#endif /* defined (CONFIG_POST) || defined(CONFIG_LOGBUFFER) */ +#endif /* defined (CONFIG_POST) */ #endif /* __ASSEMBLY__ */ #ifdef CONFIG_POST
post/post.c +0 -9
@@ -15,10 +15,6 @@#include <asm/gpio.h> #endif -#ifdef CONFIG_LOGBUFFER -#include <logbuff.h> -#endif -DECLARE_GLOBAL_DATA_PTR ;#define POST_MAX_NUMBER 32
@@ -407,13 +403,8 @@ int post_log(char *format, ...)vsprintf (printbuffer, format, args);va_end (args); -#ifdef CONFIG_LOGBUFFER -/* Send to the logbuffer */ -logbuff_log (printbuffer); -#else /* Send to the stdout file */ puts (printbuffer); -#endif return 0 ; }
post/tests.c +0 -4
@@ -3,10 +3,6 @@* Wolfgang Denk, DENX Software Engineering, wd at denx.de. * * SPDX-License-Identifier: GPL-2.0+ -* -* Be sure to mark tests to be run before relocation as such with the -* CONFIG_SYS_POST_PREREL flag so that logging is done correctly if the -* logbuffer support is enabled. */ #include <common.h>
scripts/config_whitelist.txt +0 -1
@@ -1258,7 +1258,6 @@ CONFIG_LMS283GF05 CONFIG_LOADADDR CONFIG_LOADCMD CONFIG_LOADS_ECHO -CONFIG_LOGBUFFER CONFIG_LOWPOWER_ADDR CONFIG_LOWPOWER_FLAG CONFIG_LOW_MCFCLK
Signature · 1 line
2.15.0.531.g2ccb3012c9-goog
PATCH v4 7/15 Drop the log buffer
Quoted 5 lines · Simon Glass
This does not appear to be used by any boards. Before introducing a new log system, remove this old one.
Signed-off-by Simon Glass <[email protected]>Reviewed-by Bin Meng <[email protected]>
Applied to u-boot/master, thanks!
Signature · 8 lines
Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 819 bytes Desc: not available URL: <http://lists.denx.de/pipermail/u-boot/attachments/20171207/e1addcbb/attachment.sig>
PATCH v4 8/15 log: Add an implementation of logging
In reply to Simon GlassAdd the logging header file and implementation with some configuration options to control it.
---
Changes in v4:
- Add an extra tab in the debug_cond() macro
- Handle casting uclass ID to lgo category (for clang)
Changes in v3: None
Changes in v2:
- Add a comment as to why CONFIG_LOG_MAX_LEVEL is not defined
- Drop MAINTAINERS entries for files not added by this patch
- Drop the use of 'continue' in the macro
- Fix LOG_SPL_MAX_LEVEL typo (should be SPL_LOG_MAX_LEVEL)
- Fix up bad use of #if CONFIG_VAL() - use #ifdef instead
- Line up log levels with Linux
MAINTAINERS | 7 ++ common/Kconfig | 56 +++++++++ common/Makefile | 1 + common/log.c | 244 ++++++++++++++++++++++++++++++++++++++ include/asm-generic/global_data.h | 5 + include/log.h | 242 +++++++++++++++++++++++++++++++++++++ 6 files changed, 555 insertions(+) create mode 100644 common/log.c
MAINTAINERS +7 -0
@@ -310,6 +310,13 @@ S: Maintained T: git git://git.denx.de/u-boot-i2c.git F: drivers/i2c/ +LOGGING +M: Simon Glass <[email protected]> +S: Maintained +T: git git://git.denx.de/u-boot.git +F: common/log.c +F: cmd/log.c + MICROBLAZE M: Michal Simek <[email protected]> S: Maintained
common/Kconfig +56 -0
62 lines not on this page · raw message
common/Makefile +1 -0
@@ -128,5 +128,6 @@ obj-y += cli.o obj-$(CONFIG_FSL_DDR_INTERACTIVE) += cli_simple.o cli_readline.o obj-$(CONFIG_CMD_DFU) += dfu.o obj-y += command.o +obj-$(CONFIG_$(SPL_)LOG) += log.o obj-y += s_record.o obj-y += xyzModem.o
common/log.c new file +244 -0
244 lines not on this page · raw message
include/asm-generic/global_data.h +5 -0
@@ -114,6 +114,11 @@ typedef struct global_data {struct bootstage_data *bootstage;/* Bootstage information */ struct bootstage_data *new_bootstage;/* Relocated bootstage info */ #endif +#ifdef CONFIG_LOG +int log_drop_count;/* Number of dropped log messages */ +int default_log_level;/* For devices with no filters */ +struct list_head log_head;/* List of struct log_device */ +#endif } gd_t;#endif
include/log.h +242 -0
264 lines not on this page · raw message
Signature · 1 line
2.15.0.531.g2ccb3012c9-goog
PATCH v4 8/15 log: Add an implementation of logging
Quoted 4 lines · Simon Glass
Add the logging header file and implementation with some configuration options to control it.
Signed-off-by Simon Glass <[email protected]>
Applied to u-boot/master, thanks!
Signature · 8 lines
Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 819 bytes Desc: not available URL: <http://lists.denx.de/pipermail/u-boot/attachments/20171207/333effbf/attachment.sig>
PATCH v4 9/15 log: Add a console driver
In reply to Simon GlassIt is useful to display log messages on the console. Add a simple driver to handle this.
Note that this driver outputs to the console, which may be serial or video. It does not specifically select serial output.
---
Changes in v4: None
Changes in v3: None
Changes in v2:
- Update commit message to explain that this is not just for serial output
common/Kconfig | 20 ++++++++++++++++++++ common/Makefile | 1 + common/log_console.c | 23 +++++++++++++++++++++++ 3 files changed, 44 insertions(+) create mode 100644 common/log_console.c
common/Kconfig +20 -0
@@ -474,6 +474,26 @@ config SPL_LOG_MAX_LEVEL 6 - detail 7 - debug +config LOG_CONSOLE + bool "Allow log output to the console" + depends on LOG + default y + help + Enables a log driver which writes log records to the console. + Generally the console is the serial port or LCD display. Only the + log message is shown - other details like level, category, file and + line number are omitted. + +config LOG_SPL_CONSOLE + bool "Allow log output to the console in SPL" + depends on LOG_SPL + default y + help + Enables a log driver which writes log records to the console. + Generally the console is the serial port or LCD display. Only the + log message is shown - other details like level, category, file and + line number are omitted. + endmenu config DEFAULT_FDT_FILE
common/Makefile +1 -0
@@ -129,5 +129,6 @@ obj-$(CONFIG_FSL_DDR_INTERACTIVE) += cli_simple.o cli_readline.o obj-$(CONFIG_CMD_DFU) += dfu.o obj-y += command.o obj-$(CONFIG_$(SPL_)LOG) += log.o +obj-$(CONFIG_$(SPL_)LOG_CONSOLE) += log_console.o obj-y += s_record.o obj-y += xyzModem.o
common/log_console.c new file +23 -0
@@ -0,0 +1,23 @@ +/* +* Logging support +* +* Copyright (c) 2017 Google, Inc +* Written by Simon Glass <[email protected]> +* +* SPDX-License-Identifier: GPL-2.0+ +*/ + +#include <common.h> +#include <log.h> + +static int log_console_emit (struct log_device *ldev,struct log_rec *rec) +{ +puts (rec->msg); + +return 0 ; +} + +LOG_DRIVER (console) = { + .name ="console" , + .emit = log_console_emit, +};
Signature · 1 line
2.15.0.531.g2ccb3012c9-goog
PATCH v4 9/15 log: Add a console driver
Quoted 8 lines · Simon Glass
It is useful to display log messages on the console. Add a simple driver to handle this.
Note that this driver outputs to the console, which may be serial or video. It does not specifically select serial output.
Signed-off-by Simon Glass <[email protected]>Reviewed-by Bin Meng <[email protected]>
Applied to u-boot/master, thanks!
Signature · 8 lines
Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 819 bytes Desc: not available URL: <http://lists.denx.de/pipermail/u-boot/attachments/20171207/89c2f477/attachment.sig>
PATCH v4 10/15 log: Add a 'log level' command
In reply to Simon GlassAdd a command for adjusting the log level.
---
Changes in v4: None
Changes in v3: None
Changes in v2: None
cmd/Kconfig | 7 +++++++ cmd/Makefile | 1 + cmd/log.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 63 insertions(+) create mode 100644 cmd/log.c
cmd/Kconfig +7 -0
@@ -1502,6 +1502,13 @@ config CMD_KGDB single-stepping, inspecting variables, etc. This is supported only on PowerPC at present. +config CMD_LOG + bool "log - Generation, control and access to logging" + help + This provides access to logging features. It allows the output of + log data to be controlled to a limited extent (setting up the default + maximum log level for emitting of records). + config CMD_TRACE bool "trace - Support tracing of function calls and timing" help
cmd/Makefile +1 -0
@@ -76,6 +76,7 @@ obj-$(CONFIG_LED_STATUS_CMD) += legacy_led.o obj-$(CONFIG_CMD_LED) += led.o obj-$(CONFIG_CMD_LICENSE) += license.o obj-y += load.o +obj-$(CONFIG_CMD_LOG) += log.o obj-$(CONFIG_ID_EEPROM) += mac.o obj-$(CONFIG_CMD_MD5SUM) += md5sum.o obj-$(CONFIG_CMD_MEMORY) += mem.o
cmd/log.c new file +55 -0
55 lines not on this page · raw message
Signature · 1 line
2.15.0.531.g2ccb3012c9-goog
PATCH v4 10/15 log: Add a 'log level' command
Quoted 4 lines · Simon Glass
Add a command for adjusting the log level.
Signed-off-by Simon Glass <[email protected]>Reviewed-by Bin Meng <[email protected]>
Applied to u-boot/master, thanks!
Signature · 8 lines
Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 819 bytes Desc: not available URL: <http://lists.denx.de/pipermail/u-boot/attachments/20171207/9ec848a0/attachment.sig>
PATCH v4 11/15 log: Add a test command
In reply to Simon GlassAdd a command which exercises the logging system.
---
Changes in v4:
- Handle casting uclass ID to lgo category (for clang)
Changes in v3: None
Changes in v2:
- Fix function called when test command is selected
- Fix help output for 'log test'
- Rename LOGL_WARN to LOGL_WARNING
MAINTAINERS | 1 + cmd/Kconfig | 3 +- cmd/log.c | 6 ++ common/Kconfig | 10 +++ include/log.h | 3 + test/Makefile | 1 + test/log/Makefile | 7 ++ test/log/log_test.c | 205 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 8 files changed, 235 insertions(+), 1 deletion(-) create mode 100644 test/log/Makefile create mode 100644 test/log/log_test.c
MAINTAINERS +1 -0
@@ -316,6 +316,7 @@ S: Maintained T: git git://git.denx.de/u-boot.git F: common/log.c F: cmd/log.c +F: test/log/log_test.c MICROBLAZE M: Michal Simek <[email protected]>
cmd/Kconfig +2 -1
@@ -1507,7 +1507,8 @@ config CMD_LOG help This provides access to logging features. It allows the output of log data to be controlled to a limited extent (setting up the default - maximum log level for emitting of records). + maximum log level for emitting of records). It also provides access + to a command used for testing the log system. config CMD_TRACE bool "trace - Support tracing of function calls and timing"
cmd/log.c +6 -0
@@ -23,6 +23,9 @@ static int do_log_level(cmd_tbl_t *cmdtp, int flag, int argc,static cmd_tbl_t log_sub[] = {U_BOOT_CMD_MKENT (level,CONFIG_SYS_MAXARGS ,1 , do_log_level,"" ,"" ), +#ifdef CONFIG_LOG_TEST +U_BOOT_CMD_MKENT (test,2 ,1 , do_log_test,"" ,"" ), +#endif };static int do_log (cmd_tbl_t *cmdtp,int flag,int argc,char *const argv[])
@@ -46,6 +49,9 @@ static int do_log(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])#ifdef CONFIG_SYS_LONGHELP static char log_help_text[] ="level - get/set log level\n" +#ifdef CONFIG_LOG_TEST +"log test - run log tests\n" +#endif ;#endif
common/Kconfig +10 -0
@@ -494,6 +494,16 @@ config LOG_SPL_CONSOLE log message is shown - other details like level, category, file and line number are omitted. +config LOG_TEST + bool "Provide a test for logging" + depends on LOG + default y if SANDBOX + help + This enables a 'log test' command to test logging. It is normally + executed from a pytest and simply outputs logging information + in various different ways to test that the logging system works + correctly with varoius settings. + endmenu config DEFAULT_FDT_FILE
include/log.h +3 -0
@@ -256,6 +256,9 @@ struct log_filter {#define LOG_DRIVER (_name) \ ll_entry_declare(struct log_driver, _name, log_driver) +/* Handle the 'log test' command */ +int do_log_test (cmd_tbl_t *cmdtp,int flag,int argc,char *const argv[]); +/** * log_add_filter() - Add a new filter to a log device *
test/Makefile +1 -0
@@ -10,3 +10,4 @@ obj-$(CONFIG_SANDBOX) += command_ut.o obj-$(CONFIG_SANDBOX) += compression.o obj-$(CONFIG_SANDBOX) += print_ut.o obj-$(CONFIG_UT_TIME) += time_ut.o +obj-$(CONFIG_$(SPL_)LOG) += log/
test/log/Makefile new file +7 -0
@@ -0,0 +1,7 @@ +# +# Copyright (c) 2017 Google, Inc +# +# SPDX-License-Identifier: GPL-2.0+ +# + +obj-$(CONFIG_LOG_TEST) += log_test.o
test/log/log_test.c new file +205 -0
205 lines not on this page · raw message
Signature · 1 line
2.15.0.531.g2ccb3012c9-goog
PATCH v4 11/15 log: Add a test command
Quoted 3 lines · Simon Glass
Add a command which exercises the logging system.
Signed-off-by Simon Glass <[email protected]>
Applied to u-boot/master, thanks!
Signature · 8 lines
Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 819 bytes Desc: not available URL: <http://lists.denx.de/pipermail/u-boot/attachments/20171207/fa88efd3/attachment.sig>
PATCH v4 12/15 log: Plumb logging into the init sequence
In reply to Simon GlassSet up logging both before and after relocation.
---
Changes in v4: None
Changes in v3: None
Changes in v2: None
common/board_f.c | 5 ++++- common/board_r.c | 2 ++ common/log.c | 1 + include/asm-generic/global_data.h | 1 + 4 files changed, 8 insertions(+), 1 deletion(-)
common/board_f.c +4 -1
@@ -751,6 +751,7 @@ static const init_fnc_t init_sequence_f[] = { trace_early_init, #endif initf_malloc, + log_init, initf_bootstage,/* uses its own timer, so does not need DM */ initf_console_record, #if defined(CONFIG_HAVE_FSP)
@@ -932,8 +933,10 @@ void board_init_f_r(void)* The pre-relocation drivers may be using memory that has now gone * away. Mark serial as unavailable - this will fall back to the debug * UART if available. +* +* Do the same with log drivers since the memory may not be available. */ - gd->flags &= ~GD_FLG_SERIAL_READY ; + gd->flags &= ~(GD_FLG_SERIAL_READY |GD_FLG_LOG_READY );#ifdef CONFIG_TIMER gd->timer =NULL ;#endif
common/board_r.c +2 -0
@@ -691,6 +691,7 @@ static init_fnc_t init_sequence_r[] = {#endif initr_barrier, initr_malloc, + log_init, initr_bootstage,/* Needs malloc() but has its own timer */ initr_console_record, #ifdef CONFIG_SYS_NONCACHED_MEMORY
@@ -884,6 +885,7 @@ void board_init_r(gd_t *new_gd, ulong dest_addr)#if !defined(CONFIG_X86 ) && !defined(CONFIG_ARM ) && !defined(CONFIG_ARM64 ) gd = new_gd;#endif + gd->flags &= ~GD_FLG_LOG_READY ;#ifdef CONFIG_NEEDS_MANUAL_RELOC for (i =0 ; i <ARRAY_SIZE (init_sequence_r); i++)
common/log.c +1 -0
@@ -238,6 +238,7 @@ int log_init(void) (struct list_head *)&gd->log_head); drv++; } + gd->flags |=GD_FLG_LOG_READY ; gd->default_log_level =LOGL_INFO ;return 0 ;
include/asm-generic/global_data.h +1 -0
@@ -146,5 +146,6 @@ typedef struct global_data {#define GD_FLG_RECORD 0x01000/* Record console */ #define GD_FLG_ENV_DEFAULT 0x02000/* Default variable flag */ #define GD_FLG_SPL_EARLY_INIT 0x04000/* Early SPL init is done */ +#define GD_FLG_LOG_READY 0x08000/* Log system is ready for use */ #endif /* __ASM_GENERIC_GBL_DATA_H */
Signature · 1 line
2.15.0.531.g2ccb3012c9-goog
PATCH v4 12/15 log: Plumb logging into the init sequence
Quoted 4 lines · Simon Glass
Set up logging both before and after relocation.
Signed-off-by Simon Glass <[email protected]>Reviewed-by Bin Meng <[email protected]>
Applied to u-boot/master, thanks!
Signature · 8 lines
Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 819 bytes Desc: not available URL: <http://lists.denx.de/pipermail/u-boot/attachments/20171207/fefb0992/attachment.sig>
PATCH v4 13/15 log: sandbox: Enable logging
In reply to Simon GlassEnable all logging features on sandbox so that the tests can be run.
---
Changes in v4: None
Changes in v3: None
Changes in v2:
- Change sandbox log level to 6
configs/sandbox_defconfig | 3 +++ 1 file changed, 3 insertions(+)
configs/sandbox_defconfig +3 -0
@@ -16,6 +16,8 @@ CONFIG_CONSOLE_RECORD_OUT_SIZE=0x1000 CONFIG_SILENT_CONSOLE=y CONFIG_PRE_CONSOLE_BUFFER=y CONFIG_PRE_CON_BUF_ADDR=0x100000 +CONFIG_LOG=y +CONFIG_LOG_MAX_LEVEL=6 CONFIG_CMD_CPU=y CONFIG_CMD_LICENSE=y CONFIG_CMD_BOOTZ=y
@@ -64,6 +66,7 @@ CONFIG_CMD_CBFS=y CONFIG_CMD_CRAMFS=y CONFIG_CMD_EXT4_WRITE=y CONFIG_CMD_MTDPARTS=y +CONFIG_CMD_LOG=y CONFIG_MAC_PARTITION=y CONFIG_AMIGA_PARTITION=y CONFIG_OF_CONTROL=y
Signature · 1 line
2.15.0.531.g2ccb3012c9-goog
PATCH v4 13/15 log: sandbox: Enable logging
Quoted 4 lines · Simon Glass
Enable all logging features on sandbox so that the tests can be run.
Signed-off-by Simon Glass <[email protected]>Reviewed-by Bin Meng <[email protected]>
Applied to u-boot/master, thanks!
Signature · 8 lines
Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 819 bytes Desc: not available URL: <http://lists.denx.de/pipermail/u-boot/attachments/20171207/dd5947aa/attachment.sig>
PATCH v4 14/15 log: test: Add a pytest for logging
In reply to Simon GlassAdd a test which tries out various filters and options to make sure that logging works as expected.
---
Changes in v4: None
Changes in v3: None
Changes in v2:
- Change log levels to match new header
- Only execute log tests if CONFIG_LOG is enabled
- Rename LOGL_WARN to LOGL_WARNING
MAINTAINERS | 1 + test/py/tests/test_log.py | 101 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 102 insertions(+) create mode 100644 test/py/tests/test_log.py
MAINTAINERS +1 -0
@@ -317,6 +317,7 @@ T: git git://git.denx.de/u-boot.git F: common/log.c F: cmd/log.c F: test/log/log_test.c +F: test/py/tests/test_log.py MICROBLAZE M: Michal Simek <[email protected]>
test/py/tests/test_log.py new file +101 -0
101 lines not on this page · raw message
Signature · 1 line
2.15.0.531.g2ccb3012c9-goog
PATCH v4 14/15 log: test: Add a pytest for logging
Quoted 4 lines · Simon Glass
Add a test which tries out various filters and options to make sure that logging works as expected.
Signed-off-by Simon Glass <[email protected]>
Applied to u-boot/master, thanks!
Signature · 8 lines
Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 819 bytes Desc: not available URL: <http://lists.denx.de/pipermail/u-boot/attachments/20171207/ff1fbe82/attachment.sig>
PATCH v4 15/15 log: Add documentation
In reply to Simon GlassAdd documentation for the log system.
---
Changes in v4: None
Changes in v3:
- Rebase to master
Changes in v2:
- Drop the special log() functions from the README
doc/README.log | 214 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 214 insertions(+) create mode 100644 doc/README.log
doc/README.log new file +214 -0
@@ -0,0 +1,214 @@ +Logging in U-Boot +================= + +Introduction +------------ + +U-Boot's internal operation involves many different steps and actions. From +setting up the board to displaying a start-up screen to loading an Operating +System, there are many component parts each with many actions. + +Most of the time this internal detail is not useful. Displaying it on the +console would delay booting (U-Boot's primary purpose) and confuse users. + +But for digging into what is happening in a particular area, or for debugging +a problem it is often useful to see what U-Boot is doing in more detail than +is visible from the basic console output. + +U-Boot's logging feature aims to satisfy this goal for both users and +developers. + + +Logging levels +-------------- + +There are a number logging levels available, in increasing order of verbosity: + + LOGL_EMERG - Printed before U-Boot halts + LOGL_ALERT - Indicates action must be taken immediate or U-Boot will crash + LOGL_CRIT - Indicates a critical error that will cause boot failure + LOGL_ERR - Indicates an error that may cause boot failure + LOGL_WARNING - Warning about an unexpected condition + LOGL_NOTE - Important information about progress + LOGL_INFO - Information about normal boot progress + LOGL_DEBUG - Debug information (useful for debugging a driver or subsystem) + LOGL_DEBUG_CONTENT - Debug message showing full message content + LOGL_DEBUG_IO - Debug message showing hardware I/O access + + +Logging category +---------------- + +Logging can come from a wide variety of places within U-Boot. Each log message +has a category which is intended to allow messages to be filtered according to +their source. + +The following main categories are defined: + + LOGC_NONE - Unknown category (e.g. a debug() statement) + UCLASS_... - Related to a particular uclass (e.g. UCLASS_USB) + LOGC_ARCH - Related to architecture-specific code + LOGC_BOARD - Related to board-specific code + LOGC_CORE - Related to core driver-model support + LOGC_DT - Related to device tree control + + +Enabling logging +---------------- + +The following options are used to enable logging at compile time: + + CONFIG_LOG - Enables the logging system + CONFIG_MAX_LOG_LEVEL - Max log level to build (anything higher is compiled + out) + CONFIG_LOG_CONSOLE - Enable writing log records to the console + +If CONFIG_LOG is not set, then no logging will be available. + +The above have SPL versions also, e.g. CONFIG_SPL_MAX_LOG_LEVEL. + + +Using DEBUG +----------- + +U-Boot has traditionally used a #define called DEBUG to enable debugging on a +file-by-file basis. The debug() macro compiles to a printf() statement if +DEBUG is enabled, and an empty statement if not. + +With logging enabled, debug() statements are interpreted as logging output +with a level of LOGL_DEBUG and a category of LOGC_NONE. + +The logging facilities are intended to replace DEBUG, but if DEBUG is defined +at the top of a file, then it takes precedence. This means that debug() +statements will result in output to the console and this output will not be +logged. + + +Logging destinations +-------------------- + +If logging information goes nowhere then it serves no purpose. U-Boot provides +several possible determinations for logging information, all of which can be +enabled or disabled independently: + + console - goes to stdout + + +Filters +------- + +Filters are attached to log drivers to control what those drivers emit. Only +records that pass through the filter make it to the driver. + +Filters can be based on several criteria: + + - maximum log level + - in a set of categories + - in a set of files + +If no filters are attached to a driver then a default filter is used, which +limits output to records with a level less than CONFIG_LOG_MAX_LEVEL. + + +Logging statements +------------------ + +The main logging function is: + + log(category, level, format_string, ...) + +Also debug() and error() will generate log records - these use LOG_CATEGORY +as the category, so you should #define this right at the top of the source +file to ensure the category is correct. + + +Code size +--------- + +Code size impact depends largely on what is enabled. The following numbers are +for snow, which is a Thumb-2 board: + +This series: adds bss +20.0 data +4.0 rodata +4.0 text +44.0 +CONFIG_LOG: bss -52.0 data +92.0 rodata -635.0 text +1048.0 +CONFIG_LOG_MAX_LEVEL=7: bss +188.0 data +4.0 rodata +49183.0 text +98124.0 + +The last option turns every debug() statement into a logging call, which +bloats the code hugely. The advantage is that it is then possible to enable +all logging within U-Boot. + + +To Do +----- + +There are lots of useful additions that could be made. None of the below is +implemented! If you do one, please add a test in test/py/tests/test_log.py + +Convenience functions to support setting the category: + + log_arch(level, format_string, ...) - category LOGC_ARCH + log_board(level, format_string, ...) - category LOGC_BOARD + log_core(level, format_string, ...) - category LOGC_CORE + log_dt(level, format_string, ...) - category LOGC_DT + +Convenience functions to support a category defined for a single file, for +example: + + #define LOG_CATEGORY UCLASS_USB + +all of these can use LOG_CATEGORY as the category, and a log level +corresponding to the function name: + + logc(level, format_string, ...) + +More logging destinations: + + device - goes to a device (e.g. serial) + buffer - recorded in a memory buffer + +Convert debug() statements in the code to log() statements + +Support making printf() emit log statements a L_INFO level + +Convert error() statements in the code to log() statements + +Figure out what to do with BUG(), BUG_ON() and warn_non_spl() + +Figure out what to do with assert() + +Add a way to browse log records + +Add a way to record log records for browsing using an external tool + +Add commands to add and remove filters + +Add commands to add and remove log devices + +Allow sharing of printf format strings in log records to reduce storage size +for large numbers of log records + +Add a command-line option to sandbox to set the default logging level + +Convert core driver model code to use logging + +Convert uclasses to use logging with the correct category + +Consider making log() calls emit an automatic newline, perhaps with a logn() + function to avoid that + +Passing log records through to linux (e.g. via device tree /chosen) + +Provide a command to access the number of log records generated, and the +number dropped due to them being generated before the log system was ready. + +Add a printf() format string pragma so that log statements are checked properly + +Enhance the log console driver to show level / category / file / line +information + +Add a command to add new log records and delete existing records. + +Provide additional log() functions - e.g. logc() to specify the category + +-- +Simon Glass <[email protected]> +15-Sep-17
Signature · 1 line
2.15.0.531.g2ccb3012c9-goog
PATCH v4 15/15 log: Add documentation
Quoted 4 lines · Simon Glass
Add documentation for the log system.
Signed-off-by Simon Glass <[email protected]>Reviewed-by Bin Meng <[email protected]>
Applied to u-boot/master, thanks!
Signature · 8 lines
Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 819 bytes Desc: not available URL: <http://lists.denx.de/pipermail/u-boot/attachments/20171207/b85b6d7e/attachment.sig>