1

我在 Ubuntu 10.04 机器上写了一个简单的 hello-world 模块。加载和卸载模块时,printk 应该记录来自以下 hello_world 和 bye_world 函数的消息。

static int hello_world()
{
        printk(KERN_INFO "Hello, beautiful world");
        return 0;
}

static void bye_world()
{
        printk(KERN_INFO "Good-bye kernel uncle");
}

module_init(hello_world);
module_exit(bye_world);

但是,当实际插入和删除 hello.ko 模块时,我看到终端上打印的消息(我将其重定向到当前终端)恰好是后面的一条消息。

# rmmod hello.ko
# Jul  8 16:34:02 panchavati kernel: [64599.954113] Hello, beautiful world

# insmod hello.ko
# Jul  8 16:34:57 panchavati kernel: [65456.367422] Good-bye kernel uncle

从 dmesg 输出中,我可以看到下一条消息条目(对应于 insmod)已被记录,只是尚未打印。

chanakya@panchavati:~$ dmesg | tail -2
[65456.367422] Good-bye kernel uncle
[65511.198299] Hello, beautiful world

该条目[65511.198299]存在于内核日志中,但仅[65456.367422] Good-bye kernel uncle打印了前一个条目。为什么会这样?

我之前认为/etc/syslog.conf 中使用的“-”说明符可能必须对此做一些事情(它会阻止每次写入后的同步),但删除它也不起作用。

4

2 回答 2

2

您是否尝试过使用tailf(或tail -f)?它会在消息到达时打印出来。例如:

    tailf /var/log/messages
于 2012-09-07T02:58:10.863 回答
1

尝试用换行符(“\n”)结束你的字符串。

于 2015-04-07T23:05:03.627 回答