[RFC PATCH v2 0/2] printk: Shared kernel logging

From: Sean Hudson
Date: Tue Oct 04 2016 - 17:09:39 EST

This patch set is based on Linus' v4.8-rc8 tag.

This debug feature allows the kernel to use an external buffer and control
block for kernel log messages. The feature is controlled by an optional
command line parameter. The existing buffer and control block can contain
existing log messages from previous boot cycles and/or the bootloader. The
command line parameter was chosen for flexibility, cross arch portability,
and the ability to dynamically enable/disable this feature. The parameter
specifies the address of a control block used to replace the default log
buffer. Existing bootloader and kernel log messages are kept, in order,
inside the new buffer. After a boot that preserves the buffer contents, a
bootloader can display both kernel and bootloader log entries from multiple,
previous boots. It also allows the kernel to display bootloader log entries
along with its own messages.

This feature is intended for debug purposes and has no effect unless the
command line parameter is specified. Further, it validates the passed
control block carefully and if any checks fail, it falls back to the default
behaviour. As such, it can be left enabled by default.

Memory Reservation

This feature expects the bootloader to reserve/preserve the shared buffer
memory. This reservation needs to prevent the kernel from overwriting the
external log control block and log entries. In my testing, I've used the
'fdt' commands in uboot to dynamically inject reserved memory regions via
the DT to the kernel.

Sean Hudson (2):
printk: collect offsets into replaceable structure
printk: external log buffer (CONFIG_LOGBUFFER)

init/Kconfig | 12 +
init/main.c | 7 +
kernel/printk/printk.c | 599 +++++++++++++++++++++++++++++++++++--------------
3 files changed, 451 insertions(+), 167 deletions(-)

Changes since v1: Fix CONFIG_PRINTK disabled build