Chinaunix首页 | 论坛 | 博客
  • 博客访问: 242752
  • 博文数量: 72
  • 博客积分: 2592
  • 博客等级: 少校
  • 技术积分: 834
  • 用 户 组: 普通用户
  • 注册时间: 2005-04-28 00:16
文章分类

全部博文(72)

文章存档

2014年(1)

2012年(1)

2011年(6)

2010年(12)

2009年(19)

2008年(28)

2007年(4)

2005年(1)

我的朋友

分类: LINUX

2009-07-05 20:00:53

   从此,就要开始辗转与xf86-video-intel,drm与linux-2.6.30的代码中间。就像三位一体一样。实际上跳转的时候还是三体。幸好有vim+ctags+cscope的帮助!

   Intel 2D X Driver直接调用libdrm的接口,后者再通过ioctl,call到内核态的函数。本来,
是没有这么麻烦的。drm的linux-core部分,就是对应的内核态的代码。但是,自从i965要支持GEM以后,linux-core的代码与kernel/gpu/drm的就不同步了。后来,intel的i915 drm代码就干脆直接放到kernel里面了。最开始的分支名称是drm-gem。

   举个例子,i830_bind_memory函数调用到dri_bo_pin,dri_bo_pin就是libdrm里定义的,
 #define dri_bo_pin drm_intel_bo_pin

drm_intel_bo_pin,再调用到buffer object的内存管理器的相应接口。bo->bufmgr->bo_pin。

对GEM的内存管理器,其初始化为drm_intel_bufmgr_gem_init函数。
 bufmgr_gem->bufmgr.bo_pin = drm_intel_gem_bo_pin;

drm_intel_gem_bo_pin再调用ioctl,由内核完成相应的工作。

还有许多许多的函数回调,大都是这样的路子。

说到底,DRM内核代码的分析要不流于表面,还是得从2D X driver+ libdrm + kernel,还有Mesa3D i965 Dri + libdrm + kernel等几层关系入手。套用俗套的话就是,“一个系统的工程”。

学的就是架构,整个体系的建立。流于枝节,实际没有领会神髓。

阅读(5878) | 评论(1) | 转发(1) |
给主人留下些什么吧!~~

_friday_2015-10-20 15:23:49

大赞,一直理不清里面的关系,看了博主的DRM内核源码之后,有了一个模糊的框架。