- 论坛徽章:
- 0
|
主要分析内核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显示处理单元的重要性吧.
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是如何调用内核接口的吧.
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/6547/showart_1965408.html |
|