Go to main content

STREAMS Programming Guide

Exit Print View

Updated: November 2020
 
 

Kernel Debug Printing

The kernel routine cmn_err enables printing of formatted strings on a system console. It displays a specified message on the console and can also store it in the msgbuf that is a circular array in the kernel. For more information, see the cmn_err(9F) man page.

The format of cmn_err is:

#include <sys/cmn_err.h>

void cmn_err (int level, char *fmt, int args)

where level can take the following values:

  • CE_CONT – may be used as simple printf. It is used to continue another message or to display an informative message not associated with an error. For more information, see the printf(3C) man page.

  • CE_NOTE – reports system events. It is used to display a message preceded by NOTICE:. This message is used to report system events that do not necessarily require user action, but may interest the system administrator. An example is a sector on a disk needing to be accessed repeatedly before it can be accessed correctly.

  • CE_WARN – reports system events that require user action. This is used to display a message preceded by WARNING:. This message is used to report system events that require immediate attention, such as those where, if an action is not taken, the system may panic. For example, when a peripheral device does not initialize correctly, this level should be used.

  • CE_PANIC – reports system panic. This is used to display a message preceded with PANIC:. Drivers should specify this level only under the most severe conditions. A valid use of this level is when the system cannot continue to function. If the error is recoverable and not essential to continued system operation, do not panic the system. This level halts all processing.

fmt and args are passed to the kernel routine printf that runs at splhi and should be used sparingly. If the first character of fmt is !, an exclamation point, output is directed to msgbuf. msgbuf can be accessed with the crash command. If the destination character begins with ^, a caret, output goes to the console. If no destination character is specified, the message is directed to both the msgbuf array and the console.

cmn_err appends each fmt with "\n", except for the CE_CONT level, even when a message is sent to the msgbuf array. args specifies a set of arguments passed when the message is displayed. Valid specifications are %s (string), %u (unsigned decimal), %d (decimal), %o (octal), and %x (hexadecimal). cmn_err does not accept length specifications in conversion specifications. For example, %3d is ignored.