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
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);