当前位置: 首页 > news >正文

printk相关说明

printk函数打印信息是调试内核、驱动的最简单方法。

printk函数与用户空间的printf函数格式完全相同,它所打印的字符串头部可以加入“\001n”样式的字符, 其中n为0~7,表示这条信息的记录级别,n数值越小级别越高。

1、printk函数的级别

在内核代码include/linux/kernel.h中,下面几个宏确定了printk函数怎么处理打印级别:

#define console_loglevel (console_printk[0])
#define default_message_loglevel (console_printk[1])
#define minimum_console_loglevel (console_printk[2])
#define default_console_loglevel (console_printk[3])

① 对于printk(“<n>……”),只有n小于console_loglevel时,这个信息才会被打印。

② 假设default_message_loglevel的值等于4,如果printk的参数开头没有“<n>”样式的字符,则在printk函数中进一步处理前会自动加上“<4>”;

③ minimum_console_logleve是一个预设值,平时不起作用。通过其他工具来设置console_loglevel的值时,这个值不能小于minimum_console_logleve。

④ default_console_loglevel也是一个预设值,平时不起作用。它表示设置console_loglevel时的默认值,通过其他工具来设置console_loglevel的值时,用到这个值。

上面代码中,console_printk是一个数组,它在kernel/printk.c中定义:

/* 数组里的宏在include/linux/printk.h中定义
 */
int console_printk[4] = {
    CONSOLE_LOGLEVEL_DEFAULT,    /* console_loglevel */
    MESSAGE_LOGLEVEL_DEFAULT,    /* default_message_loglevel */
    CONSOLE_LOGLEVEL_MIN,        /* minimum_console_loglevel */
    CONSOLE_LOGLEVEL_DEFAULT,    /* default_console_loglevel */
};

/* Linux 4.9.88 include/linux/printk.h */
#define CONSOLE_LOGLEVEL_DEFAULT 7 /* anything MORE serious than KERN_DEBUG */
#define MESSAGE_LOGLEVEL_DEFAULT CONFIG_MESSAGE_LOGLEVEL_DEFAULT
#define CONSOLE_LOGLEVEL_MIN     1 /* Minimum loglevel we let people use */

2、用户空间修改printk函数的级别

挂接proc文件系统后,读取/proc/sys/kernel/printk文件可以得知console_loglevel、default_message_loglevel、minimum_console_loglevel和default_console_loglevel这4个值。

也可以直接修改/proc/sys/kernel/printk文件来改变这4个值:

# echo "1 4 1 7" > /proc/sys/kernel/printk

这使得console_loglevel被改为1,于是所有的printk信息都不会被打印。

相关文章:

  • 谷歌AI最新发布的可微分逻辑元胞自动机(DiffLogic CA)
  • ubuntu-学习笔记-nginx+php
  • MATLAB表格Table与时间序列Timetable的高效操作方法
  • MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议)
  • L1-088 静静的推荐
  • QT中委托QStyledItemDelegate的使用
  • 6-langchang多模态输入和自定义输出
  • Apache POI详解
  • 保安员考试:巧用记忆术,攻克理论知识堡垒
  • 目标检测YOLO实战应用案例100讲-基于毫米波雷达的多目标检测 (续)
  • protobuf, rpc, 火焰图
  • 大语言模型 (LLM) 基础知识
  • 介绍如何开发一个小样本增量学习程序
  • 国产LIMS系统深度横评 实验室数字化转型最优解
  • Linux之kernel(1)系统基础理论(6)
  • C++ 使用红黑树的实现及迭代器完成对set和map的封装
  • 2025年Draw.io最新版本下载安装教程,附详细图文
  • asm磁盘组扩容加错磁盘
  • 脑电波控制设备:基于典型相关分析(CCA)的脑机接口频率精准解码方法
  • Tomcat下载安装及日志乱码问题解决
  • 为什么有的人闻到烟味,会咳嗽、胸闷?别再伤害身边的人
  • 赵心童世锦赛历史性夺冠,你今天打斯诺克很可能订不到位
  • 五一小长假上海“人从众”,全要素旅游交易总额超200亿元
  • 申活观察|精致精准精细,城市“双面镜”照见怎样的海派活力
  • 下达专项资金、党政主官田间调研……全国多地力保夏粮稳收
  • 国际油价重挫!美股道指连跌三月,啥情况?