NXP i.MX8系列平台开发讲解 - 5.3 调试篇(二) - 掌握Dynamic debug调试

专栏文章目录传送门返回专栏目录

Hi, 我是你们的老朋友,主要专注于嵌入式软件开发,有兴趣不要忘记点击关注【码思途远】


文章目录

目录

[掌握Dynamic debug调试](#掌握Dynamic debug调试)

[1. 认识Dynamic debug](#1. 认识Dynamic debug)

[2. 内核配置](#2. 内核配置)

[3. 使用Dynamic debug](#3. 使用Dynamic debug)

[3.1 查看当前的动态调试设置](#3.1 查看当前的动态调试设置)

[3.2 启用某个文件的调试信息](#3.2 启用某个文件的调试信息)

[3.3 关闭某个文件的调试信息](#3.3 关闭某个文件的调试信息)

[3.4 启用某个函数的调试信息](#3.4 启用某个函数的调试信息)

[3.5 控制特定模块的调试信息](#3.5 控制特定模块的调试信息)

[4. 示例应用](#4. 示例应用)

[5. 小结](#5. 小结)


本章节继续上一篇文章分享关于调试的方法,这个是作为一个涉及Linux 内核驱动开发人员所必备的一个知识点。主要涉及软件内容,掌握该调试方法可以帮助你对调试和寻找问题有很大帮助,而不是单纯只会用printk``printf 这样的方式进行打印。

1. 认识Dynamic debug

Dynamic debug 从字面意思,活跃的调试??大家都称之为动态调试。也就是在系统运行的时候,可以通过手动进行曲调整内核打印的控制,选择打开或者关闭某个模块的打印。这样在真正的工作调试过程中,可以获取到更多的信息帮助我们解决问题。但这一切都需要一些内核配置的开启支持。

2. 内核配置

要使用Dynamic debug功能,首先需要在编译内核时启用相关配置。以下是相关的内核配置选项:

bash 复制代码
CONFIG_DYNAMIC_DEBUG=y
CONFIG_DEBUG_FS=y

CONFIG_DYNAMIC_DEBUG选项用于启用Dynamic debug功能,CONFIG_DEBUG_FS则是启用调试文件系统,这对于查看和控制动态调试信息是必要的。

3. 使用Dynamic debug

一旦内核配置好并编译完成后,就可以通过一些命令来控制Dynamic debug。Dynamic debug的配置文件位于/sys/kernel/debug/dynamic_debug/control。通过向这个文件写入命令,可以开启或关闭特定文件中的调试信息。以下是一些常用的命令示例:

3.1 查看当前的动态调试设置

要查看当前系统中所有动态调试的设置,可以使用以下命令:

bash 复制代码
cat /sys/kernel/debug/dynamic_debug/control

3.2 启用某个文件的调试信息

假设我们有一个文件driver.c,我们希望启用这个文件的所有调试信息,可以使用如下命令:

bash 复制代码
echo 'file driver.c +p' > /sys/kernel/debug/dynamic_debug/control

3.3 关闭某个文件的调试信息

如果希望关闭driver.c文件的调试信息,可以使用如下命令:

bash 复制代码
echo 'file driver.c -p' > /sys/kernel/debug/dynamic_debug/control

3.4 启用某个函数的调试信息

除了文件级别的控制外,还可以对特定函数进行控制。例如,要启用my_function函数的调试信息,可以使用如下命令:

bash 复制代码
echo 'func my_function +p' > /sys/kernel/debug/dynamic_debug/control

3.5 控制特定模块的调试信息

我们还可以按模块名称来控制调试信息,例如要启用my_module模块的调试信息:

bash 复制代码
echo 'module my_module +p' > /sys/kernel/debug/dynamic_debug/control

4. 示例应用

假设我们在调试一个网络驱动程序,名为net_driver.c。我们怀疑在数据包发送过程中出现了问题。为了更详细地了解发送过程中的各个步骤,我们可以在代码中添加pr_debug语句:

bash 复制代码
pr_debug("Packet sent: %s\n", packet_data);

然后,在系统运行时,我们可以启用这个文件的调试信息:

bash 复制代码
echo 'file net_driver.c +p' > /sys/kernel/debug/dynamic_debug/control

这样,系统会在发送数据包时打印详细的信息,帮助我们定位问题。

5. 小结

Dynamic debug是一种非常强大的调试工具,能够在系统运行时灵活控制调试信息的输出。通过合理使用Dynamic debug,可以大大提高调试效率,快速定位和解决问题。希望大家能够掌握这一工具,并在实际工作中灵活运用。

相关推荐
learning_tom4 小时前
HTML图片标签及路径详解
linux·服务器·php
dbdr09014 小时前
Linux 入门到精通,真的不用背命令!零基础小白靠「场景化学习法」,3 个月拿下运维 offer,第二十六天
linux·运维·服务器·网络·python·学习
大白的编程日记.5 小时前
【Linux学习笔记】信号的深入理解之软件条件产生信号
linux·笔记·学习
buyutang_5 小时前
C/C++ Linux系统编程:线程控制详解,从线程创建到线程终止
linux·c语言·c++·学习
云的牧人5 小时前
Ubuntu 22 redis集群搭建
linux·运维·ubuntu
siriuuus5 小时前
Linux 磁盘扩容及分区相关操作实践
linux·运维·服务器
To_再飞行5 小时前
K8s 存储配置资源
linux·云原生·容器·kubernetes
小猪写代码6 小时前
Ubuntu 文件权限管理
linux·ubuntu
jz_ddk6 小时前
[Linux] Linux标准块设备驱动详解:从原理到实现
linux·运维·服务器·驱动开发
Gss7776 小时前
ansible变量+管理机密
linux·运维·ansible