• linux 内核 printk 使用


    在linux 中,内核打印语句 printk() 会将内核信息输出到内核信息缓冲区中。内核信息缓冲区是一个环形

    缓冲区(ring buffer),因此,如果插入的信息过多,就会将之前的信息冲刷掉。

    printk() 定义了8个消息级别,分为级别0 ~ 7,级别越低(数值越大)的消息越不重要,第0级是紧急事件,

    第7级是调试级,在内核中 include/linux/printk.h 中的定义如下:

    #define KERN_EMERG    "<0>"    /* system is unusable            */
    #define KERN_ALERT    "<1>"    /* action must be taken immediately    */
    #define KERN_CRIT    "<2>"    /* critical conditions            */
    #define KERN_ERR    "<3>"    /* error conditions            */
    #define KERN_WARNING    "<4>"    /* warning conditions            */
    #define KERN_NOTICE    "<5>"    /* normal but significant condition    */
    #define KERN_INFO    "<6>"    /* informational            */
    #define KERN_DEBUG    "<7>"    /* debug-level messages    */

    0级,代表紧急事件,一般是系统崩溃之前提示的消息

    1级,必须立即采取行动

    2级,临界状态,通常涉及严重的硬件或软件操作失败

    3级,用于报告错误状态,设备驱动程序会经常使用KERN_ERR 报告来自硬件的问题

    4级,对可能出现问题的情况进行警告,这类情况通常不会对系统造成严重问题

    5级,有必要进行提示的正常情况,许多与安全相关的状况用这个级别进行提示

    6级,内核提示性信息,很多驱动程序在启动的时候用这个级别打印出它们找到的硬件信息

    7级,用于调试信息

    调试时,通常使用封装了 printk 的更高级的宏,其中可替代 printk 的宏如下:

    #define pr_emerg(fmt, ...) 
        printk(KERN_EMERG pr_fmt(fmt), ##__VA_ARGS__)
    #define pr_alert(fmt, ...) 
        printk(KERN_ALERT pr_fmt(fmt), ##__VA_ARGS__)
    #define pr_crit(fmt, ...) 
        printk(KERN_CRIT pr_fmt(fmt), ##__VA_ARGS__)
    #define pr_err(fmt, ...) 
        printk(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__)
    #define pr_warning(fmt, ...) 
        printk(KERN_WARNING pr_fmt(fmt), ##__VA_ARGS__)
    #define pr_warn pr_warning
    #define pr_notice(fmt, ...) 
        printk(KERN_NOTICE pr_fmt(fmt), ##__VA_ARGS__)
    #define pr_info(fmt, ...) 
        printk(KERN_INFO pr_fmt(fmt), ##__VA_ARGS__)
    #define pr_cont(fmt, ...) 
        printk(KERN_CONT fmt, ##__VA_ARGS__)
    
    /* pr_devel() should produce zero code unless DEBUG is defined */
    #ifdef DEBUG
    #define pr_devel(fmt, ...) 
        printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
    #else
    #define pr_devel(fmt, ...) 
        no_printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
    #endif

    在打印信息时,如果要打印所出其所在函数,可以使用 __FUNCTION__, 如下示:

    printk("%s: Incorrect IRQ %d from %s
    ", __FUNCTION, irq, devname);
  • 相关阅读:
    转义字符:html、mysql、postgresql、json、php
    php_mysql、php_mysqli 与 pdo_mysql 的区别与选择
    一件小事测试各个搜索引擎:谷歌、bing、有道、百度、搜狗、360
    一键安装lnmp:自动检测最新稳定版、无需root权限
    apache graceful 与 cpu占用率
    互联网创业的准备——版本控制与上线
    201212互联网创意、创业项目整理
    【图】游东天目山
    那些在11gR2中可能惹祸的新特性,一张列表帮助你摆脱升级11gR2带来的烦恼
    【转】卡巴斯基安全公告称甲骨文数据库存在加密漏洞
  • 原文地址:https://www.cnblogs.com/aqing1987/p/4377470.html
Copyright © 2020-2023  润新知