Linux设备驱动程序——驱动调试printk()
来源:互联网 发布:双色球6保6旋转矩阵 编辑:程序博客网 时间:2024/06/05 12:00
前一段时间学了一下,printk()打印语句,现在用起来又忘了,看了一下前一段时间做的笔记,不是很详细,所以决定再写一下和printk相关的调试的东西。算是复习一下吧。
首先,先熟悉一下printk函数,这个函数和printf函数很类似。只不过一个运行在用户态,一个运行在内核态。此外还是要熟悉一下终端,和控制台等几个概念
首先需要说的是可以通过以下几种途径查看printk()函数的打印信息
1、直接在终端中使用dmesg命令来查看 这个我自己试了一下这个里面所有级别消息的都能看见
2、查看/var/log/messages 这个里面除了最后一个级别的其他级别的都能看见,7应该就是控制台级别。
3、查看/proc/kmsg 这个试了一下,打不开呀,不知道为什么
1、printk及控制台的日志级别
Printk是在内核中运行的像控制台输出显示的函数。内核会先在内核空间中分配一静态缓冲区,作为显示用的空间,然后调用sprintf,格式换显示字符串,最后调用tty_write函数向终端打印信息。
#define KERN_EMERG 0/*紧急事件消息,系统崩溃之前提示,表示系统不可用*/
#define KERN_ALERT 1/*报告消息,表示必须立即采取措施*/
#define KERN_CRIT 2/*临界条件,通常涉及严重的硬件或软件操作失败*/
#define KERN_ERR 3/*错误条件,驱动程序常用KERN_ERR来报告硬件的错误*/
#define KERN_WARNING 4/*警告条件,对可能出现问题的情况进行警告*/
#define KERN_NOTICE 5/*正常但又重要的条件,用于提醒*/
#define KERN_INFO 6/*提示信息,如驱动程序启动时,打印硬件信息*/
#define KERN_DEBUG 7/*调试级别的消息*/
extern int console_printk[];
#define console_loglevel (consle_printk[0])
#define default_message_loglevel (consle_printk[0])
#define minmum_console_loglevel (consle_printk[1])
#define default_console_loglevel(consle_printk[2])
在没有指定日志级别的情况下:printk语句采用的是级别是DEFAULT_MESSAGE_LOGLEVEL它的定义如下:
#define DEFAULT_MESSAGE_LGOLEVEL4 /*其实通过这里可以看的出来,这个级别是和警告条件的级别是一致的*/
为了更好的控制不同级别的信息显示在控制台上面,内核设置了控制台的日志级别consle_loglevel,printk日志级别的作用是打印一定级别的消息,与之类似控制台值显示一定级别的消息。当日志的级别小于console_loglevel时,消息才能显示出来。控制台日志的级别定义如下:#define MINMUM_CONSLE_LGOLEVEL1 /*这里是可以使用的最小日志的级别*/
#define DEFAULT_CONSLE_LGOLEVEL7 /*比这个级别小的消息都会打印出来 */
Int consle[_printk[4]=
{
DEFAULT_CONSLE_LGOLEVEL, /*控制台日志级别*/
DEFAULT_MESSAGE_LGOLEVEL , /*没有定义级别的时候,这个是默认的值*/
MINMUM_CONSLE_LGOLEVEL ,/*最小的级别,也即是最高的级别*/
DEFAULT_CONSLE_LGOLEVEL /*默认的控制台级别*/
};
通过读写/proc/sys/kernel/printk文件可以读取和修改控制台文件的级别。方法
# cat /proc/sys/kernel/printk。
这上面显示的4个数据分别对应控制台日志级别、默认的消息日志级别、最低的控制台日志级别、默认的控制台日志级别\
用下面的命令来设置当前的日志级别.
#echo 8 > /proc/sys/kernel/printk
实验表明(1)是否打印到messages 文件和console_loglevel 无关,消息重要性为KERN_DEBUG
7时不打印到messages 文件,否则就打印。
(2)不管消息重要性是否小于console_loglevel,只要重要性不为KERN_EMERG,就
不会打印到console,说明在GNOME 图形界面下消息只会发到messages 文件,一般是不会
到console 上的。(这个应该是在X-window下面的吧,要不就和上面的矛盾了)
- Linux设备驱动程序——驱动调试printk()
- Linux设备驱动调试之printk
- LINUx 驱动程序printk 调试
- linux设备驱动学习笔记--内核调试方法之printk
- 使用printk()函数调试设备驱动程序
- Linux设备驱动——LCD驱动程序
- linux设备驱动——NandFlash驱动程序
- linux设备驱动——UVC驱动程序
- 《Linux设备驱动程序》——调试技术
- linux驱动调试之printk()
- linux驱动调试之printk
- Linux设备驱动程序——设备驱动编程基础
- Linux设备驱动程序——字符设备驱动编程
- linux设备驱动程序调试
- 驱动程序调试方法之printk——printk的原理与直接使用
- 驱动程序调试方法之printk——printk的原理与使用
- 驱动程序调试方法之printk——printk的原理与直接使用
- 驱动程序调试方法之printk——printk的原理与直接使用
- onstat命令
- boost test 编译问题
- linux纪录系统用户执行过的命令
- MultiValueMap
- java程序执行sql脚本
- Linux设备驱动程序——驱动调试printk()
- 创建独一无二的包名
- [51daifan]来吧,一起书写51daifan的成长史吧-让一部分人先安全起来
- validate验证
- 基础加强 类加载器 代理
- 关于setTimeout与setInterval的区别
- STL 实现邻接表的存储与深搜广搜的完美结合不容错过啊!!!
- apche-mina2.0 简简单单搞定
- C++中单例模式的两种简单实现