-
-
[原创]使用GDK7调试Linux内核之观察i915
-
发表于: 2021-7-13 17:18 5366
-
i915可以分成两类;一类是内核态空间下的i915,另一类是用户态空间下的i915。
内核态空间下的i915是英特尔显卡的内核驱动程序。用户态空间下的i915是基于英特尔显卡的mesa实现的。
mesa是基于开源的OpenGL实现的。
DRM的全称是Direct Rendering Manager,它是Linux内核中的子系统;DRM用于将用户态空间下的进程与GPU进行连接。
l 用户态空间下的进程通过DRM给出API与GPU进行通信,用户态下的进程可以通过该API发送命令及数据给GPU、命令GPU做3D渲染的硬件加速及GPU计算等工作。
l DRM首先是作为X server内核态空间中的组件,但也可以被其他图形堆栈使用。
参见文章https://blog.csdn.net/birdring_0xx0/article/details/118675228。
参考文章https://blog.csdn.net/birdring_0xx0/article/details/118674698。
参考文章https://blog.csdn.net/birdring_0xx0/article/details/118675731。
需要加载的内核模块符号文件:i915.ko。
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 查看已经加载的模块
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课