Update/replace drivers/syslog/README.txt
This commit is contained in:
parent
9c87749afc
commit
b3acebd292
@ -1,74 +1,452 @@
|
|||||||
drivers/syslog README File
|
drivers/syslog README File
|
||||||
==========================
|
==========================
|
||||||
|
|
||||||
This README file discusses the SYLOG drivers that can be found in the
|
SYSLOG Interfaces
|
||||||
drivers/syslog directory. The syslogging interfaces are defined in the
|
=================
|
||||||
header file include/syslog.h. In NuttX, "syslog output" is really
|
|
||||||
synonymous to "debug output" and, therefore, the debugging interfaces
|
|
||||||
defined in the header file include/debug.h are also sysloggin interfaces.
|
|
||||||
|
|
||||||
All SYSLOG output gots to syslog_putc. What syslog_putc does, however,
|
Standard SYSLOG Interfaces
|
||||||
depends on the configuration. By default, all system log output will go
|
--------------------------
|
||||||
to the console device (/dev/console). But that behavior can be changed
|
The NuttX SYSLOG is an architecture for getting debug and status
|
||||||
reconfiguring NuttX.
|
information from the system. The syslogging interfaces are defined in the
|
||||||
|
header file include/syslog.h. The primary interface to SYSLOG sub-system
|
||||||
|
is the function syslog() and, to a lesser extent, its companion vsyslog():
|
||||||
|
|
||||||
One version of syslog_putc() is defined in fs/fs_syslog.c; that version is
|
syslog() and vsyslog()
|
||||||
used when CONFIG_SYSLOG_CHAR is defined. That version of syslog_putc()
|
----------------------
|
||||||
just integrates with the file system to re-direct debug output to a
|
Prototypes:
|
||||||
character device or to a file. A disadvantage of using the generic character
|
|
||||||
device for the SYSLOG is that it cannot handle debug output generated from
|
|
||||||
interrupt level handles.
|
|
||||||
|
|
||||||
If CONFIG_SYSLOG_CHAR is not defined, then other custom SYSLOG drivers
|
int syslog(int priority, FAR const IPTR char *format, ...);
|
||||||
can be used. These custom SYSLOG drivers can do things like handle
|
int vsyslog(int priority, FAR const IPTR char *src, va_list ap);
|
||||||
unusual logging media and since they can avoid the general file system
|
|
||||||
interfaces, can be designed to support debug output from interrupt handlers.
|
|
||||||
|
|
||||||
Those custom SYSLOG drivers reside in this directory.
|
Description:
|
||||||
|
|
||||||
|
syslog() generates a log message. The priority argument is formed by
|
||||||
|
ORing the facility and the level values (see include/syslog.h). The
|
||||||
|
remaining arguments are a format, as in printf and any arguments to the
|
||||||
|
format.
|
||||||
|
|
||||||
|
The NuttX implementation does not support any special formatting
|
||||||
|
characters beyond those supported by printf.
|
||||||
|
|
||||||
|
The function vsyslog() performs the same task as syslog() with the
|
||||||
|
difference that it takes a set of arguments which have been obtained
|
||||||
|
using the stdarg variable argument list macros.
|
||||||
|
|
||||||
|
setlogmask()
|
||||||
|
------------
|
||||||
|
The additional setlogmask() interface can use use to filter SYSLOG output:
|
||||||
|
|
||||||
|
Prototypes:
|
||||||
|
|
||||||
|
int setlogmask(int mask);
|
||||||
|
|
||||||
|
Description:
|
||||||
|
|
||||||
|
The setlogmask() function sets the logmask and returns the previous
|
||||||
|
mask. If the mask argument is 0, the current logmask is not modified.
|
||||||
|
|
||||||
|
The SYSLOG priorities are: LOG_EMERG, LOG_ALERT, LOG_CRIT, LOG_ERR,
|
||||||
|
LOG_WARNING, LOG_NOTICE, LOG_INFO, and LOG_DEBUG. The bit corresponding
|
||||||
|
to a priority p is LOG_MASK(p); LOG_UPTO(p) provides the mask of all
|
||||||
|
priorities in the above list up to and including p.
|
||||||
|
|
||||||
|
Per OpenGroup.org "If the maskpri argument is 0, the current log mask
|
||||||
|
is not modified." In this implementation, the value zero is permitted
|
||||||
|
in order to disable all syslog levels.
|
||||||
|
|
||||||
|
REVISIT: Per POSIX the syslog mask should be a per-process value but in
|
||||||
|
NuttX, the scope of the mask is dependent on the nature of the build:
|
||||||
|
|
||||||
|
* Flat Build: There is one, global SYSLOG mask that controls all output.
|
||||||
|
Protected Build: There are two SYSLOG masks. One within the kernel
|
||||||
|
that controls only kernel output. And one in user-space that controls
|
||||||
|
only user SYSLOG output.
|
||||||
|
* Kernel Build: The kernel build is compliant with the POSIX requirement:
|
||||||
|
There will be one mask for for each user process, controlling the
|
||||||
|
SYSLOG output only form that process. There will be a separate mask
|
||||||
|
accessable only in the kernel code to control kernel SYSLOG output.
|
||||||
|
*
|
||||||
|
|
||||||
|
These are all standard interfaces as defined at http://pubs.opengroup.org/onlinepubs/009695399/functions/closelog.html
|
||||||
|
|
||||||
|
Debug Interfaces
|
||||||
|
----------------
|
||||||
|
In NuttX, syslog output is really synonymous to debug output and,
|
||||||
|
therefore, the debugging interface macros defined in the header file
|
||||||
|
include/debug.h are also syslogging interfaces. Those macros are simply
|
||||||
|
wrappers around syslog(). The debugging interfaces differ from the syslog
|
||||||
|
interfaces in that:
|
||||||
|
|
||||||
|
* They do not take a priority parameter; the priority is inherent in the
|
||||||
|
debug macro name.
|
||||||
|
* They decorate the output stream with information such as the file name
|
||||||
|
* They can each be disabled via configuration options.
|
||||||
|
|
||||||
|
Each debug macro has a base name that represents the priority and a prefix
|
||||||
|
that represents the sub-system. Each macro is individually initialized by
|
||||||
|
both priority and sub-system. For example, uerr() is the macro used for
|
||||||
|
error level messages from the USB subsystem and is enabled with
|
||||||
|
CONFIG_DEBUG_USB_ERROR.
|
||||||
|
|
||||||
|
The base debug macro names, their priority, and configuration variable are
|
||||||
|
summarized below:
|
||||||
|
|
||||||
|
* info(). The info() macro is the lowest priority (LOG_INFO) and is
|
||||||
|
intended to provide general information about the flow of program
|
||||||
|
execution so that you can get an overview of the behavior of the
|
||||||
|
program. info() is often very chatty and voluminous and usually more
|
||||||
|
information than you may want to see. The info() macro is controlled
|
||||||
|
via CONFIG_DEBUG_subsystem_INFO
|
||||||
|
* warn(). The warn() macro has medium priority (LOG_WARN) and is
|
||||||
|
controlled by CONFIG_DEBUG_subsystem_WARN. The warn() is intended to
|
||||||
|
note exceptional or unexpected conditions that meigh be potential
|
||||||
|
errors or, perhaps, minor errors that easily recovered.
|
||||||
|
* err(). This is a high priority debug macro (LOG_ERROR) and controlled
|
||||||
|
by CONFIG_DEBUG_subsystem_ERROR. The err() is reserved to indicate
|
||||||
|
important error conditions.
|
||||||
|
* alert(). The highest priority debug macro (LOG_EMERG) and is
|
||||||
|
controlled by CONFIG_DEBUG_ALERT. The alert() macro is reserved for
|
||||||
|
use solely by assertion and crash handling logic. It also differs
|
||||||
|
from the other macros in that there it cannot be enabled per
|
||||||
|
subsystem.
|
||||||
|
|
||||||
|
SYSLOG Channels
|
||||||
|
===============
|
||||||
|
|
||||||
|
SYSLOG Channel Interfaces
|
||||||
|
-------------------------
|
||||||
|
In the NuttX SYSLOG implementation, the underlying device logic the
|
||||||
|
supports the SYSLOG output is referred to as a SYSLOG channel//. Each
|
||||||
|
SYSLOG channel is represented by an interface defined in
|
||||||
|
include/nuttx/syslog/syslog.h:
|
||||||
|
|
||||||
|
/* This structure provides the interface to a SYSLOG device */
|
||||||
|
|
||||||
|
typedef CODE int (*syslog_putc_t)(int ch);
|
||||||
|
typedef CODE int (*syslog_flush_t)(void);
|
||||||
|
|
||||||
|
struct syslog_channel_s
|
||||||
|
{
|
||||||
|
/* I/O redirection methods */
|
||||||
|
|
||||||
|
syslog_putc_t sc_putc; /* Normal buffered output */
|
||||||
|
syslog_putc_t sc_force; /* Low-level output for interrupt handlers */
|
||||||
|
syslog_flush_t sc_flush; /* Flush buffered output (on crash) */
|
||||||
|
|
||||||
|
/* Implementation specific logic may follow */
|
||||||
|
};
|
||||||
|
|
||||||
|
The channel interface is instantiated by calling syslog_channel():
|
||||||
|
|
||||||
|
syslog_channel()
|
||||||
|
----------------
|
||||||
|
Prototype:
|
||||||
|
|
||||||
|
int syslog_channel(FAR const struct syslog_channel_s *channel);
|
||||||
|
|
||||||
|
Description:
|
||||||
|
|
||||||
|
Configure the SYSLOGging function to use the provided channel to
|
||||||
|
generate SYSLOG output.
|
||||||
|
|
||||||
|
Input Parmeters:
|
||||||
|
|
||||||
|
* channel - Provides the interface to the channel to be used.
|
||||||
|
|
||||||
|
Returned Value:
|
||||||
|
|
||||||
|
Zero (OK)is returned on success. A negated errno value is returned
|
||||||
|
on any failure.
|
||||||
|
|
||||||
|
syslog_channel() is a non-standard, internal OS interface and is not
|
||||||
|
avaiable to applications. It may be called numerous times as necessary to
|
||||||
|
change channel interfaces.
|
||||||
|
|
||||||
|
By default, all system log output goes to console (/dev/console). But
|
||||||
|
that behavior can be changed by the defining CONFIG_SYSLOG in the NuttX
|
||||||
|
configuration. In that, case all low-level debug output will go through
|
||||||
|
syslog_putc().
|
||||||
|
|
||||||
|
NOTE: Using the NuttX configuration tool, you will need to enable basic
|
||||||
|
SYSLOG features under the File System menu. Later we will talk about the
|
||||||
|
RAMLOG device. That device is configured in the SYSLOG section under the
|
||||||
|
Device Drivers menu. But you will only see the options there if you
|
||||||
|
enable the basic SYSLOG capability in the File System menu first.
|
||||||
|
|
||||||
|
SYSLOG Channel Initialization
|
||||||
|
-----------------------------
|
||||||
|
The initial, default SYSLOG channel is established with statically
|
||||||
|
initialized global variables so that some level of SYSLOG output may be
|
||||||
|
available immediately upon reset. This initialized data is in the file
|
||||||
|
drivers/syslog/syslog_channel.c. The initial SYSLOG capability is
|
||||||
|
determined by the selected SYSLOG channel:
|
||||||
|
|
||||||
|
* In-Memory Buffer (RAMLOG). Full SYSLOG capability as available at
|
||||||
|
reset.
|
||||||
|
* Serial Console. If the serial implementation provides the low-level
|
||||||
|
character output function up_putc(), then that low level serial output
|
||||||
|
is available as soon as the serial device has been configured.
|
||||||
|
* For all other SYSLOG channels, all SYSLOG output goes to the bit-
|
||||||
|
bucket until the SYSLOG channel device has been initialized.
|
||||||
|
|
||||||
|
The syslog channel device is initialized when the bring-up logic calls
|
||||||
|
syslog_intialize():
|
||||||
|
|
||||||
|
syslog_initialize()
|
||||||
|
-------------------
|
||||||
|
Prototype:
|
||||||
|
|
||||||
|
#ifndef CONFIG_ARCH_SYSLOG
|
||||||
|
int syslog_initialize(enum syslog_init_e phase);
|
||||||
|
#else
|
||||||
|
# define syslog_initialize(phase)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
Description:
|
||||||
|
|
||||||
|
One power up, the SYSLOG facility is non-existent or limited to very
|
||||||
|
low-level output. This function is called later in the initialization
|
||||||
|
sequence after full driver support has been initialized. It installs
|
||||||
|
the configured SYSLOG drivers and enables full SYSLOGing capability.
|
||||||
|
|
||||||
|
This function performs these basic operations:
|
||||||
|
|
||||||
|
* Initialize the SYSLOG device
|
||||||
|
* Call syslog_channel() to begin using that device.
|
||||||
|
* If CONFIG_ARCH_SYSLOG is selected, then the architecture-specific
|
||||||
|
logic will provide its own SYSLOG device initialize which must include
|
||||||
|
as a minimum a call to syslog_channel() to use the device.
|
||||||
|
|
||||||
|
Input Parameters:
|
||||||
|
* phase - One of {SYSLOG_INIT_EARLY, SYSLOG_INIT_LATE}
|
||||||
|
|
||||||
|
Returned Value:
|
||||||
|
Zero (OK) is returned on success; a negated errno value is returned on
|
||||||
|
any failure.
|
||||||
|
|
||||||
|
Different types of SYSLOG devices have different OS initialization
|
||||||
|
requirements. Some are available immediately at reset, some are available
|
||||||
|
after some basic OS initialization, and some only after OS is fully
|
||||||
|
initialized. In order to satisfy these different initialization
|
||||||
|
requirements, syslog_initialize() is called twice from the boot-up logic:
|
||||||
|
|
||||||
|
* syslog_initialize() is called from the architecture-specific
|
||||||
|
up_initialize() function as some as basic hardware resources have been
|
||||||
|
initialized: Timers, interrupts, etc. In this case,
|
||||||
|
syslog_initialize() is called with the argument SYSLOG_INIT_EARLY.
|
||||||
|
* syslog_initialize() is called again from os_start() when the full OS
|
||||||
|
initialization has completed, just before the application main entry
|
||||||
|
point is spawned. In this case, syslog_initialize() is called with
|
||||||
|
the argument SYSLOG_INIT_LATE.
|
||||||
|
|
||||||
|
There are other types of SYSLOG channel devices that may require even
|
||||||
|
further initialization. For example, the file SYSLOG channel (described
|
||||||
|
below) cannot be initialized until the necessary file systems have been
|
||||||
|
mounted.
|
||||||
|
|
||||||
|
SYSLOG Channel Options
|
||||||
|
======================
|
||||||
|
|
||||||
|
SYSLOG Console Device
|
||||||
|
---------------------
|
||||||
|
The typical SYSLOG device is the system console. If you are using a
|
||||||
|
serial console, for example, then the SYSLOG output will appear on that
|
||||||
|
serial port.
|
||||||
|
|
||||||
|
This SYSLOG channel is automatically selected by syslog_initialize() in
|
||||||
|
the LATE initialization phase based on configuration options. The
|
||||||
|
configuration options that affect this channel selection include:
|
||||||
|
|
||||||
|
* CONFIG_DEV_CONSOLE. This setting indicates that the system supports a
|
||||||
|
console device, i.e., that the character device /dev/console exists.
|
||||||
|
* CONFIG_SERIAL_CONSOLE. This configuration option is automatically
|
||||||
|
selected when a UART or USART is configured as the system console.
|
||||||
|
There is no user selection.
|
||||||
|
* CONFIG_SYSLOG_CONSOLE. This configuration option is manually selected
|
||||||
|
from the SYSLOG menu. This is the option that acutally enables the
|
||||||
|
SYSLOG console device. It depends on CONFIG_DEV_CONSOLE and it will
|
||||||
|
automatically select CONFIG_SYSLOG_SERIAL_CONSOLE if
|
||||||
|
CONFIG_SERIAL_CONSOLE is selected.
|
||||||
|
* CONFIG_ARCH_LOWPUTC. This is an indication from the architecture
|
||||||
|
configuration that the platform supports the up_putc() interface.
|
||||||
|
up_putc() is a very low level UART interface that can even be used from
|
||||||
|
interrupt handling.
|
||||||
|
* CONFIG_SYSLOG_SERIAL_CONSOLE. This enables certain features of the
|
||||||
|
SYSLOG operation that depend on a serial console. If
|
||||||
|
CONFIG_ARCH_LOWPUTC is also selected, for example, then up_putc() will
|
||||||
|
be used for the forced SYSLOG output.
|
||||||
|
|
||||||
|
Interrupt level SYSLOG output will be lost unless: (1) the interrupt buffer
|
||||||
|
is enabled to support serialization, or (2) a serial console is used and
|
||||||
|
up_putc() is supported.
|
||||||
|
|
||||||
|
NOTE: The console channel uses the fixed character device at /dev/console.
|
||||||
|
The console channel is not synonymous with stdout (or file descriptor 1).
|
||||||
|
stdout is the current output from a task when, say, printf() if used.
|
||||||
|
Initially, stdout does, indeed, use the /dev/console device. However,
|
||||||
|
stdout may subsequently be redirected to some other device or file. This
|
||||||
|
is always the case, for example, when a transient device is used for a
|
||||||
|
console -- such as a USB console or a Telnet console. The SYSLOG channel
|
||||||
|
is not redirected as stdout is; the SYSLOG channel will stayed fixed (unless
|
||||||
|
it is explicitly changed via syslog_channel()).
|
||||||
|
|
||||||
|
References: drivers/syslog/syslog_consolechannel.c and
|
||||||
|
drivers/syslog/syslog_device.c
|
||||||
|
|
||||||
|
SYSLOG Character Device
|
||||||
|
-----------------------
|
||||||
|
The system console device, /dev/console, is a character driver with some
|
||||||
|
special properties. However, any character driver may be used as the
|
||||||
|
SYSLOG output channel. For example, suppose you have a serial console on
|
||||||
|
/dev/ttyS0 and you want SYSLOG output on /dev/ttyS1. Or suppose you
|
||||||
|
support only a Telnet console but want to capture debug output
|
||||||
|
/dev/ttyS0.
|
||||||
|
|
||||||
|
This SYSLOG device chhannl is selected with CONFIG_SYSLOG_CHAR and has no
|
||||||
|
other dependencies. Differences fromthe SYSLOG console channel include:
|
||||||
|
|
||||||
|
* CONFIG_SYSLOG_DEVPATH. This configuration option string must be set
|
||||||
|
provide the full path to the character device to be used.
|
||||||
|
* The forced SYSLOG output always goes to the bit-bucket. This means
|
||||||
|
that interrupt level SYSLOG output will be lost unless the interrupt
|
||||||
|
buffer is enabled to support serialization.
|
||||||
|
* CONFIG_SYSLOG_CHAR_CRLF. If CONFIG_SYSLOG_CHAR_CRLF is selected, then
|
||||||
|
linefeeds in the SYSLOG output will be expanded to Carriage Return +
|
||||||
|
Linefeed. Since the character device is not a console device, the
|
||||||
|
addition of carriage returns to line feeds would not be performed
|
||||||
|
otherwise. You would probably want this expansion if you use a serial
|
||||||
|
terminal program with the character device output.
|
||||||
|
|
||||||
|
References: drivers/syslog/syslog_devchannel.c and
|
||||||
|
drivers/syslog/syslog_device.c
|
||||||
|
|
||||||
|
SYSLOG File Device
|
||||||
|
------------------
|
||||||
|
Files can also be used as the sink for SYSLOG output. There is, however,
|
||||||
|
a very fundamental difference in using a file as opposed the system
|
||||||
|
console, a RAM buffer, or character device: You must first mount the
|
||||||
|
file system that supports the SYSLOG file. That difference means that
|
||||||
|
the file SYSLOG channel cannot be supported during the boot-up phase but
|
||||||
|
can be instantiated later when board level logic configures the application
|
||||||
|
environment, including mounting of the file systems.
|
||||||
|
|
||||||
|
The interface syslog_file_channal() is used to configure the SYSLOG file
|
||||||
|
channel:
|
||||||
|
|
||||||
|
syslog_file_channel()
|
||||||
|
---------------------
|
||||||
|
Prototype:
|
||||||
|
|
||||||
|
#ifdef CONFIG_SYSLOG_FILE
|
||||||
|
int syslog_file_channel(FAR const char *devpath);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
Description:
|
||||||
|
|
||||||
|
Configure to use a file in a mounted file system at 'devpath' as the
|
||||||
|
SYSLOG channel.
|
||||||
|
|
||||||
|
This tiny function is simply a wrapper around syslog_dev_initialize()
|
||||||
|
and syslog_channel(). It calls syslog_dev_initialize() to configure
|
||||||
|
the character file at 'devpath then calls syslog_channel() to use that
|
||||||
|
device as the SYSLOG output channel.
|
||||||
|
|
||||||
|
File SYSLOG channels differ from other SYSLOG channels in that they
|
||||||
|
cannot be established until after fully booting and mounting the target
|
||||||
|
file system. This function would need to be called from board-specific
|
||||||
|
bring-up logic AFTER mounting the file system containing 'devpath'.
|
||||||
|
|
||||||
|
SYSLOG data generated prior to calling syslog_file_channel will, of
|
||||||
|
course, not be included in the file.
|
||||||
|
|
||||||
|
NOTE interrupt level SYSLOG output will be lost in this case unless
|
||||||
|
the interrupt buffer is used.
|
||||||
|
|
||||||
|
Input Parameters:
|
||||||
|
* devpath - The full path to the file to be used for SYSLOG output.
|
||||||
|
This may be an existing file or not. If the file exists,
|
||||||
|
syslog_file_channel() will append new SYSLOG data to the end of the
|
||||||
|
file. If it does not, then syslog_file_channel() will create the
|
||||||
|
file.
|
||||||
|
|
||||||
|
Returned Value:
|
||||||
|
Zero (OK) is returned on success; a negated errno value is returned on
|
||||||
|
any failure.
|
||||||
|
|
||||||
|
References: drivers/syslog/syslog_filechannel.c,
|
||||||
|
drivers/syslog/syslog_device.c, and include/nuttx/syslog/syslog.h.
|
||||||
|
|
||||||
|
SYSLOG RAMLOG Device
|
||||||
|
--------------------
|
||||||
|
The RAMLOG is a standalone feature that can be used to buffer any
|
||||||
|
character data in memory. There are, however, special configurations
|
||||||
|
that can be used to configure the RAMLOG as a SYSLOG channel. The RAMLOG
|
||||||
|
functionality is described in a more general way in the following
|
||||||
|
paragraphs.
|
||||||
|
|
||||||
|
RAM Logging Device
|
||||||
|
==================
|
||||||
|
|
||||||
ramlog.c
|
|
||||||
--------
|
|
||||||
The RAM logging driver is a driver that was intended to support debugging
|
The RAM logging driver is a driver that was intended to support debugging
|
||||||
output (aka, syslogging). It might be used when the normal serial output
|
output (SYSLOG) when the normal serial output is not available. For
|
||||||
is not available. For example, if you are using a Telnet or USB serial
|
example, if you are using a Telnet or USB serial console, the debug output
|
||||||
console, the debug output will get lost since the USB Telnet session does
|
will get lost -- or worse. For example, what if you want to debug the
|
||||||
not use the serial console.
|
network over Telnet?
|
||||||
|
|
||||||
The RAM logginc driver is also useful when debug output on the serial
|
The RAM logging driver can also accept debug output data from interrupt
|
||||||
console would interfere with performance or with usability. The debug
|
handler with no special serialization buffering. As an added benefit, the
|
||||||
output is write to RAM very quickly and so interferes less with realtime
|
RAM logging driver is much less invasive. Since no actual I/O is performed
|
||||||
performance. And since the output does not appear on the serial console
|
with the debug output is generated, the RAM logger tends to be much faster
|
||||||
until you want it to, it does not interfere with the usability of the
|
and will interfere much less when used with time critical drivers.
|
||||||
serial console. The NuttShell (NSH), for eample, supports a 'dmesg'
|
|
||||||
command that can be used to dump the buffered output when you want to
|
|
||||||
see it.
|
|
||||||
|
|
||||||
The RAM logging driver is similar to a pipe in that it saves the
|
The RAM logging driver is similar to a pipe in that it saves the debugging
|
||||||
debugging output in a FIFO in RAM. It differs from a pipe in numerous
|
output in a circular buffer in RAM. It differs from a pipe in numerous
|
||||||
details as needed to support logging.
|
details as needed to support logging.
|
||||||
|
|
||||||
This driver is built when CONFIG_RAMLOG is defined in the Nuttx
|
This driver is built when CONFIG_RAMLOG is defined in the Nuttx
|
||||||
configuration.
|
configuration.
|
||||||
|
|
||||||
Configuration options:
|
dmesg
|
||||||
|
-----
|
||||||
|
When the RAMLOG (with SYSLOG) is enabled, a new NuttShell (NSH) command
|
||||||
|
will appear: dmesg. The dmsg command will dump the contents of the
|
||||||
|
circular buffer to the console (and also clear the circular buffer).
|
||||||
|
|
||||||
CONFIG_RAMLOG - Enables the RAM logging feature
|
RAMLOG Configuration options
|
||||||
CONFIG_RAMLOG_CONSOLE - Use the RAM logging device as a system console.
|
----------------------------
|
||||||
If this feature is enabled (along with CONFIG_DEV_CONSOLE), then all
|
|
||||||
console output will be re-directed to a circular buffer in RAM. This
|
* CONFIG_RAMLOG - Enables the RAM logging feature
|
||||||
is useful, for example, if the only console is a Telnet console. Then
|
* CONFIG_RAMLOG_CONSOLE - Use the RAM logging device as a system
|
||||||
in that case, console output from non-Telnet threads will go to the
|
console. If this feature is enabled (along with CONFIG_DEV_CONSOLE),
|
||||||
circular buffer and can be viewed using the NSH 'dmesg' command.
|
then all console output will be re-directed to a circular buffer in
|
||||||
CONFIG_RAMLOG_SYSLOG - Use the RAM logging device for the syslogging
|
RAM. This might be useful, for example, if the only console is a
|
||||||
interface. If this feature is enabled then all debug output (only)
|
Telnet console. Then in that case, console output from non-Telnet
|
||||||
will be re-directed to the circular buffer in RAM. This RAM log can
|
threads will go to the circular buffer and can be viewed using the NSH
|
||||||
be view from NSH using the 'dmesg' command. NOTE: Unlike the
|
dmesg command. This optional is not useful in other scenarios.
|
||||||
limited, generic character driver SYSLOG device, the RAMLOG *can*
|
* CONFIG_RAMLOG_SYSLOG - Use the RAM logging device for the syslogging
|
||||||
be used to generate debug output from interrupt level handlers.
|
interface. If this feature is enabled (along with CONFIG_SYSLOG),
|
||||||
CONFIG_RAMLOG_NPOLLWAITERS - The number of threads than can be waiting
|
then all debug output (only) will be re-directed to the circular
|
||||||
|
buffer in RAM. This RAM log can be viewed from NSH using the 'dmesg'
|
||||||
|
command. NOTE: Unlike the limited, generic character driver SYSLOG
|
||||||
|
device, the RAMLOG *can* be used to capture debug output from
|
||||||
|
interrupt level handlers.
|
||||||
|
* CONFIG_RAMLOG_NPOLLWAITERS - The number of threads than can be waiting
|
||||||
for this driver on poll(). Default: 4
|
for this driver on poll(). Default: 4
|
||||||
|
|
||||||
If CONFIG_RAMLOG_CONSOLE or CONFIG_RAMLOG_SYSLOG is selected, then the
|
If CONFIG_RAMLOG_CONSOLE or CONFIG_RAMLOG_SYSLOG is selected, then the
|
||||||
following may also be provided:
|
following must also be provided:
|
||||||
|
|
||||||
CONFIG_RAMLOG_BUFSIZE - Size of the console RAM log. Default: 1024
|
* CONFIG_RAMLOG_BUFSIZE - The size of the circular buffer to use.
|
||||||
|
Default: 1024 bytes.
|
||||||
|
|
||||||
|
Other miscellaneous settings
|
||||||
|
|
||||||
|
* CONFIG_RAMLOG_CRLF - Pre-pend a carriage return before every linefeed
|
||||||
|
that goes into the RAM log.
|
||||||
|
* CONFIG_RAMLOG_NONBLOCKING - Reading from the RAMLOG will never block
|
||||||
|
if the RAMLOG is empty. If the RAMLOG is empty, then zero is returned
|
||||||
|
(usually interpreted as end-of-file). If you do not define this, the
|
||||||
|
NSH 'dmsg' command will lock up when called! So you probably do want
|
||||||
|
this!
|
||||||
|
* CONFIG_RAMLOG_NPOLLWAITERS - The maximum number of threads that may be
|
||||||
|
waiting on the poll method.
|
||||||
|
Loading…
Reference in New Issue
Block a user