使用GDK7调试Linux内核之观察i915

编程入门 行业动态 更新时间:2024-10-27 22:20:33

使用GDK7调试Linux<a href=https://www.elefans.com/category/jswz/34/1769575.html style=内核之观察i915"/>

使用GDK7调试Linux内核之观察i915

1. i915与DRM的介绍

1.1 i915

i915可以分成两类;一类是内核态空间下的i915,另一类是用户态空间下的i915。

  • 内核态空间下的i915是英特尔显卡的内核驱动程序。用户态空间下的i915是基于英特尔显卡的mesa实现的。
  • mesa是基于开源的OpenGL实现的。

1.2 DRM

DRM的全称是Direct Rendering Manager,它是Linux内核中的子系统;DRM用于将用户态空间下的进程与GPU进行连接。

  • 用户态空间下的进程通过DRM给出API与GPU进行通信,用户态下的进程可以通过该API发送命令及数据给GPU、命令GPU做3D渲染的硬件加速及GPU计算等工作。
  • DRM首先是作为X server内核态空间中的组件,但也可以被其他图形堆栈使用。

2. 调试的准备工作

2.1 中断Ubuntu系统的GDK7

参见文章。

2.2. 符号文件的确认

参考文章。

2.3. 符号文件及内核源代码的加载

参考文章。

l  需要加载的内核模块符号文件:i915.ko。

3. 观察i915

1.      在命令行内输入lm l,确认需要的符号文件已经加载,如图3.1所示。

图3.1 确认需要的符号文件已经加载

2.      在命令行内输入x i915!*flush_render,查看函数flush_render的信息,如图3.2所示。

图3.2 查看函数flush_render的信息

3.      在命令行内输入bp ffffffff`c07b16b0,给函数flush_render设置断点,如图3.3所示。

图3.3 给函数flush_render设置断点

4.      恢复GDK7,等待断点命中,断点命中后会自动打开函数所在文件,如图3.4所示。

 

图3.4 命中断点ffffffff`c07b16b0

5.      在命令行内输入lm l,查看已经加载的模块,如图3.5所示。

图3.5 查看已经加载的模块

6.      在命令行内输入k L,查看堆栈,同时发现DRM模块已经自动载入,如图3.6所示。

图3.6 查看堆栈并发现drm模块自动载入

7.      在命令行内输入dv,查看变量,如图3.7 所示。

图3.7 查看变量

8.      在命令行内输入dc及ddp,查看内存及被引用的内存,如图3.8所示。

图3.8 查看内存及被引用的内存

9.      开始单步调试,观察内存地址的变化及汇编指令的信息,当单步调试执行到i915!gen8_emit_flush_render+0x10处时,文件i915_drv.h自动打开,如图3.9所示。

图3.9 文件i915_drv.h自动打开

10.    在命令行内输入dc及ddp,查看内存及被引用的内存,如图3.10所示。

图3.10 查看内存及被引用的内存

11.    在命令行内输入dv,查看变量,发现变量mode的数值从1变到了2,如图3.11所示。

图3.11 变量mode数值改变

其他说明

若您有问题咨询及出现链接失效等其他情况请联系邮箱:birdring_001@outlook。

更多推荐

使用GDK7调试Linux内核之观察i915

本文发布于:2024-02-12 18:07:47,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1688846.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:内核   Linux

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!