(The following examples are from The Linux Kernel Module Programming Guide by Peter J. Saltzman, Michael Burian, and Ori Pomerantz.)
Here is their first kernel module code.
/*
* hello-1.c - The simplest kernel module.
*/
#include <linux/module.h>/* Needed by all modules */
#include <linux/kernel.h>/* Needed for KERN_INFO */
int init_module(void)
{
printk(KERN_INFO "Hello world 1.\n");
/*
* A non 0 return means init_module failed; module can't be
loaded.
*/
return 0;
}
void cleanup_module(void)
{
printk(KERN_INFO "Goodbye world 1.\n");
}
What is KERN_INFO?
Where does printk output go?
Output goes to a log file:
/var/log/syslog
and will also go to the "console" (not to an xterm window) provided the priority level is sufficiently high:
From /usr/src/[kernel version]/include/linux/printk.h
#define KERN_EMERG "<0>" /* system is unusable */ #define KERN_ALERT "<1>" /* action must be taken immediately */ #define KERN_CRIT "<2>" /* critical conditions */ #define KERN_ERR "<3>" /* error conditions */ #define KERN_WARNING "<4>" /* warning conditions */ #define KERN_NOTICE "<5>" /* normal but significant condition */ #define KERN_INFO "<6>" /* informational */ #define KERN_DEBUG "<7>" /* debug-level messages */
Changing KERN_INFO to KERN_ALERT will cause the output to go to the console.