6.8.9 配置内核支持DRM

如果读者是在真实机器上调试的,那么为了使GPU的2D驱动和3D驱动都可以正常工作,内核中还需要进行相关的配置,因为用户空间的GPU驱动是通过内核中的DRM访问GPU的。GPU用户空间的驱动(2D和3D驱动)和内核空间的驱动(DRM模块)之间的关系如图6-22所示。

6.8.9 配置内核支持DRM - 图1

图 6-22 GPU驱动各部分间的关系

在本节中,我们以Intel的GPU为例来讨论内核中关于GPU的相关配置。Intel的GPU使用了AGP局部总线,所以在配置GPU的DRM模块前,需要首先配置内核支持AGP总线。

(1)配置AGP总线

配置AGP总线的步骤如下:

1)执行make menuconfig,出现如图6-23所示的界面。

6.8.9 配置内核支持DRM - 图2

图 6-23 配置AGP总线(1)

2)在图6-23中,选择"Device Drivers",出现如图6-24所示的界面。

6.8.9 配置内核支持DRM - 图3

图 6-24 配置AGP总线(2)

3)在图6-24中,选择"Graphics support",出现如图6-25所示的界面。

6.8.9 配置内核支持DRM - 图4

图 6-25 配置AGP总线(3)

4)在图6-25中,选中"/dev/agpgart(AGP Support)",出现如图6-26所示的界面。

6.8.9 配置内核支持DRM - 图5

图 6-26 配置AGP(4)

5)在图6-26中,选中"Intel 440LX/BX/GX,I8xx and E7x05 chipset support"。AGP总线配置完毕。

(2)配置DRM模块

配置DRM的前两步与图6-23和6-24完全相同,在图6-24所示的界面选择"Graphics support"后,将出现如图6-27所示的界面。

6.8.9 配置内核支持DRM - 图6

图 6-27 配置内核支持DRM

在图6-27中,首先选中"Direct Rendering Manager",表示需要内核支持DRM,这是DRM的通用部分。然后还要选中驱动具体GPU的模块,比如适合笔者测试机器的DRM模块为"Intel 8xx/9xx/G3x/G4x/HD Graphics",并且要勾选其下的子选项"Enable modesetting on intel by default",这个特性就是所谓的KMS(Kernel Mode Setting)。对于Intel的GPU,这是必须要选择的,否则用户空间的2D和3D驱动可能都会遇到麻烦。

一切配置好后,那么如何确定我们的配置是正确的,并且已经生效呢?我们可以按如下方法验证。

验证2D驱动

可以通过查看X的日志文件确认GPU的2D驱动是否已经被正确加载。比如在笔者使用的另外一台真实测试机上,Intel的2D驱动成功加载后输出的初始化信息如下:

6.8.9 配置内核支持DRM - 图7

验证3D驱动

可以使用Mesa提供的工具,如glxinfo,查看GPU的3D驱动是否已经正确加载。读者可以从Mesa的网站下载并编译工具glxinfo,或者偷个懒,从宿主系统复制过来一个,只要版本差别不是特别大,一般都可以正常运行。可以远程登录,或者在测试机器的本地运行一个终端,使用glxinfo命令查看3D驱动是否已经正常工作:

6.8.9 配置内核支持DRM - 图8

再比如在笔者的宿主机上使用命令glxinfo查看,显示如下:

6.8.9 配置内核支持DRM - 图9

仔细观察glxinfo的输出,可以看到在3D渲染时,使用的是Intel GPU的3D驱动。如果是软件渲染,则输出类似如下:

6.8.9 配置内核支持DRM - 图10