【发布时间】:2011-12-26 19:37:02
【问题描述】:
我在内核代码中加入了一些调试信息。 已经检查了 /var/log/messages、dmesg 并且那里没有这样的转储。 syslogd 正在机器上运行
我还将 /proc/sys/kernel/printk 更改为 8 4 1 7
知道可能是什么问题吗?
【问题讨论】:
标签: linux-kernel kernel linux-device-driver
我在内核代码中加入了一些调试信息。 已经检查了 /var/log/messages、dmesg 并且那里没有这样的转储。 syslogd 正在机器上运行
我还将 /proc/sys/kernel/printk 更改为 8 4 1 7
知道可能是什么问题吗?
【问题讨论】:
标签: linux-kernel kernel linux-device-driver
直到昨天,当我发现一些有趣的事情时,我都遇到了同样的问题。最近 linux 内核一直在采用 pr_** 代替 printk(3.5 版本及更高版本)。
我尝试在 3.3 版本的内核上运行一个带有 printk 的基本模块程序,在 3.7 及更高版本上也是如此。
前者工作正常。后来只是没有在 dmesg 或 /var/log/messages 上显示 printk。但是用 pr_info 宏替换 printk,完成了这项工作。(其他变体也有 pr_err、pr_notice 等,之前在 include/linux/kernel.h 中找到,现在移至 include/linux/printk.h)
虽然 pr_** 宏已经很老了,但感谢发起上述更改的 Joe Perches 的活动,我们最好学习内核方法! (参考:pr_info())
【讨论】:
最简单的解释是你的printk() 没有被调用。
保持简单,并在调试此问题时坚持检查dmesg(1) 输出——所有syslog(3) /var/log/messages 和基于控制台的输出都与消息的问题分开,甚至没有出现在内核的消息缓冲区。
【讨论】:
Documentation/scheduler/sched-stats.txt 以获取有关了解调度程序正在做什么的更便宜的方法的信息。 :) 如果您想看到更改后的内核启动并正常工作,我建议修改类似于init/main.c 的start_kernel() 函数。它会在启动时唤醒所有不同的子系统。
uname -a的构建日期——如果你使用的是你今天构建的内核,或者你使用的是发行版提供的内核,它会给你一个更好的主意核心。虽然您发现的那些说明看起来非常适合遵循 Ubuntu 内核开发,但感觉有点“沉重”——如果您不介意使用上游 kernel.org 内核,请查看 kernel-package(在某些Ubuntu 存储库)——使用起来要容易得多。