上一篇介绍了“GDK7+NanoCode调试学习系列2--调试Linux内核之中断printk(vprtink_func)”(https://blog.csdn.net/henly1217/article/details/107662054);

本篇继续学习,将尝试使用NanoCode来中断Linux驱动i915,配合i915的符号和源代码来中断相关函数。

本调试目标机Linux内核版本为5.3.0-62-generic

准备工作:

1. 上一篇已经介绍了如何下载对应版本Linux的符号和源码(如何没有下载,请参考上一篇步骤);

2. 假设已经下载完Linux符号和源码(请参考上一篇步骤);

3. 复制Linux源码和符号到主机目录(请参考上一篇步骤);

4. 复制drm.ko和i915.ko到主机目录,和Linu符号同目录(c:\temp),drm.ko和i915.ko分别为:/usr/lib/debug/lib/modules/5.3.0-62-generic/kernel/drivers/gpu/drm/drm.ko和/usr/lib/debug/lib/modules/5.3.0-62-generic/kernel/drivers/gpu/drm/i915/i915.ko。

GDK7+NanoCode调试学习系列3--中断Linux驱动i915.ko

开始调试:

1. 启动NanoCode, 选择内核调试,等待“break”按钮变亮,并中断目标Ubuntu系统,可参中断Ubuntu(https://blog.csdn.net/henly1217/article/details/107657070#t8);

GDK7+NanoCode调试学习系列3--中断Linux驱动i915.ko

GDK7+NanoCode调试学习系列3--中断Linux驱动i915.ko

GDK7+NanoCode调试学习系列3--中断Linux驱动i915.ko

2. 中断下来之后,开始执行指令:

.sympath+ c:\temp // 添加符号路径

.srcpath+ d:\linux-src\linux-source-5.3.0 // 添加源码路径

GDK7+NanoCode调试学习系列3--中断Linux驱动i915.ko

.reload // 重新加载

3. .reload之后,执行lm l可以看来vmlinux内核符号已经加载。reload不会自动加载所有的符号,一般都是延时加载,或者说自动加载当前堆栈的模块。因为当前模块肯定有vmlinux,所以vmlinux被自动加载了。

4. 同时,源码文件也被自动打开了。

GDK7+NanoCode调试学习系列3--中断Linux驱动i915.ko

5. 此时,我们可以通过x命令来查找i915的符号了,这样i915的符号会被加载了。

x i915!*flush_render // 通配查找*flush_render函数

bp ffffffff`c04a4330 // 下断点

bl // 列出断点

lm l // 查看加载的模块

GDK7+NanoCode调试学习系列3--中断Linux驱动i915.ko

6. 断点已经设置成功,执行g重新跑起来,很快会被断点中断下来,同时源码也自动打开了。

GDK7+NanoCode调试学习系列3--中断Linux驱动i915.ko

使用kL查看当前调用堆栈,drm的符号也自动加载了。

GDK7+NanoCode调试学习系列3--中断Linux驱动i915.ko

7. 此时,可以使用其他命令来调试了~~~

 

总结:

1. 中断i915函数

2. 待续。。。

相关文章:

  • 2021-07-02
  • 2022-12-23
  • 2021-09-24
  • 2022-12-23
  • 2022-12-23
  • 2022-02-07
  • 2021-10-09
猜你喜欢
  • 2021-12-05
  • 2021-07-16
  • 2021-05-04
  • 2022-12-23
  • 2022-12-23
  • 2021-06-07
  • 2022-12-23
相关资源
相似解决方案