【问题标题】:about linux module printk关于linux模块printk
【发布时间】:2012-05-09 12:38:57
【问题描述】:

我写了一个模块,想把它添加到内核中。当我安装模块时它会打印一个世界。但它不会......

模块为:

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

static int __init hello_init()
{
    printk(KERN_EMERG"Hello World!\n");
    return 0;
}

static void __exit hello_exit()
{
    printk("<6>hello exit\n");
}

module_init(hello_init);
module_exit(hello_exit);

为什么“Hello World!\n”在我加载模块时不打印?? 有没有人遇到这个问题?想你的帮助....

【问题讨论】:

  • 您是否查看过日志文件或使用 dmesg-command 检查过?
  • 我可以在 dmesg 中看到世界,问题是它无法在屏幕上打印。

标签: c linux module


【解决方案1】:

由于您没有收到编译/链接错误并且insmod/modprobe 没有抱怨缺少符号,因此发生这种情况的原因有两个:

  1. 有人定义了一个宏printk()
  2. 您看错地方了。文本将打印到系统日志。要看到这一点,请使用dmesg | tail

【讨论】:

  • 但是有人说如果在打印世界之前添加高优先级为'KERN_EMERG'或'KERN_ALERT',它可能会打印在屏幕上。我不明白这个,你能告诉我吗?谢谢.. ..
  • 这取决于您的系统配置。高水平打印在“控制台”上。通常是 tty0(即使用 Ctrl+Alt+F1 获得的文本模式控制台),但在 OpenSUSE 上是 tty10。
【解决方案2】:

可能是链接或标题问题。

您似乎也没有指定任何许可证,这可能是个问题。

你可以试试这个site,尤其是链接和加载部分。

【讨论】:

  • 很抱歉,我从您提供的网站上获得的示例无法在屏幕上显示印刷世界。我仍然不知道出了什么问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-29
  • 1970-01-01
  • 1970-01-01
  • 2012-06-29
  • 2015-10-27
相关资源
最近更新 更多