“Printk”打印顺序含糊不清

时间:2014-06-28 18:55:15

标签: kernel linux-device-driver

我正在加载一个具有init和exit函数的简单内核模块,每个都显示一条消息。 我使用日志级别KERN_ALERT来显示消息,问题是退出消息首先显示,然后是Init消息。

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

static int my_init(void){
    printk(KERN_ALERT "Hello Kernel");
    return 0;
}

static void my_exit(void){
    printk(KERN_ALERT "bye-bye");
}

module_init(my_init);
module_exit(my_exit);

MODULE_LICENSE("GPL");

我得到的信息是,

[ 6310.329500] bye-bye
[ 6324.158871] Hello Kernel

这是我失踪的这个倒置命令背后的任何原因吗?

3 个答案:

答案 0 :(得分:1)

您的内核模块没有问题。我建议添加'\n'来刷新缓冲区。你可能得到适当的输出。

printk(KERN_ALERT "Hello Kernel \n");
                                |
                                |
                                V
                           For flushing buffer.

注意:: dmesg -c清除内核消息并建议仔细检查输出。

答案 1 :(得分:0)

总是在printk的末尾使用\ n进行正确的刷新,否则这些消息会被缓冲并且c

答案 2 :(得分:0)

延迟是由于我为消息设置的优先级。优先级定义如下。

#define KERN_EMERG "<0>" /* system is unusable*/
#define KERN_ALERT "<1>" /* action must be taken immediately*/
#define KERN_CRIT "<2>" /* critical conditions*/
#define KERN_ERR "<3>" /* error conditions*/
#define KERN_WARNING "<4>" /* warning conditions*/
#define KERN_NOTICE "<5>" /* normal but significant condition*/
#define KERN_INFO "<6>" /* informational*/
#define KERN_DEBUG "<7>" /* debug-level messages*/

默认号码为4,允许控制台仅显示消息 至少在KERN_WARNING中。这可能就是我看不到登录的原因 KERN_INFO等级。