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

相关推荐
骑着蜗牛撵大象32735 分钟前
手写一个 HTTP 服务器:从 socket 到 epoll,Linux 上到底怎么把请求变成响应
linux·服务器·网络·http·epoll·socket编程·并发模型
程序员初一38 分钟前
我在 1C1G 的服务器上装了个桌面环境,然后用 VNC 连它,然后我后悔了
linux·ssh
星恒随风1 小时前
Linux Socket TCP编程(二):逐文件重构多进程、多线程与线程池服务器,深入fork、pthread_create、popen和std::bind
linux·服务器·笔记·学习·tcp/ip
晚风叙码1 小时前
Linux 进程概念(下):程序地址空间与虚拟内存
linux·服务器·算法
无足鸟ICT1 小时前
【RHCA+】影响Linux系统性能的因素
linux·运维·服务器
沫璃染墨2 小时前
从零入门计算机网络系列(十):HTTP协议进阶——从资源路径解析到状态码与请求头详解
linux·运维·服务器·网络·c++·http
小则又沐风a2 小时前
深入了解五种IO模型与非阻塞IO
linux
Sayai2 小时前
Ubuntu 开发环境搭建避坑(一):网卡 EEE 致 60% 周期性丢包,Realtek RTL8125 网络黑洞排查与修复
linux·运维·网络·ubuntu·性能优化
墨染天姬2 小时前
【linux 网络1】数据怎么进网卡到内核?
linux·运维·网络
崇子嵘2 小时前
上云方案硬件部分分析
linux