打印信息函数

dev_info():启动过程、或者模块加载过程等“通知类的”信息等,一般只会通知一次,例如probe函数;

dev_dbg():一般使用在普通错误,如-EINVAL、-ENOMEM等errno发生处,用于调试;

dev_err():一般使用在严重错误,尤其是用户无法得到errno的地方,或者程序员不容易猜测系统哪里出了问题的地方;

pr_info(): 
    #define pr_info(fmt, ...) \
                printk(KERN_INFO pr_fmt(fmt), ##__VA_ARGS__)

printk():
**  printk()允许通过指定一个标志来设置优先级。syslog会根据这个优先级标志来决定在什么地方显示这条系统信息。
    如:printk(KERN_ERR "this is an error!\n");
    printk(KERN_EMERG " 1111111 KERN_EMERG\n");
    printk( "<0> 1111111 KERN_EMERG\n");
    例如子printk函数的字符串参数中使用了KERN_ALERT,它实际上扩展为字符串:“<1>”,而这部分信息没有输出到终端。
    实际上,这部分是内核信息的日志级别,只有超过了当前日志级别的信息才会输出到终端。
    我们在printk的参数中使用较高的日志级别就是要保证信息得到输出。
    不够打印级别的信息会被写到日志中可通过dmesg 命令来查看。

** 当前内核的日志级别可以在/proc/sys/kernel/printk文件中看到。
    /proc/sys/kernel/printk文件定义了4个数字, 查看日志级别:
    cat /proc/sys/kernel/printk
    4 4 1 7
    ①控制台日志级别:优先级高于该值的消息将被打印至控制台。
    ②缺省的消息日志级别:将用该值来打印没有优先级的消息。
    ③最低的控制台日志级别:控制台日志级别可能被设置的最小值。
    ④缺省的控制台:控制台日志级别的缺省值。
    日志缓冲区的每一行文本开头具有级别标记, 级别值越小则优先级越高. 
    (这个文件包含了四个整数,其中前两个是控制台的当前日志级别和默认日志级别。)
    (四个数字分别对应控制台日志级别、默认的消息日志级别、最低的控制台日志级别和默认的控制台日志级别。)
** echo 8 > /proc/sys/kernel/printk 设置当前的日志级别
    修改日志级别:echo 0 4 1 7 > /proc/sys/kernel/printk
** 在<linux/kernel.h>头文件里一共定义了8个级别(0-7)的输出(越小级别越高),从高到低分别由如下常量表示:
    KERN_EMERG         :    最高级别,一般只用来打印崩溃信息
    KERN_ALERT         :    需要立即处理的信息
    KERN_CRIT          :    关键信息,一般用来显示严重的硬件和软件错误
    KERN_ERR           :    用来显示硬件错误
    KERN_WARNING       :    显示不会造成严重错误的警告信息
    KERN_NOTICE        :    显示需要引起注意的信息
    KERN_INFO          :  显示一般信息,例如驱动所发现的硬件列表
    KERN_DEBUG    :  用来显示调试信息
** printk与printf的一个区别printk是“行驱动”的,也就是说只有收到一个换行符数据才会真正输出到终端,否则就不会有任何信息输出。
** 另一个值得注意的问题是我们在调试嵌入式设备的时候,经常是从串口获得显示信息,
    如果我们使用printk过于频繁的话,串口的传输速度就会成为瓶颈,这样会造成系统的性能下降甚至停止反应。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值