打印调试技术printkklogddmesg(解决打印信息的问题)

打印调试技术printkklogddmesg(解决打印信息的问题)

ID:8922636

大小:27.00 KB

页数:6页

时间:2018-04-12

打印调试技术printkklogddmesg(解决打印信息的问题)_第1页
打印调试技术printkklogddmesg(解决打印信息的问题)_第2页
打印调试技术printkklogddmesg(解决打印信息的问题)_第3页
打印调试技术printkklogddmesg(解决打印信息的问题)_第4页
打印调试技术printkklogddmesg(解决打印信息的问题)_第5页
资源描述:

《打印调试技术printkklogddmesg(解决打印信息的问题)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、4.2.1.printk#includeprintk(KERN_CRIT"error%s,%i",__FILE__,__LINE__);注:1).printk函数中能够指定优先级,假如printk没有指定优先级,采用默认优先级,DEFAULT_MESSAGE_LEVEL,其值在kernel/printk.c.   头文档linux/printk.h中宏定义了8个级别,0-8从高到低分别是:   KERN_EMERG,KERNEL_ALERT,KERN_CRIT,KERN_ERR,KERN_WARNING,KERN_NOTICE,KER

2、N_INFO,KERN_DEBUG2).当printk指定的优先级小于指定的控制台优先级console_loglevel时,调试消息就显示在控制台虚拟终端。  缺省的console_loglevel值是DEFAULT_CONSOLE_LOGLEVEL。  .也能够使用系统调用sys_syslog或klogd-c来修改console_loglevel值。  .在新版本中,也能够直接通过文档/proc/sys/kernel/printk修改,这个文档包含4个整数值,前两个表示系统当前的优先级和缺省优先级。   能够直接echo8>/pro

3、c/sys/kernel/printk  .也能够指定显示在其他控制台,通过调用ioctl(TIOCLINUX)或shell命令setconsole来配置。  .假如运行了klogd和syslogd,则printk打印到var/log/messages。.用打印调试最常用的调试技术是监视,在应用程序编程当中是通过在合适的地方调用printf来实现.在你调试内核代码时,你可以通过printk来达到这个目的.一个不同是printk允许你根据消息的严重程度对其分类,通过附加不同的记录级别或者优先级在消息上.你常常用一个宏定义来指示记录级别.

4、例如,KERN_INFO,我们之前曾在一些打印语句的前面看到过,是消息记录级别的一种可能值.记录宏定义扩展成一个字串,在编译时与消息文本连接在一起;这就是为什么下面的在优先级和格式串之间没有逗号的原因.这里有2个printk命令的例子,一个调试消息,一个紧急消息:printk(KERN_DEBUG"HereIam:%s:%i/n",__FILE__,__LINE__);printk(KERN_CRIT"I'mtrashed;givingupon%p/n",ptr);有8种可能的记录字串,在头文件里定义;

5、我们按照严重性递减的顺序列出它们:KERN_EMERG用于紧急消息,常常是那些崩溃前的消息.KERN_ALERT需要立刻动作的情形.KERN_CRIT严重情况,常常与严重的硬件或者软件失效有关.KERN_ERR用来报告错误情况;设备驱动常常使用KERN_ERR来报告硬件故障.KERN_WARNING有问题的情况的警告,这些情况自己不会引起系统的严重问题.KERN_NOTICE正常情况,但是仍然值得注意.在这个级别一些安全相关的情况会报告.KERN_INFO信息型消息.在这个级别,很多驱动在启动时打印它们发现的硬件的信息.KERN_DE

6、BUG用作调试消息.每个字串(在宏定义扩展里)代表一个在角括号中的整数.整数的范围从0到7,越小的数表示越大的优先级.一条没有指定优先级的printk语句缺省是DEFAULT_MESSAGE_LOGLEVEL,在kernel/printk.c里指定作为一个整数.在2.6.10内核中,DEFAULT_MESSAGE_LOGLEVEL是KERN_WARNING,但是在过去已知是改变的.基于记录级别,内核可能打印消息到当前控制台,可能是一个文本模式终端,串口,或者是一台并口打印机.如果优先级小于整型值console_loglevel,消息被

7、递交给控制台,一次一行(除非提供一个新行结尾,否则什么都不发送).如果klogd和syslogd都在系统中运行,内核消息被追加到/var/log/messages(或者另外根据你的syslogd配置处理),独立于console_loglevel.如果klogd没有运行,你只有读/proc/kmsg(用dmsg命令最易做到)将消息取到用户空间.当使用klogd时,你应当记住,它不会保存连续的同样的行;它只保留第一个这样的行,随后是,它收到的重复行数.变量console_loglevel初始化成DEFAULT_CONSOLE_LOGLEV

8、EL,并且可通过sys_syslog系统调用修改.一种修改它的方法是在调用klogd时指定-c开关,在klogd的manpage里有指定.注意要改变当前值,你必须先杀掉klogd,接着使用-c选项重启它.另外,你可写一个

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。