【问题标题】:printk messages don't appear if module loaded during boot如果在引导期间加载模块,则不会出现 printk 消息
【发布时间】:2015-10-24 03:50:07
【问题描述】:

我添加了一些 printk(KERN_ALERT "sample\n");进入驱动模块。如果我手动安装驱动程序,则会出现这些打印。但如果在引导过程中加载了相同的驱动程序,则不会出现该消息。

我确信在引导过程中加载了相同的模块,因为我更改了模块作者名称,以便在我执行 $modinfo 时它会出现。 该模块位于内核源代码路径中,我已经编译并 $make module_install。

我正在运行 ubuntu 10.04 和内核版本 3.14.2 我错过了什么?

谢谢。

【问题讨论】:

  • “我正在运行 ubuntu 10.04 和内核版本 3.14.2”——这听起来不对。 10.04 LTS 使用 2.6.30something。为什么是 `ubuntu-11.04 的标签?
  • 基本上这听起来像是一个初始化时间问题。这个驱动是谁写的?是否有 printk() 语句报告驱动程序 probe() 已成功进入和退出? init() 例程中的每个返回码是否都有适当的检查?尝试将 module_init() 语句替换为 late_initcall()
  • 我已经在 ubuntu 10.04 上编译并安装了内核 3.14.2。标签有误,将其删除。
  • 这实际上是一个虚拟机,我在 virtio_net.c 中添加了打印。如果我 rmmod 和 insmod 相同的 virtio_net.ko ,打印出现在探针和每个 xmit 上。但如果驱动程序从引导时开始运行,则它们不会。
  • 如果您的驱动程序依赖于其他在启动时不可用的模块,那么您的驱动程序只会在初始化时失败并且不会有任何打印。

标签: ubuntu linux-kernel driver kernel-module printk


【解决方案1】:

好的,现在我知道错误是什么了。我没有使用新模块创建 inintramfs。所以它在引导过程中从旧的 initramfs 加载旧驱动程序。 谢谢大家。

【讨论】:

  • 你先生,拯救了我的一天 :) 请将此标记为正确答案,我差点错过了!
【解决方案2】:

@silly_walker,如果控制台未初始化,printk 没有用,因为它可以将输出重定向到哪里?, printk() 只能在控制台初始化时输出。如果您真的想在启动过程的早期输出,请尝试使用“early_printk()”。通过下面的链接,

http://www.makelinux.net/books/lkd2/ch18lev1sec3

希望这能解决您的问题!!!

【讨论】:

  • 谢谢,但是在初始化后应该很好地显示的打印也没有出现。这是一个网络驱动程序,我在 xmit 函数中有一个 printk。它应该在每次有数据包传输时打印。
  • "printk 没有用,因为它还能将输出重定向到哪里?" -- 输出到内存缓冲区,直到控制台设备被初始化。然后输出缓冲区。如果earlyprintk 已配置并启用,则此输出不会被缓冲,而是由 earlycon 设备输出。此 earlycon 设备在实际控制台初始化后停用。
  • @sawdust,谢谢你的解释。
猜你喜欢
  • 1970-01-01
  • 2020-10-07
  • 2014-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多