printk()函数-消息优先级宏

在对内核进行代码调试的时候,除了打开相应的内核开发配置选项之外,最普通也是最常用的调试就是打印出相关信息进行调试,对某些怀疑的变量进行监视,在用户空间下,我们最常用的方式是通过printf()函数来进行相关信息的输出,而在内核调试中,我们常用printk()函数来进行相关关键信息的输出,与printf()函数不同的地方是,printk()函数有消息输出优先级,即(loglevel),而这些loglevel是用相关的宏进行控制,例如:
printk(KERN_DEBUG "I am Senmashijie: %s:%i\n",__FILE__,__LINE__);
printk(KERN_CRIT "I am Senmashijie transhed;giving up on %p\n",ptr);

KERN_DEBUG 和 KERN_CRIT 就是消息输出优先级的宏,那么它们分别代表什么意思呢?

在<linux/kernel.h>中定义了8中可用的级别字符串,它们分别是:

KERN_EMERG
    用于紧急事件消息,一般是系统在崩溃之前提示的消息。

KERN_ALERT
   用于需要立即采取行动的动作。

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

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

KERN_WARING
    对可能的问题进行警告,通常这类信息不会对系统造成较为严重的问题。

KERN_NOTICE
    必要提示,一般是安全相关的信息提示,使用KERN_NOTICE。

KERN_INFO
    提示性信息。驱动程序在启动的时候会以这个级别打印出它们所找到的硬件信息。

KERN_DEBUG
    用于调试信息。

  上述8中字符串信息,以宏的形式展开后表示一个整数,整数值的范围:0~7,数值越小,优先级越高。

希望以上总结信息对大家有所帮助。

原文地址:https://www.cnblogs.com/Senchuangdianzi/p/12221815.html

时间: 2024-08-29 22:14:43

printk()函数-消息优先级宏的相关文章

printk 函数消息是如何记录的

printk 函数将消息写入一个   LOG_BUF_LEN 字节长的环形缓存, 长度值从 4 KB 到 1 MB, 由配置内核时选择. 这个函数接着唤醒任何在等待消息的进程, 就是说, 任何在系统 调用中睡眠或者在读取 /proc/kmsg 的进程. 这 2 个日志引擎的接口几乎是等同的, 但 是注意, 从 /proc/kmsg 中读取是从日志缓存中消费数据, 然而 syslog 系统调用能够选 择地在返回日志数据地同时保留它给其他进程. 通常, 读取 /proc 文件容易些并且是 62 kl

linux中模块的构建,传参,和printk函数的简单使用

静态编译,动态加载应用想访问内核需要通过系统调用 驱动:1.模块(打包,加入内核)2.内核机制3.操作硬件 在Kconfig里面配置menuconfig的时候,不同的类型会在图形化界面的终端显示不用的配置选项:bool CONFIG_HELLO []hello_driver 两态tristate CONFIG_HELLO <>hello_driver 三态的 空 * Mstring/int CONFIG_HELLO ()hello_driver 相当于宏替换 (dest)hello_drive

printk函数

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

LISTVIEW 消息 结构 宏

如果是要画的话,用CreateWindowEx创建 指定 WC_LISTVIEW window class 关于其消息如下: LVM_APPROXIMATEVIEWRECT  LVM_ARRANGE  LVM_CREATEDRAGIMAGE  LVM_DELETEALLITEMS  LVM_DELETECOLUMN  LVM_DELETEITEM  LVM_EDITLABEL  LVM_ENSUREVISIBLE  LVM_FINDITEM  LVM_GETBKCOLOR  LVM_GETBKI

C/C++ 打印源文件名和行号函数名的宏

__FILE__             宏在预编译时会替换成当前的源文件名__LINE__             宏在预编译时会替换成当前的行号 __FUNCTION__   宏在预编译时会替换成当前的函数名称

polymorphism-多态(函数多态、宏多态、静态多态、动态多态)

多态(polymorphism) 字面上意思--多种形态,即同一种方法的行为随上下文而异. 维基百科:Polymorphism (computer science), the ability incomputer programming to present the same interface for differing underlyingforms (data types). 1.函数多态(function polymorphism):也即是函数重载(functionoverloading

js 外部引用文件与 onload()函数的优先级

在HTML页面中的body加载进来的时候,外部引用的js文件存放的位置 1.js文件放在body里面,则是按照body的加载顺序(按先后顺序)进行加载 2.js文件放在<head>标签里面的文件,则是在body加载完之后,才加载头部的js文件 注:js文件和body加载的顺序是: body ----> js文件 在body里面加载的 js文件 和 onload函数的加载顺序: 同在body里面加载的文件,onload函数会优先于 js文件的加载 实例代码: a.html <html

CAF(C++ actor framework)使用随笔(延迟发送,消息转发,消息优先级)(四)

e). 消息延迟发送(和前面没太大区别直接上代码) #include <iostream> #include "caf/all.hpp" #include "caf/io/all.hpp" #include <string> #include <chrono> using namespace std; using namespace caf; behavior fun(event_based_actor* self){ retur

25.函数例题-预解析 作用域 、函数变量优先级、全局变量污染(直接在全局声明 、 函数里的变量没声明)但是函数里的变量没声明造成的全局变量污染有个前提,函数要被调用)

1.  return foo()   foo 没有return值,故为undefined.   2.      a b 在函数作用域内,外界找不到   var a = b =3; b 也算用var 声明了,只不过b 是在全局隐式var 了一个b ,在函数内部找不到变量的情况下就去全局找,全局找不到报错.    语法有错误,程序一句都不会执行,执行阶段有错误,会执行没错的代码,在执行出错的地方报错.  函数或则匿名函数体内声明变量是为了避免全局变量污染 重要例题:  函数没执行,全局没找到 b报错