【printk学习记录】

简介

在内核中如何想要打印相关的信息,不能使用printf,内核提供了一个类似的打印函数printk。其中我认为最重要的区别就是printk自带日志级别。printk提供了如下几个打印级别,需要包含头文件<linux/kernel.h>

  • KERN_EMERG
    用于紧急时间消息,他们一般是系统崩溃前的提示
  • KERN_ALERT
    用于需要立即采取动作的情况
  • KERN_CRIT
    临界状态,通常涉及严重的硬件或软件操作失败
  • KERN_ERR
    用于报告错误状态。报告硬件问题
  • KERN_WARNING
    对可能出现的情况,进行预警
  • KERN_NOTICE
    有必要提示的正常情形
  • KERN_INFO
    提示性信息。
  • KERN_DEBUG
    调试信息

举一个例子,一个调试信息,一个临界信息:

printk(KERN_DEBUG "Here I am: %s:%i\n", __FILE__, __LINE__);	/* 调试信息 */
printk(KERN_CRIT "I'm trashed; giving up on : %p:\n", ptr);		/* 临界信息 */

未指定级别的printk语句采用的默认级别是DEFAULT_MESSAGE_LOGEVEL,这个宏在kernel/printk.c中被指定为一个整数。默认KERN_WARNING

printk通过串口进行输出和打印,当优先级小于console_loglevel这个整数变量,才会输出,并且结尾必须以newline字符结尾。

系统如果运行klogdsyslogd,则无论console_loglevel值为多少,消息都追加到/var/log/messages中(否则按照syslogd的配置进行处理)。如果没有运行klogd,这些消息不会传递到用户空间,只能通过/proc/kmsg文件进行查看(dmsg命令也是看这个文件)。

console_loglevel的初始值是DEFAULT_CONSOLE_LOGLEVEL通过sys_syslog系统进行调整。调用klogd时可以指定 -c开关选项来修改这个变量。详情参考klogd手册注意要修改当前值一定要先杀掉klogd,然后再用新的-c选项来启用。

我们也可以通过对文本文件/proc/sys/kernal/printk来访问和修改控制台日志级别。这个文件包含4个整数值,分别是:当前日志级别、未明确指定日志级别是的默认消息级别、最小允许的日志级别以及引导时的默认日志级别,像文件写入单个整数值时,将会把当前日志级别修改为这个值。
例如:

# echo 8 > /proc/sys/kernel/printk
Linux设备驱动程序是用于控制和管理硬件设备的软件模块。学习Linux设备驱动程序可以帮助开发人员理解和掌握Linux内核的工作原理,以及如何编写和调试设备驱动程序。 以下是一些学习Linux设备驱动程序的笔记和建议: 1. 理解Linux设备模型:Linux设备模型是一种用于管理设备的框架,它提供了一种统一的方式来表示和操作设备。学习Linux设备模型可以帮助你理解设备的注册、初始化和销毁过程。 2. 学习字符设备驱动程序:字符设备是一种以字节为单位进行读写的设备,如串口、终端等。学习字符设备驱动程序可以帮助你了解字符设备的打开、关闭、读写等操作,并学习如何实现设备文件的注册和操作。 3. 学习块设备驱动程序:块设备是一种以块为单位进行读写的设备,如硬盘、闪存等。学习块设备驱动程序可以帮助你了解块设备的分区、缓存、IO调度等操作,并学习如何实现块设备的注册和操作。 4. 学习中断处理:中断是设备向处理器发送信号的一种机制,用于通知处理器设备的状态变化。学习中断处理可以帮助你了解中断的注册、处理和释放过程,并学习如何编写中断处理程序。 5. 学习设备驱动程序的调试技巧:设备驱动程序的调试是一个重要的技能,可以帮助你快速定位和解决问题。学习设备驱动程序的调试技巧可以帮助你理解和使用调试工具,如 printk、kprobe等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值