Posted tagged ‘ati’

开源的强大,Archlinux ATI R600 开源驱动安装

December 24, 2009

说起来,开源究竟有多强大谁也说不好,仅指与我相关的ATI显卡驱动一例。

ATI显卡驱动在Linux上真是要多Suck有多Suck,一般说来,闭源驱动的性能总归是要好一些,这也确实,闭源的驱动在BenchMark上的表现超过开源驱动,但是这不妨碍他Fuck itself。观感上的问题就是ATI的闭源驱动在窗口Resize的时候会有明显的延迟,CPU会刷的一下升上去,为此有人搞了一个补丁。但是这个补丁会带来显示的问题,在性能不如Compiz的Kwin上尤其明显,当然也不是说Compiz就没有这个问题,但是少。

其次,ATI只官方支持Ubuntu,这是什么意思呢?一旦Xorg或者Kernel更新了(这两个和驱动关系很大),ATI的驱动往往跟不上更新,为啥,因为Ubuntu没有使用新的版本的内核或者Xserver。Nvidia则不然,能在内核未发布的时候保证支持。这是态度问题啊……

Catalyst驱动到现在还没有支持Xorg 1.7,导致我等使用Archlinux的同学要么就等着不更新,要么就抛弃闭源驱动。不更新有很多麻烦,有可能有很多依赖的包都会出现问题,尤其是Archlinux这种滚动更新的发行版,长时间不更新会带来更多的麻烦。

说起来,这种时候大家的选择只有忍耐,或者投奔开源。这时我早早的就开始在网上寻找开源3d的支持。于是我发现了这个:http://aur.archlinux.org/packages.php?ID=28981

当时还尝试自己编译相关支持,但是失败……后来有人终于成功搞出来,不过那已经是很久之后的事情了。ATI的开源3d也确实牵动着众多用户的心,很多人都有关注,各个网站也有相关文章,主要关注的还是Phoronix上的新闻。

那时还曾经头脑发热想去参与开发,后来发现自己啥也不懂就作罢了……

列出历史上的几篇激动人心的文章:

AMD Releases R600/700 Programming Guide ATI发布了编程指南,这是走向开源的第一步,这样就不用苦苦逆向工程搞出来什么寄存器是干什么的,同时还能带来更好的性能。

Open-Source ATI R600/700 3D Driver Almost Working 这篇文章标志着开源驱动就要到来啦~

ATI R600/700 OSS 3D Driver Reaches Gears Milestone glxgears works!一个大家常用的benchmark

然后就是等待内核2.6.31,其实这时候我一直都还没尝试过开源驱动,其实是没有成功。当Xserver 1.7到来的时候,大局迫使我向开源驱动靠拢。这时候我编译了drm-next的radeon模块,终于看见了3d work,太感动了,太激动了……虽然渲染错误时常出现,但是我也坚定的向Catalyst说了fuck and goodbye!

说起来感觉内核发布得越来越快?2.6.32很快就到来了,这是声明有官方支持的r600/r700的3d,测试发现渲染错误依然,不过不用自己编译相关模块了,倒是不错。

期间也出现了一些问题,例如early load,为此我写了一个mkinitcpio的hook,发在了评论里,被别人拿走打包了radeon-initrd,确实可以尽量早的启动kms。

后来2.6.32.2内核会导致无法启动的错误,后来发现有人测试2.6.33rc1的内核很好使,于是我也下载自己搞了一通,最后发现没有firmware?!没办法,幸好我之前注意到了一个叫做radeon_ucode的包,于是装上,哇!没有渲染错误的KDE SC 4.4是多么美妙!

以下是相关流程:

安装kernel 2.6.33rc1,虽然kernel26-rc提供了这个包,但是没有firmware会导致非常不爽,幸好这个包写了被注释掉的拆包机制,于是拆成header,firmware和kernel三个包安装好。

安装libdrm,2.4.17版本就可以用,但是官方源的2.4.17-2已经去掉了radeon的支持,于是要么用2.4.17-1,要么自己重新编译一个。

glproto和dri2proto都可以直接用。

安装mesa,由于我一直有关注mesa的git,于是我发现mesa 7.7的提交记录可以满足我的需求,又不用时常抓git的新代码,于是从mesa 7.6的pkgbuild改了一个新的,编译完成,需要注意的是其中一个补丁不能再用在mesa 7.7上,从mesa-split里面抓出来一个覆盖是个很好的选择。

安装xf86-video-ati-git,必须装个git版,自己编了一个,挺好使。

radeon_ucode,其实就下载三个文件,必须装上,否则无法加载。

如果出了问题,可以采用reisub大法,或者在grub当中加入nomodeset禁用KMS。

体验开源驱动的强大吧!

Advertisements