printk函数

一个不同是 printk 允许你根据消息的严重程度对其分类, 通过附加不同的记录级别或者 优先级在消息上. 你常常用一个宏定义来指示记录级别. 例如, KERN_INFO, 我们之前曾 在一些打印语句的前面看到过, 是消息记录级别的一种可能值. 记录宏定义扩展成一个字 串, 在编译时与消息文本连接在一起; 这就是为什么下面的在优先级和格式串之间没有逗 号的原因. 这里有 2 个 printk 命令的例子, 一个调试消息, 一个紧急消息:

 

printk(KERN_DEBUG "Here I am: %s:%i\n", FILE , LINE ); printk(KERN_CRIT "I'm trashed; giving up on %p\n", ptr);

 

有 8 种可能的记录字串, 在头文件 <linux/kernel.h> 里定义; 我们按照严重性递减的 顺序列出它们:

 

KERN_EMERG

 

用于紧急消息, 常常是那些崩溃前的消息.

 

KERN_ALERT

 

 

 

需要立刻动作的情形.

 

KERN_CRIT

 

严重情况, 常常与严重的硬件或者软件失效有关.

 

KERN_ERR

 

用来报告错误情况; 设备驱动常常使用 KERN_ERR 来报告硬件故障.

 

KERN_WARNING

 

有问题的情况的警告, 这些情况自己不会引起系统的严重问题.

 

KERN_NOTICE

 

正常情况, 但是仍然值得注意. 在这个级别一些安全相关的情况会报告.

 

KERN_INFO

 

信息型消息. 在这个级别, 很多驱动在启动时打印它们发现的硬件的信息.

 

KERN_DEBUG

 

用作调试消息.

 

每个字串( 在宏定义扩展里 )代表一个在角括号中的整数. 整数的范围从 0 到 7, 越小 的数表示越大的优先级.

 

一条没有指定优先级的 printk 语句缺省是 DEFAULT_MESSAGE_LOGLEVEL, 在 kernel/printk.c 里指定作为一个整数. 在 2.6.10 内核中, DEFAULT_MESSAGE_LOGLEVEL 是 KERN_WARNING, 但是在过去已知是改变的.

 

基于记录级别, 内核可能打印消息到当前控制台, 可能是一个文本模式终端, 串口, 或者 是一台并口打印机. 如果优先级小于整型值 console_loglevel, 消息被递交给控制台, 一次一行( 除非提供一个新行结尾, 否则什么都不发送 ). 如果 klogd 和 syslogd 都在 系统中运行, 内核消息被追加到 /var/log/messages (或者另外根据你的 syslogd 配置 处理), 独立于 console_loglevel. 如果 klogd 没有运行, 你只有读 /proc/kmsg ( 用 dmsg 命令最易做到 )将消息取到用户空间. 当使用 klogd 时, 你应当记住, 它不会保存 连续的同样的行; 它只保留第一个这样的行, 随后是, 它收到的重复行数.

 

变量 console_loglevel 初始化成 DEFAULT_CONSOLE_LOGLEVEL, 并且可通过 sys_syslog 系统调用修改. 一种修改它的方法是在调用 klogd 时指定 -c 开关, 在 klogd 的  manpage 里有指定. 注意要改变当前值, 你必须先杀掉 klogd, 接着使用 -c 选项重启它. 另外, 你可写一个程序来改变控制台记录级别. 你会发现这样一个程序的版本在由 O' Reilly 提供的 FTP 站点上的 miscprogs/setlevel.c. 新的级别指定未一个整数, 在 1  和 8 之前, 包含 1 和 8. 如果它设为 1, 只有 0 级消息( KERN_EMERG )到达控制台; 如果它设为 8, 所有消息, 包括调试消息, 都显示.

 

61

 

也可以通过文本文件 /proc/sys/kernel/printk 读写控制台记录级别. 这个文件有 4 个 整型值: 当前记录级别, 适用没有明确记录级别的消息的缺省级别, 允许的最小记录级别, 以及启动时缺省记录级别. 写一个单个值到这个文件就改变当前记录级别成这个值; 因此, 例如, 你可以使所有内核消息出现在控制台, 通过简单地输入:

 

# echo 8 > /proc/sys/kernel/printk

 

现在应当清楚了为什么 hello.c 例子使用 KERN_ALERT 标志; 它们是要确保消息会出现 在控制台上.

转载于:https://www.cnblogs.com/fanweisheng/p/11106341.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值