Where does output of print in kernel go?

47,576

Solution 1

It depends on the distribution, but many use klogd(8) to get the messages from the kernel and will either log them to a file (sometimes /var/log/dmesg or /var/log/kernel) or to the system log via syslog(3). In the latter case, where the log entries end up will depend on the configuration of syslogd(8).

One note about the dmesg command: Kernel messages are stored in a circular buffer, so large amounts of output will be overwritten.

Solution 2

Many times KERN_DEBUG level messages are filtered and you need to explicitly increase the logging level. You can see what the system defaults are by examining /proc/sys/kernel/printk. For example, on my system:

# cat /proc/sys/kernel/printk
4       4       1       7

the first number shows the console log level is KERN_WARNING (see proc(5) man pages for more information). This means KERN_NOTICE, KERN_INFO, and KERN_DEBUG messages will be filtered from the console. To increase the logging level or verbosity, use dmesg

$ sudo dmesg -n 7
$ cat /proc/sys/kernel/printk
7       4       1       7

Here, setting the level to 7 (KERN_DEBUG) will allow all levels of messages to appear on the console. To automate this, add loglevel=N to the kernel boot parameters where N is the log level you want going to the console or ignore_loglevel to print all kernel messages to the console.

Solution 3

You'll get the output with the command dmesg

Solution 4

dmesg outputs all the messages from the kernel. Finding your desired messages would be difficult. Better use dmesg and grep combination and use a driver specific label in all your printk messages. That will ease in eliminating all the unwanted messages.

printk("test: hello world")

dmesg | grep test

Solution 5

I had this problem on Ubuntu 11.10 and 10.04 LTS, on the former I edited /etc/rsyslog.d/50-default.conf, then restarted rsyslog using "sudo service rsyslog restart" to restart rsyslogd. Then it worked.

Note that Ubuntu uses *r*syslogd, not syslogd.

Share:
47,576

Related videos on Youtube

apoorv020
Author by

apoorv020

Updated on July 09, 2022

Comments

  • apoorv020
    apoorv020 almost 2 years

    I am debugging a driver for linux (specifically ubuntu server 9.04), and there are several printf statements in the code.

    Where can I view the output of these statements?

    EDIT1: What i'm trying to do is write to kernel using the proc file-system. The print code is

    static int proc_fractel_config_write(struct file *file, const char *argbuf, unsigned long count, void *data)
    {
        printk(KERN_DEBUG "writing fractel config\n");
        ...
    

    In kern.log, I see the following message when i try to overwrite the file /proc/net/madwifi/ath1/fractel_config (with varying time of course).

    [ 8671.924873] proc write 
    [ 8671.924919] 
    

    Any explainations?

  • apoorv020
    apoorv020 over 13 years
    Can't find what I am looking for, but I will try again.
  • chris
    chris over 13 years
    Are they really "printf" statements? They really should be "printk", I don't think printf is defined in the kernel (please correct me if I'm wrong).
  • cheesysam
    cheesysam over 13 years
    It is my understanding that chris is correct. printk() will output to dmesg or /var/log/messages
  • pevik
    pevik about 10 years
    Log level constants are currently (since 3.6?) defined in <linux/kern_levels.h>