From: Simon Glass <sjg@chromium.org>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 13/13] log: Add documentation
Date: Sat, 16 Sep 2017 15:23:26 -0600 [thread overview]
Message-ID: <20170916212331.170463-14-sjg@chromium.org> (raw)
In-Reply-To: <20170916212331.170463-1-sjg@chromium.org>
Add documentation for the log system.
Signed-off-by: Simon Glass <sjg@chromium.org>
---
doc/README.log | 220 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 220 insertions(+)
create mode 100644 doc/README.log
diff --git a/doc/README.log b/doc/README.log
new file mode 100644
index 0000000000..0f2d8b84dd
--- /dev/null
+++ b/doc/README.log
@@ -0,0 +1,220 @@
+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_PANIC - Printed before U-Boot halts
+ LOGL_CRIT - Indicates a critical error that will cause boot failure
+ LOGL_ERR - Indicates an error that may cause boot failure
+ LOGL_WARN - Warning about an unexpected condition
+ LOGL_NOTE - Important information about progress
+ LOGL_INFO - Information about normal boot progress
+ LOGL_DETAIL - Detailed information (e.g. internal operation of drivers)
+ LOGL_DEBUG - Debug information (useful for debugging a driver or subsystem)
+
+
+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, ...)
+ pr_panic(format_string, ...)
+ pr_crit(format_string, ...)
+ pr_err(format_string, ...)
+ pr_warn(format_string, ...)
+ pr_note(format_string, ...)
+ pr_info(format_string, ...)
+ pr_detail(format_string, ...)
+ pr_debug(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 <sjg@chromium.org>
+15-Sep-17
--
2.14.1.690.gbb1197296e-goog
next prev parent reply other threads:[~2017-09-16 21:23 UTC|newest]
Thread overview: 52+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-09-16 21:23 [U-Boot] [PATCH 00/13] log: Add a new logging feature Simon Glass
2017-09-16 21:23 ` [U-Boot] [PATCH 01/13] Revert "sandbox: remove os_putc() and os_puts()" Simon Glass
2017-09-17 12:48 ` Bin Meng
2017-09-17 17:55 ` Simon Glass
2017-09-16 21:23 ` [U-Boot] [PATCH 02/13] Revert "sandbox: Drop special case console code for sandbox" Simon Glass
2017-09-17 12:50 ` Bin Meng
2017-09-17 17:55 ` Simon Glass
2017-09-16 21:23 ` [U-Boot] [PATCH 03/13] Move debug and logging support to a separate header Simon Glass
2017-09-17 12:52 ` Bin Meng
2017-09-16 21:23 ` [U-Boot] [PATCH 04/13] mtdparts: Correct use of debug() Simon Glass
2017-09-17 12:54 ` Bin Meng
2017-09-16 21:23 ` [U-Boot] [PATCH 05/13] Drop the log buffer Simon Glass
2017-09-17 12:58 ` Bin Meng
2017-09-16 21:23 ` [U-Boot] [PATCH 06/13] log: Add an implemention of logging Simon Glass
2017-09-18 3:45 ` Bin Meng
2017-09-20 13:50 ` Simon Glass
2017-09-20 14:41 ` Bin Meng
2017-09-20 14:51 ` Dr. Philipp Tomsich
2017-09-21 4:58 ` Simon Glass
2017-09-22 13:37 ` Bin Meng
2017-09-25 2:14 ` Simon Glass
2017-09-20 2:51 ` Masahiro Yamada
2017-09-20 13:49 ` Simon Glass
2017-09-20 14:37 ` Dr. Philipp Tomsich
2017-09-20 17:34 ` Masahiro Yamada
2017-09-20 17:51 ` Dr. Philipp Tomsich
2017-09-27 16:19 ` Masahiro Yamada
2017-09-20 17:19 ` Masahiro Yamada
2017-09-26 19:10 ` Simon Glass
2017-09-27 17:11 ` Masahiro Yamada
2017-09-28 12:39 ` Simon Glass
2017-09-16 21:23 ` [U-Boot] [PATCH 07/13] log: Add a console driver Simon Glass
2017-09-18 3:45 ` Bin Meng
2017-09-26 19:10 ` Simon Glass
2017-09-16 21:23 ` [U-Boot] [PATCH 08/13] log: Add a 'log level' command Simon Glass
2017-09-18 3:46 ` Bin Meng
2017-09-16 21:23 ` [U-Boot] [PATCH 09/13] log: Add a test command Simon Glass
2017-09-18 3:47 ` Bin Meng
2017-09-16 21:23 ` [U-Boot] [PATCH 10/13] log: Plumb logging into the init sequence Simon Glass
2017-09-18 3:47 ` Bin Meng
2017-09-16 21:23 ` [U-Boot] [PATCH 11/13] log: sandbox: Enable logging Simon Glass
2017-09-18 3:47 ` Bin Meng
2017-09-16 21:23 ` [U-Boot] [PATCH 12/13] log: test: Add a pytest for logging Simon Glass
2017-09-16 21:23 ` Simon Glass [this message]
2017-09-18 3:47 ` [U-Boot] [PATCH 13/13] log: Add documentation Bin Meng
2017-09-20 3:04 ` Masahiro Yamada
2017-09-20 13:49 ` Simon Glass
2017-09-20 2:32 ` [U-Boot] [PATCH 00/13] log: Add a new logging feature Masahiro Yamada
2017-09-20 20:20 ` Heinrich Schuchardt
2017-09-21 4:58 ` Simon Glass
2017-09-20 19:55 ` Wolfgang Denk
2017-09-21 4:58 ` Simon Glass
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170916212331.170463-14-sjg@chromium.org \
--to=sjg@chromium.org \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox