printk

阅读数:56 评论数:0

跳转到新版页面

分类

Linux

正文

一、概述

在 Linux 内核中,printk 是一个类似于用户空间 C 语言中的 printf 函数的内核级日志记录功能。它用于内核代码中输出调试信息到控制台或系统日志。printk 可以在几乎任何时候被调用,包括中断上下文和异常处理中,这是因为它不会睡眠,即不会导致调用它的进程阻塞。

printk 的基本使用方法如下:

printk(KERN_INFO "This is an info message: %d\n", my_variable);

printk 输出的消息可以通过 dmesg 命令在用户空间查看,也可以在 /var/log/kern.log 文件中找到(具体位置可能因发行版而异)。

在编写生产级的内核代码时,应该谨慎使用 printk,因为过多的日志输出可能会影响系统性能和响应能力。通常建议在开发和调试阶段使用较高的日志级别,并在生产环境中减少或关闭调试日志输出。

二、日志级别宏

内核通过 printk() 输出的信息具有日志级别

#define KERN_SOH	"\001"		/* ASCII Start Of Header */
#define KERN_SOH_ASCII	'\001'

//系统不可用
#define KERN_EMERG	KERN_SOH "0"	/* system is unusable */
//需要立即采取行动
#define KERN_ALERT	KERN_SOH "1"	/* action must be taken immediately */
//严重情况
#define KERN_CRIT	KERN_SOH "2"	/* critical conditions */
//错误情况
#define KERN_ERR	KERN_SOH "3"	/* error conditions */
//警告情况
#define KERN_WARNING	KERN_SOH "4"	/* warning conditions */
//正常情况,但是值得注意
#define KERN_NOTICE	KERN_SOH "5"	/* normal but significant condition */
//信息型消息
#define KERN_INFO	KERN_SOH "6"	/* informational */
//调试级别的信息
#define KERN_DEBUG	KERN_SOH "7"	/* debug-level messages */

//默认的内核日志级别
#define KERN_DEFAULT	KERN_SOH "d"	/* the default kernel loglevel */

KERN_SOH与后面的数字会组合在一起。




相关推荐

mainline 、longterm、stable、linux-next、snapshot这些名词,都是linux kernel sou

__CONCAT,连接两个参数,##用于粘贴两个参数,#用于替换参数 #define __CONCAT(a, b) a ##

<img src="http://123.56.17.129:2177/images/linux_kernel.png" alt="" /

一、概述 在 Linux 系统中,内核日志级别决定了哪些类型的消息会被输出到内核日志缓冲区。这些消息可以通过 dmesg 命令查看。日志级别从 0 到 7,分别对应不同的重要程度: 0 (KERN_

在编程中,一个符号symbol是一个程序的创建块,它是一个变量名或一个函数名。 内核符号表(Kernel Symbol Table) 内核并不使用符号名。它是通过

在Kernel_path/Makefile中可以查看到 # SPDX-License-Identifier: GPL

一、概述  在日常工作中,经常会需要对内核进行Debug、或者进行优化工作。一些简单的问题,可以通过dmesg/printk查看,优化借助一些工具进行。 但是当问题逻辑复杂,优化面宽泛的时候,往往无从

一、概述 在 Linux 内核编程中,asmlinkage 是一个关键字,用于告诉编译器该函数将通过堆栈而不是寄存器接收所有的参数。这个宏主要用于那些需要从用户空间通过系统调用接口调用的函数。在系统调

上图是Intel手册中对标志寄存器的图示,几个

一、概述 自从Linux内核代码迁移到Git以来,Linux内核配置/构建系统(也称为Kconfig / kbuild)已存在很长时间了。 二、Kconfig (Kernel config) menu