用printk发送想追踪的信息。 从名字中可以看出,这很像gnu
c的打印文件。 但是,用于内核的东西应该总是有特色的,printk增加了几个日志级别(loglevel ),并且存在在具体日志级别定义的宏。
(打印格式: printk (kern _ alert ' theprocessis' % s' (PID
%I(n )、current-comm和current-pid ) )。
这些宏定义的注释已经很详细了。
#define KERN_EMERG '' /* system is
不可用* /
# define kern _ alert ' '/* actionmustbetaken
immediately */
#define KERN_CRIT '' /* critical
conditions */
#define KERN_ERR '' /* error
conditions */
#define KERN_WARNING '' /* warning
conditions */
# define kern _ notice ' '/* normalbutsignificant
condition */
#define KERN_INFO '' /*
信息* /
# define kern _ debug ' '/* debug-level
消息* /
使用printk,内核可以根据日志级别将消息打印到当前控制台。 该控制台通常是字符模式终端、串行打印机和并行打印机。 这些消息正常输出的前提是——日志输出级别小于console_loglevel (内核中的数字越低,优先级越高)。 但是系统和klogd
在syslogd日志守护进程中,printk信息会同时添加到/var/log/messages中。 当然,也可以在dmesg中显示系统的输出信息。 (这些信息位于/proc/kmsg中,但没有将消息映射到用户空间,因此普通用户无法直接访问。 dmesg用于访问它
如果内核正在运行,则可以使用proc文件系统修改内核执行的某些参数。 proc实际上是一个内存文件系统,显示了Linux VFS (虚拟)
文件
system )文件系统的威力。 该文件系统由软件创建,内核使用该文件系统向外部导出信息,导致proc使用混乱,从而出现了sys文件系统。 好像出轨了! 由于proc文件系统是内核抛出的信息,因此可以通过更改/proc/sys/kernel/printk的值来更改日志的输出级别。 该文件包含四个值:当前日志级别、未明确指定日志级别时的默认消息级别、最小允许日志级别和启动时的默认日志级别。
为了更好地管理日志,可以通过修改/etc/syslog.conf来满足需要。 man
syslog.conf可以获取更多关于syslog.conf的信息。 ajdmy在编写内核模块时,应该注意一个问题,你不能为难那些消息。 因此,需要定义几个宏来切换printk消息。 结果,printk用于调试,或者用于显示设备和模块的一些状态。 内核还提供了在中定义的几个接口。 他们是一些内联函数。 输入
printk_ratelimit(void )。 在打印可能重复的信息之前,必须调用此函数。 如果返回非零值,则可以继续打印消息。 否则,跳过。
printk_ratelimit通过跟踪发送到控制台的消息数量来避免消息重复输出。 通过修改/proc/sys/kernel
使用/printk_ratelimit设置重新打开消息前等待的秒数。
本文来自ChinaUnix博客。 查看原文请点击http://blog.chinaunix.net/u1/51980/showart _ 1670820.html
标签:
本网站的一部分文章来自互联网。 如果有侵害的话,请联系我。 west999com@outlook.com
特别注意:本网站转载文章的发言不代表本网站的观点。 本网站提供的照片、插图、设计作品,请根据需要与原作者联系。 版权归原作者所有