dev_dbg()

2023-10-28 20:32
文章标签 dev dbg

本文主要是介绍dev_dbg(),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

linux设备驱动调试,我们在内核中看到内核使用dev_dbg来控制输出信息,这个函数的实质是调用 printk(KERN_DEBUG )来输出打印信息。要打开这个开关需要下面两步。
     1、打开调试开关:你调试的文件中必然包含了<linux/device.h>,或者《linux /paltforam_device.h》,后者包含了前者,在包含此头文件之前,使用#define DEBUG 1 来打开调试开关:例如
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/clk.h>
#include <linux/module.h>
#define DEBUG    1
#include <linux/platform_device.h>
     在linux/device.h文件中:
#define dev_printk(level, dev, format, arg...)    /
    printk(level "%s %s: " format , dev_driver_string(dev) , (dev)->bus_id , ## arg)
#ifdef DEBUG
#define dev_dbg(dev, format, arg...)        /
    dev_printk(KERN_DEBUG , dev , format , ## arg)
#else
static inline int __attribute__ ((format (printf, 2, 3)))
dev_dbg(struct device * dev, const char * fmt, ...)
{
    return 0;
}
#endif
但是这个打开了之后,也不能顺利的输出信息,原因是printk有默认的信息级别。
    linux/kernel文件中
#define    KERN_EMERG    "<0>"    /* system is unusable            */
#define    KERN_ALERT    "<1>"    /* action must be taken immediately    */
#define    KERN_CRIT    "<2>"    /* critical conditions            */
#define    KERN_ERR    "<3>"    /* error conditions            */
#define    KERN_WARNING    "<4>"    /* warning conditions            */
#define    KERN_NOTICE    "<5>"    /* normal but significant condition    */
#define    KERN_INFO    "<6>"    /* informational            */
#define    KERN_DEBUG    "<7>"    /* debug-level messages            */
可以看到KERN_DEBUG是级别最低的。
2、修改文件kernel/printk文件
/* printk's without a loglevel use this.. */
#define DEFAULT_MESSAGE_LOGLEVEL 4 /* KERN_WARNING */
/* We show everything that is MORE important than this.. */
#define MINIMUM_CONSOLE_LOGLEVEL 1 /* Minimum loglevel we let people use */
#define DEFAULT_CONSOLE_LOGLEVEL 8 /* anything MORE serious than KERN_DEBUG */
   其中DEFAULT_CONSOLE_LOGLEVEL 为终端console输出的最低级别,比这严重的都将输出。原来该值为7,则调试信息无法输出,修改为8则全部有输出。

这篇关于dev_dbg()的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/295784

相关文章

v0.dev快速开发

探索v0.dev:次世代开发者之利器 今之技艺日新月异,开发者之工具亦随之进步不辍。v0.dev者,新兴之开发者利器也,迅速引起众多开发者之瞩目。本文将引汝探究v0.dev之基本功能与优势,助汝速速上手,提升开发之效率。 何谓v0.dev? v0.dev者,现代化之开发者工具也,旨在简化并加速软件开发之过程。其集多种功能于一体,助开发者高效编写、测试及部署代码。无论汝为前端开发者、后端开发者

LVM 'Can’t open /dev/sdb1 exclusively. Mounted filesystem?' Problem

在将几块盘做LVM时,遇到一个之前都没遇到过的问题: root@ubuntu:~# pvcreate /dev/sdc1Can't open /dev/sdc1 exclusively. Mounted filesystem? 首先第一反应就是查看这个分区是否已经在使用了,但是没有。 查看硬盘的一些信息: root@ubuntu:~# cat /proc/partitionsmajo

Linux 挂载须知: mount 一些小问题 mount: no medium found on /dev/sr0

我属于window+VM+ubuntu的配置,有时需要把windows上的文件,挂载到虚拟机上去。然后每次使用命令的时候会出现如下的问题:                其实解决问题很简单,但是由于我自己的粗心而花费了很长的时间:    这个时候一定要确认,虚拟机的设置处是否勾选了   具体如下图所示:                 然后按照  如下的命令:   mount

Ubuntu上安装libdc1394-22-dev出现无法定位安装包的解决办法

一、libdc1394-22-dev介绍       libdc1394-22-dev 是一个开发库,用于与IEEE 1394 (FireWire)摄像头进行交互。具体来说,它是 libdc1394 的开发版本,提供了开发者头文件和链接库,方便在应用程序中集成对基于 IEEE 1394 标准的数码相机的支持。 主要功能: - IEEE 1394 (FireWire) 协议:这是一个支持高速数据

App使用Job中遇到的WAIT DEV_NOT_DOZING的解决方案

摘要: 由于原生Job机制会使用Doze的白名单,故遇到WAIT:DEV_NOT_DOZING现象,一般配置为Whitelist user apps名单即可解决问题 Doze名单类型 配置对象 配置方法 影响 Whitelist user apps 第三方应用 1.Adb shell 命令:adb shell dumpsys deviceidle whitelist +com.t

Dev C++:简单步骤下载与安装指南

1. 前言 在当今这个数字化时代,编程已成为连接创意与技术的桥梁,它不仅推动着科技的进步,也深刻地改变着我们的生活方式。对于初学者而言,选择一款合适且易于上手的集成开发环境(IDE)是学习编程旅程中的重要一步。而Dev C++,作为一款轻量级且功能强大的C/C++编程工具,凭借其简洁的界面、丰富的功能以及良好的兼容性,成为了众多编程爱好者尤其是C/C++初学者的首选。 本指南旨在为广大编程爱好

/dev/null笔记

/dev/null      是个黑洞,进去的东西永远出不来,它是一个空设备文件    在脚本编程的时候经常会用它(空设备文件)来屏蔽标准或错误输出(stdout 或 stderr)。 >      重定向输出,覆盖文件 >>     重定向输出,不覆盖文件 &      等同于 UNIX有几种输入输出流,与数字的对应关系如下:      0-标准输入流(stdin)

git合并dev分支的多个commit到master分支

这里主要使用新建指定位置分支,rebase,以及删除新建分支,三步操作进行 1.新建到合并的commit处的branch git checkout -b newbranch 74b73d6a 后面跟得的是commit_id,这个commit是最后需要合并到的那个[ , commit_id] 2.rebase到master git checkout mastergit rebase ne

React npm run dev jQuery 报错

最近研究React    cnpm  install   后     npm  run dev   报错 与  jquery和jQuery有关 有可能是jquery 与  jQuery 冲突了   尝试好几次后最终想到的办法是  删掉  node_modules  里面的 _jQuery@1.7.4@jQuery 重新  npm  run dev     通过

为什么生成设备号过后,还要去板子mknod /dev/led c 11 0来生成设备文件呢?

在Linux系统中,生成设备号(通过MKDEV宏或类似方式)和创建设备文件(如使用mknod命令)是两个不同的步骤,它们各自承担着不同的职责。 为什么需要生成设备号? 设备号是内核用来唯一标识和管理设备的。每个设备都有一个主设备号和次设备号,其中主设备号标识了设备的类型(如硬盘、字符设备等),而次设备号则用于在同一类型的设备中区分不同的设备实例。生成设备号是在内核层面进行的,它确保了设备在内核