专栏文章目录传送门 :返回专栏目录
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,可以大大提高调试效率,快速定位和解决问题。希望大家能够掌握这一工具,并在实际工作中灵活运用。