• Uncategorized

About c : Why-my-kernel-log-is-not-showing-the-latest-output

Question Detail

I’m coding a simple kernel module, in Ubuntu 17.04, that takes a string and prints it in the kernel log.
#include #include #include char* mystring = “hello world”;
module_param(mystring ,charp ,S_IRUSR | S_IWUSR);

void display(void){
printk(KERN_ALERT “%s” ,mystring);
}
static int hello(void){
//printk(KERN_ALERT “hello module”);
display();
return 0;
}
static void bye(void){
printk(KERN_ALERT “bye”);
}
module_init(hello);
module_exit(bye);

I run command make and then when I run insmod test.ko mystring=”blahblahblah”, the module will be inserted correctly but when I run dmesg it doesn’t show the blahblahblah.
After I run rmmod test.ko and dmseg the expression blahblahblah will appear in the terminal. When I run insmod test.ko mystring=”blahblahblah” again and then dmesg the blahblahblah will be printed.
what is the problem exactly? Is it my problem or the system?

Question Answer

Sometimes printk may defer output (that is, message is stored in the internal buffer, but not in kernel log). To avoid such behavior, always add newline (\n) at the end of the string printed:
printk(KERN_ALERT “%s\n” ,mystring);

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.