我正在加载一个具有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
这是我失踪的这个倒置命令背后的任何原因吗?
答案 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等级。