51

I'd like to write a statement to dmesg. [How] can I do this?

  • 2
    Why do you want to do this? – Nils Apr 3 '12 at 20:36
  • 28
    Does it matter? :) – notlesh Apr 3 '12 at 20:38
  • 9
    Two reasons I've wanted to do this before: (1) to see what "now is" in dmesg-timestamp format, and (2) to know when I last looked at dmesg. – notlesh Apr 3 '12 at 20:39
  • 1
    I'm pretty sure now is seconds from boot, and I think it takes a kernel call to write to it so a userland program can't. – Kevin Apr 3 '12 at 21:22
  • 3
    @Kevin, so you know without looking how many seconds have elapsed since you booted? – notlesh Apr 4 '12 at 1:28
44

Write to /dev/kmsg (not /proc/kmsg as suggested by @Nils). See linux/kernel/printk/printk.c devkmsg_writev for the kernel-side implementation and systemd/src/journal/journald-kmsg.c server_forward_kmsg for an example of usage.

| improve this answer | |
  • It's not allowed on some system for non-root users (e.g.: Android kernel) :-(. – pevik Jan 7 '16 at 11:20
  • 12
    E.g. date | sudo tee /dev/kmsg – sanmai Apr 11 '16 at 3:46
15

for BSDs

%logger -p kern.crit MESSAGE

(courtesy Ian, freebsd-questions mailing list)

for Linux

su root -c 'echo MESSAGE > /dev/kmsg'
| improve this answer | |
3

Assuming nobody else comes up with an official way to do this ...

You can write a kernel module that calls the printk function. There's an example here that might just do the job for you.

| improve this answer | |
  • 8
    a. No need, others have written it already (e.g. kecho). b. Really no need for an extra module, see my answer. – ephemient Apr 3 '12 at 21:44
0

--> You may write a C program as below:

test_mod.c

#include <linux/module.h>
#include <linux/kernel.h>

int init_module(void)
{
    printk("Hello All\n This is a test init\n");
    return 0;
}

void cleanup_module(void)
{
    printk("Good Bye");
}

--> make object file:

echo "obj-m := test_mod.o" > Makefile

--> compile by running :

make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules`

--> load your module as below:

insmod ./test_mod.ko

see the output:

dmesg | tail

--> unload module:

rmmod test_mod.ko
| improve this answer | |
-1

If I understood man dmesg correctly, you should be able to write to /proc/kmsg.

| improve this answer | |
  • 4
    # echo "test" >> /proc/kmsg [yields =>] -su: echo: write error: Input/output error – notlesh Apr 3 '12 at 20:50

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.