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

相关推荐
前进的程序员29 分钟前
Linux 移植 Docker 详解
linux·运维·docker
散着步的码农35 分钟前
RustDesk CentOS自建中继节点
linux·centos
瀚高PG实验室37 分钟前
hghac集群服务器时间同步(chrony同步)
linux·运维·服务器
huangyuchi.40 分钟前
【Linux】初见,基础指令
linux·运维·服务器·笔记·开发工具·指令·基础指令
huangyuchi.1 小时前
【Linux】初见,基础指令(续)
linux·运维·服务器·开发语言·笔记·指令·linux指令
Eric.Lee20211 小时前
ROS2 pkg 创建功能包
java·linux·开发语言
OneT1me1 小时前
SN生成流水号并且打乱
java·linux·前端
nuclear20111 小时前
Python操作PDF书签详解 - 添加、修改、提取和删除
linux·开发语言·python
大得3691 小时前
liunx定时任务,centos定时任务
linux·运维·centos
zzxxlty1 小时前
Windows Ubuntu 目录映射关系
linux·windows·ubuntu