dev_info、dev_dbg、dev_err及动态调试

本文介绍了Linux内核驱动中如何使用dev_info、dev_dbg和dev_err进行动态调试,包括它们的使用场景和动态调试的方法。通过开启内核动态调试开关,利用dbgfs挂载点控制调试信息的输出,可以灵活地在开发和正式版本中切换调试状态。
摘要由CSDN通过智能技术生成

目前在kernel驱动代码中,都不再建议直接使用printk直接添加打印信息,而是使用dev_infodev_dbgdev_err之类的函数代替,虽然这些dev_xxx函数的本质还是使用printk打印的,但是相比起printk

  • 支持打印模块信息、dev信息
  • 支持动态调试(dynamic debug)方式

下面简述下这几个dev_xxx函数的基本使用规则,以及动态调试使用方式。

  • dev_info(): 启动过程、或者模块加载过程等“通知类的”信息等,一般只会通知一次,例如probe函数;
  • dev_dbg(): 一般使用在普通错误,如-EINVAL、-ENOMEM等errno发生处,用于调试;
  • dev_err(): 一般使用在严重错误,尤其是用户无法得到errno的地方,或者程序员不容易猜测系统哪里出了问题的地方;

动态调试使用方法

  • 打开内核动态调试开关,make menuconfig选中CONFIG_DYNAMIC_DEBUG以及CONFIG_DEBUG_FS
  • Linux启动后,使用命令行挂载上dbgfs
mkdir /mnt/dbg
mount -t debugfs none /mnt/dbg
  • 使用下面方式控制你想输出dev_dbg()信息
    • 控制某个文件所有dev_dbg(),echo -n "file xxx.c +p" > /mnt/dbg/dynamic_debug/control
    • 控制某个函数所有dev_dbg(),echo -n "func xxx +p" > /mnt/dbg/dynamic_debug/control
  • 运行程序,使用dmesg则可以看到相应dev_dbg()的输出信息
  • 当调试结束,不再想输出dev_dbg()信息了,使用下面命令关闭即可
    • echo -n "file xxx.c -p" > /mnt/dbg/dynamic_debug/control
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值