Linux kernel printk不适用于内核解块

Linux kernel printk不适用于内核解块,linux-kernel,kernel,linux-device-driver,Linux Kernel,Kernel,Linux Device Driver,我在内核代码中添加了一些调试消息。 已经检查了/var/log/messages、dmesg,那里没有这样的转储。 syslogd正在计算机上运行 我还将/proc/sys/kernel/printk更改为 8417 知道问题出在哪里吗?最简单的解释是您的printk()没有被调用 在调试这个问题时,保持简单并坚持检查dmesg(1)输出——所有的syslog(3)/var/log/messages和基于控制台的输出都与内核消息缓冲区中甚至没有显示的消息问题是分开的,当我发现一些有趣的事情。最近

我在内核代码中添加了一些调试消息。 已经检查了/var/log/messages、dmesg,那里没有这样的转储。 syslogd正在计算机上运行

我还将/proc/sys/kernel/printk更改为 8417


知道问题出在哪里吗?

最简单的解释是您的
printk()
没有被调用


在调试这个问题时,保持简单并坚持检查
dmesg(1)
输出——所有的
syslog(3)
/var/log/messages
和基于控制台的输出都与内核消息缓冲区中甚至没有显示的消息问题是分开的,当我发现一些有趣的事情。最近linux内核采用了pr_**而不是printk(3.5版及更高版本)

我试过在3.3版本的内核上运行带有printk的basic模块程序&在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的活动,我们最好学习内核方法!
(参考:)

我将prink()放在核心调度程序例程sched_fork()、normal_prio()等的内部。。他们都没有出现在dmesg中。你能推荐一个在所有情况下都会被调用的例程吗?我只是想检查一下我重新编译的内核在我启动机器时是否被提取出来。这是查看调度程序的昂贵方法。查看
Documentation/scheduler/sched stats.txt
了解了解调度器正在做什么的更便宜方法的信息:如果您希望看到一个已更改的内核启动并工作,我建议修改类似于
init/main.c
start\u kernel()
函数。它会在启动时唤醒所有不同的子系统。谢谢你的评论。。看来我的方式是昂贵的文档/调度程序是更好的学习方式。不知何故,我怀疑我通过dpkg-i安装的重新编译内核是否处于活动状态。如何验证这一点?我已经成功地重新启动了机器,并一步一步地遵循了在运行的内核中检查
uname-a
的构建日期中提到的所有内容——这会让您更好地了解您是在今天构建的内核上,还是在发行版提供的内核上。虽然您发现的这些指令对于遵循Ubuntu内核开发非常有用,但感觉有点“沉重”——如果您不介意使用upstream kernel.org内核,请查看(在一些Ubuntu存储库中也可以找到)——使用起来容易得多。谢谢您的帮助。你能给我推荐一些轻量级的易于构建的内核吗。我想做一些修改调度器的工作。我是内核开发的新手。