DRM内核代码分析之一
时间:2009-06-15 来源:tbfly
主要分析内核2.6.30. 写下来,主要为了敦促自己分析下去.今天当一个开始吧.
1. 首先建立代码阅读方式
http://cscope.sourceforge.net/cscope_vim_tutorial.html
http://cscope.sourceforge.net/large_projects.html
建立x86的代码目录, 这样可便利找到所针对的CPU架构的代码.
2. 从Makefile与Kconfig文件开始
2.6.26之前内核中,drm内核模块在 drivers/char/drm目录. 2.6.27以后在 drivers/gpu/drm.也许是为了特出对gpu显示处理单元的重要性吧.
3. 第一级Makefile文件内容
obj-y += drm/
很简单,意味着这个文件夹里部分内容默认会编译.
4. 第二级Makefile文件内容
对应各家显卡厂商的显卡驱动,绝大部分我们不需要关注. 我自己的本本配搭的是GM965,只要关注i915文件夹就可以.
似乎默认编译的文件比较多,到include文件夹碰碰运气.
include/drm/Kbuild
似乎没有啥帮助. 几个月之前,KMS还没引入的时候,drm内的文件要少许多;甚至GEM也不存在.不过,要分析要趁早,不然AMD/ATI的TTM也进内核了就更麻烦了:-)
接下来,有几条思路.
A. 从drm内核模块的初始化看接口调用关系. grub i915.modeset=1的解析等等.
B. 从ioctl看看libdrm是如何调用内核接口的吧.
1. 首先建立代码阅读方式
http://cscope.sourceforge.net/cscope_vim_tutorial.html
http://cscope.sourceforge.net/large_projects.html
建立x86的代码目录, 这样可便利找到所针对的CPU架构的代码.
2. 从Makefile与Kconfig文件开始
2.6.26之前内核中,drm内核模块在 drivers/char/drm目录. 2.6.27以后在 drivers/gpu/drm.也许是为了特出对gpu显示处理单元的重要性吧.
drivers/gpu/Makefile drivers/gpu/drm/Makefile drivers/gpu/drm/Kconfig |
3. 第一级Makefile文件内容
obj-y += drm/
很简单,意味着这个文件夹里部分内容默认会编译.
4. 第二级Makefile文件内容
# # Makefile for the drm device driver. This driver provides support for the # Direct Rendering Infrastructure (DRI) in XFree86 4.1.0 and higher. ccflags-y := -Iinclude/drm drm-y := drm_auth.o drm_bufs.o drm_cache.o \ drm_context.o drm_dma.o drm_drawable.o \ drm_drv.o drm_fops.o drm_gem.o drm_ioctl.o drm_irq.o \ drm_lock.o drm_memory.o drm_proc.o drm_stub.o drm_vm.o \ drm_agpsupport.o drm_scatter.o ati_pcigart.o drm_pci.o \ drm_sysfs.o drm_hashtab.o drm_sman.o drm_mm.o \ drm_crtc.o drm_crtc_helper.o drm_modes.o drm_edid.o \ drm_info.o drm_debugfs.o #默认编译的drm模块代码 drm-$(CONFIG_COMPAT) += drm_ioc32.o #兼任性ioctl接口 obj-$(CONFIG_DRM) += drm.o #对应Kconfig的 DRM选项 obj-$(CONFIG_DRM_TDFX) += tdfx/ #以下为设备相关驱动 对应 obj-$(CONFIG_DRM_R128) += r128/ obj-$(CONFIG_DRM_RADEON)+= radeon/ obj-$(CONFIG_DRM_MGA) += mga/ obj-$(CONFIG_DRM_I810) += i810/ obj-$(CONFIG_DRM_I830) += i830/ obj-$(CONFIG_DRM_I915) += i915/ obj-$(CONFIG_DRM_SIS) += sis/ obj-$(CONFIG_DRM_SAVAGE)+= savage/ obj-$(CONFIG_DRM_VIA) +=via/ |
对应各家显卡厂商的显卡驱动,绝大部分我们不需要关注. 我自己的本本配搭的是GM965,只要关注i915文件夹就可以.
似乎默认编译的文件比较多,到include文件夹碰碰运气.
include/drm/Kbuild
似乎没有啥帮助. 几个月之前,KMS还没引入的时候,drm内的文件要少许多;甚至GEM也不存在.不过,要分析要趁早,不然AMD/ATI的TTM也进内核了就更麻烦了:-)
接下来,有几条思路.
A. 从drm内核模块的初始化看接口调用关系. grub i915.modeset=1的解析等等.
B. 从ioctl看看libdrm是如何调用内核接口的吧.
相关阅读 更多 +