Linux驱动调试方法

Linux驱动调试主要的途径是靠打印输出,这里介绍动态调试法。

1.Linux驱动调试信息输出

目前驱动代码中,已不建议直接使用printk()直接添加打印调试信息,而是使用dev_info()dev_dbg()dev_err()之类的函数代替,这些dev_xxx()函数本质还是使用printk()打印,但是相比起printk():

1)支持打印模块信息,dev信息

2)支持动态调试(dynamic debug)方式

dev_info():启动过程、或者模块加载过程等“通知类”信息,一般只会通知一次,例如probe()函数;

dev_dbg():一般使用在普通错误,如-EINVAL、-ENOMEM等errno发生处,用于调试;

dev_err():一般使用在严重错误,尤其是用户无法得到errno的地方,或者程序员不容易猜测系统哪里出了问题的地方;

2.动态调试

1)打开kernel动态调试开关

编译kernel时,make menuconfig选中Enable dynamic printk() supportDebug Filesystem,如下图(kernel version:4.9.253)

2)输出调试信息

su root
echo file <xxx.c> +p > /sys/kernel/debug/dynamic_debug/control

在操作驱动程序过程中,可以通过

sudo dmesg

查看调试信息输出

注意:xxx.c为待调试的驱动程序文件名,不要写错。dmesg输出的为dev_dbg()的信息

3)禁止调试信息

echo file <xxx.c> -p > /sys/kernel/debug/dynamic_debug/control

3.打印调试跟踪信息

su root
cat /sys/kernel/debug/tracing/trace

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux 驱动调试是开发者在开发和调试Linux内核驱动程序时经常遇到的任务。下面是一些常用的Linux驱动调试方法: 1. 打印调试信息: 在驱动程序中使用printk或者dev_printk函数输出调试信息。由于驱动程序运行在内核空间,因此可以使用printk函数将调试信息输出到内核日志中。通过查看内核日志,可以了解内核执行过程中驱动程序相关的信息。 2. 开启内核调试功能: 使用kdb、kgdb或者kgdboc等工具来开启内核调试功能。这些工具可以通过调试界面或者串口连接到内核进行调试。通过设置断点、单步执行等操作,可以对驱动程序进行详细的调试。 3. 使用调试工具: Linux内核提供了一些调试工具,如kprobe、kprobe-based-trace等。这些工具可以用于在运行时跟踪内核函数的调用和参数,并通过利用perf工具进行性能分析。针对特定问题,可以使用ftrace来进行函数追踪和性能分析。 4. 使用模拟环境: 在某些情况下,为了调试驱动程序,可以使用模拟环境。如使用qemu来模拟运行某个特定的硬件平台,以便方便地进行驱动程序的调试。 5. 动态打印调试信息: Linux内核提供了一些函数(如dynamic_debug_enable)来动态控制驱动程序打印调试信息的级别。通过在驱动程序中使用动态调试宏(如pr_debug),可以根据需要在运行时动态地输出调试信息。 总结起来,Linux驱动调试方法包括打印调试信息、开启内核调试功能、使用调试工具、使用模拟环境以及动态打印调试信息等。这些方法可以帮助开发者定位和解决驱动程序中的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值