Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3475967
  • 博文数量: 1805
  • 博客积分: 135
  • 博客等级: 入伍新兵
  • 技术积分: 3345
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-19 20:01
文章分类

全部博文(1805)

文章存档

2017年(19)

2016年(80)

2015年(341)

2014年(438)

2013年(349)

2012年(332)

2011年(248)

分类: LINUX

2016-03-31 13:47:37

原文地址:DRM内核代码分析之四 作者:tbfly

   从此,就要开始辗转与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等几层关系入手。套用俗套的话就是,“一个系统的工程”。

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

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