本文转载自:https://blog.csdn.net/kunkliu/article/details/78048618

转载地址:http://blog.chinaunix.net/uid-22841689-id-3924244.html

一、打印调试       
        linux设备驱动调试,我们在内核中看到内核使用dev_dbg来控制输出信息,这个函数的实质是调用
printk(KERN_DEBUG )来输出打印信息。要打开这个开关需要下面两步。

1.1、打开调试开关
        你调试的文件中必然包含了<linux/device.h>,或者<linux /paltforam_device.h>,后者包含了前者,
在包含此头文件之前,使用#define DEBUG 1 来打开调试开关:例如

点击(此处)折叠或打开

  1. #include <linux/kernel.h>
  2. #include <linux/init.h>
  3. #include <linux/clk.h>
  4. #include <linux/module.h>
  5. #define DEBUG 1
  6. #include <linux/platform_device.h>

在linux/device.h文件中:

点击(此处)折叠或打开

  1. #define dev_printk(level, dev, format, arg...)\
  2. printk(level "%s %s: " format , dev_driver_string(dev), (dev)->bus_id, ## arg)
  3. #ifdef DEBUG
  4. #define dev_dbg(dev, format, arg...)\
  5. dev_printk(KERN_DEBUG , dev , format , ## arg)
  6. #else
  7. static inline int __attribute__ ((format (printf, 2, 3)))
  8. dev_dbg(struct device * dev, const char* fmt, ...)
  9. {
  10. return 0;
  11. }
  12. #endif

但是这个打开了之后,也不能顺利的输出信息,原因是printk有默认的信息级别。
        linux/kernel文件中

点击(此处)折叠或打开

  1. #define KERN_EMERG "<0>"
  2. #define KERN_ALERT "<1>"
  3. #define KERN_CRIT "<2>"
  4. #define KERN_ERR "<3>"
  5. #define KERN_WARNING "<4>"
  6. #define KERN_NOTICE "<5>"
  7. #define KERN_INFO "<6>"
  8. #define KERN_DEBUG "<7>"

可以看到KERN_DEBUG是级别最低的。
1.2、修改文件kernel/printk文件

点击(此处)折叠或打开

  1. #define DEFAULT_MESSAGE_LOGLEVEL 4
  2. #define MINIMUM_CONSOLE_LOGLEVEL 1
  3. #define DEFAULT_CONSOLE_LOGLEVEL 8

其中DEFAULT_CONSOLE_LOGLEVEL 为终端console输出的最低级别,比这严重的都将输出。
原来该值为7,则调试信息无法输出,修改为8则全部有输出。
1.3、修改Makefile
        通过配置内核选项,修改Makefile实现显示打印调试信息。Kconfig内容如下:

点击(此处)折叠或打开

  1. config ADC_DEV_DEBUG
  2. bool "adc dev debugging messages"
  3. depends on ADC_INTF_DEV
  4. help
  5. Say Y here if you want the adc dev to produce a bunch of debug
  6. messages to the system log. Select thisif you are having a
  7. problem with adc core and want to see more of what is going on.

Makefile内容如下:

点击(此处)折叠或打开

  1. #
  2. # Makefile for the i2c bus drivers.
  3. #
  4. obj-$(CONFIG_GSC_SPI0_ADC_CORE)        += adc-core.o
  5. obj-$(CONFIG_ADC_INTF_DEV)            += adc-dev.o
  6. obj-$(CONFIG_ADC_INTF_PROC)            += adc-proc.o
  7. obj-$(CONFIG_ADC_INTF_SYSFS)            += adc-sysfs.o
  8. obj-$(CONFIG_GSC3280_ADC)            += gsc3280_adc.o
  9. ccflags-$(CONFIG_GSC_ADC_DEV_DEBUG)+= -DGSC3280_ADC_DEV_DEBUG

红色部分即是。当内核配置选中后,CONFIG_GSC_ADC_DEV_DEBUG即被定义,编译后,源码中使用
GSC3280_ADC_DEV_DEBUG宏定义的调试语句将被打印。

 

Linux驱动开发调试 -- 打开dev_dbg()【转】的更多相关文章

  1. Linux驱动开发 -- 打开dev_dbg()

    Linux驱动开发 -- 打开dev_dbg() -- :: 分类: LINUX linux设备驱动调试,我们在内核中看到内核使用dev_dbg来控制输出信息,这个函数的实质是调用printk(KER ...

  2. 嵌入式Linux驱动开发日记

    嵌入式Linux驱动开发日记 主机硬件环境 开发机:虚拟机Ubuntu12.04 内存: 1G 硬盘:80GB 目标板硬件环境 CPU: SP5V210 (开发板:QT210) SDRAM: 512M ...

  3. Linux 驱动开发

    linux驱动开发总结(一) 基础性总结 1, linux驱动一般分为3大类: * 字符设备 * 块设备 * 网络设备 2, 开发环境构建: * 交叉工具链构建 * NFS和tftp服务器安装 3, ...

  4. Linux驱动开发必看详解神秘内核(完全转载)

    Linux驱动开发必看详解神秘内核 完全转载-链接:http://blog.chinaunix.net/uid-21356596-id-1827434.html   IT168 技术文档]在开始步入L ...

  5. linux驱动开发流程

    嵌入式linux驱动开发流程嵌入式系统中,操作系统是通过各种驱动程序来驾驭硬件设备的.设备驱动程序是操作系统内核和硬件设备之间的接口,它为应用程序屏蔽了硬件的细节,这样在应用程序看来,硬件设备只是一个 ...

  6. 【转】linux驱动开发的经典书籍

    原文网址:http://www.cnblogs.com/xmphoenix/archive/2012/03/27/2420044.html Linux驱动学习的最大困惑在于书籍的缺乏,市面上最常见的书 ...

  7. linux驱动开发的经典书籍

    转载于:http://www.cnblogs.com/xmphoenix/archive/2012/03/27/2420044.html 参加实习也近一个月了,严重感觉知识不够,真是后悔学校里浪费那么 ...

  8. 转:linux驱动开发的经典书籍

    源地址:http://www.cnblogs.com/xmphoenix/archive/2012/03/27/2420044.html Linux驱动学习的最大困惑在于书籍的缺乏,市面上最常见的书为 ...

  9. 嵌入式linux驱动开发之点亮led(驱动编程思想之初体验)

    这节我们就开始开始进行实战啦!这里顺便说一下啊,出来做开发的基础很重要啊,基础不好,迟早是要恶补的.个人深刻觉得像这种嵌入式的开发对C语言和微机接口与原理是非常依赖的,必须要有深厚的基础才能hold的 ...

随机推荐

  1. (转)Properties Editor为你解除通过native2ascii进行Unicode转码的烦恼

    在Java或J2EE应用程序的设置文件或国际化对应的桌面应用程序的开发中,广泛使用着属性文件.然而,你必须通过J2SDK中的native2ascii工具来将文件中的多字节字符转换成Unicode的字符 ...

  2. github上删除一个项目或者reposity

    1,点击github的头像,选择如下操作. 2.选择要删除的reposity 3.选择settings 4.复制reposity名字,然后下滑鼠标到底部,选择delete this reposity ...

  3. [ Learning ] Spring Resources

    1. Spring MVC Spring MVC原理及配置详解 springMVC系列之(三) spring+springMVC集成(annotation方式) Mybatis3+Spring4+Sp ...

  4. arm-cache coherency

    提高一个系统的performance,有两种办法: 1) 不断提高一个core的performance,手段就是不断提高freq,减小Vt,这样都会在增加power(dynamic,leakage) ...

  5. kail linux arp欺骗

    首先连接wifi,进入内网 1,查看内网的存活主机  命令  fping -asg 192.168.1.0/24    (视不同环境而定,假设这里的路由器地址为 192.168.1.1) 也可利用其他 ...

  6. 使用淘宝npm镜像

    我们都知道淘宝大量采用了Nodej技术,所以它的镜像还是值得肯定的!更多相关可查看:淘宝NPM镜像 npm的官方镜像在国内访问是比较慢的,所以替代方法是使用淘宝npm镜像! 淘宝 NPM 镜像是一个完 ...

  7. sql server 将两列的值合并到另一列

    select top 100 t2.FullName, * from Subject,(select id, isnull(first_name,'') +isnull(middle_name,'') ...

  8. Windows 7关闭睡眠(休眠)模式和删除休眠文件

    原文地址:https://www.192ly.com/pc/win7/gb-sm.html 怎么关闭Windows 7关闭睡眠(休眠)功能?Windows 7系统中怎么删除休眠文件?Windows 7 ...

  9. jQuery图片懒加载插件jquery.lazyload.js使用实例注意事项说明

    jQuery图片懒加载插件jquery.lazyload.js使用实例注意事项说明 jquery.lazyload.js是一个用JavaScript编写的jQuery插件.它可以延迟加载长页面中的图片 ...

  10. tomcat查看并修改jvm大小

    JVM--Java Virtual Machine,Java虚拟机:tomcat不是直接运行在物理操作系统上,而是运行在Java虚拟机上,通常说的配置jvm就是配置分配给Java虚拟机的内存大小: 如 ...