I'd like to write a statement to dmesg. How can I do this?
6 Answers
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.
-
It's not allowed on some system for non-root users (e.g.: Android kernel) :-(.– pevikCommented Jan 7, 2016 at 11:20
-
28
-
Worth noting, that while this will make the message appear in
dmesg
, however over anetconsole
debugging utility (where you'd expect to see the same content) you will not see the message until you increasedmesg
debugging level. For examplesudo dmesg -n 8
works.– Hi-AngelCommented Mar 26, 2023 at 21:37 -
As a n00b, I was pleasantly surprised that you have only to put a colon in your message if you want
dmesg
to highlight the prefix:echo "BLAH: This is your message!" | sudo tee /dev/kmsg
. Commented Jun 29, 2023 at 17:55
For BSDs:
logger -p kern.notice MESSAGE
(courtesy Ian, freebsd-questions mailing list)
or other priorities.
For Linux:
su root -c 'echo MESSAGE > /dev/kmsg'
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.
-
10
--> 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
echo "Add your message here" | sudo tee /dev/kmsg
Verify by running dmesg -T
-
3This might have been better as an edit to the accepted answer, which already suggests writing to
/dev/kmsg
.– Kusalananda ♦Commented Jun 13, 2022 at 11:27
now
is seconds from boot, and I think it takes a kernel call to write to it so a userland program can't.