ATI (简体中文)
From ArchWiki
| i18n |
|---|
| English |
| 简体中文 |
Contents |
[edit] 概述
ATI用户有两种驱动可选。如果你不确定该用哪种,请先试一试开源版的。开源驱动能满足大多数的需要,而且,一般来说遇到的麻烦也更少些。
ATI的私有驱动自7.10(8.42.3)版开始支持AIGLX(虽然还有bug)。现在,要使用Compiz Fusion或者Compiz这些带有composite功能的管理器,你既可以使用开源驱动,也可以使用私有的版本。目前,开源驱动在性能上不及私有版本,也缺乏双通道DVI(dual-link DVI)之类的功能。但另一方面,它能更好地支持双头显示(dual-head)。
[edit] 开源ATI驱动
开源驱动在Radeon X850以下的Radeon芯片组上能起到不同程度的效果。对Radeons 9200系列及其以下的显卡,它提供完备、稳定的支持以及完整的2D、3D加速。对Radeons 9500到X850的显卡,它提供完整的2D加速,也包括3D,但不像私有驱动那样支持所有的功能。你可以在这里找到一份完整的、被支持的芯片组列表。
[edit] 安装与配置
要安装的软件包是xf86-video-ati。注意:如果你之前安装过私有驱动,请确认卸载catalyst和catalyst-utils。
pacman -Syu xf86-video-ati libgl
编辑xorg.conf,在给出的Section中添加或确认有以下的内容:
Section "Module" Load "glx" Load "dri" Load "drm" EndSection
Section "Device" Identifier "name" # 你的显卡名称 Driver "radeon" Option "XAANoOffscreenPixmaps" "true" # aiglx需要这一项 EndSection
Section "DRI" Group "video" Mode 0666 EndSection
使用这一驱动时,请确认你安装了libgl-dri而不是catalyst-utils。否则,错误的libGL.so将导致直接加速(direct rendering)无法工作。
[edit] 性能调整
下面这些选项属于Section "Device":
Option "AGPMode" "4"
开源驱动被设计成在AGP 1x的速度下运行。一般来说,修改此速度是安全的。如果你发现哪里不正常,试着减小其值或者干脆把这一行删掉。
Option "ColorTiling" "on"
打开ColorTiling是绝对安全的,并且这被认为是默认的设置。人们注意到,通过xorg.conf来开启它,性能会有所提高。
Option "AccelMethod" "EXA"
加速方式(Acceleration architecture );只对较新的显卡有效。如果你打开它之后进不了X,删了吧。
Option "EnablePageFlip" "on"
开启Page Flip一般是安全的,同时也会禁用EXA,因此大多用在比较老的显卡上。新版驱动可以使之与EXA共存。
Option "AGPFastWrite" "yes"
这一选项可以打开fast writes。很可能会出问题,所以做好删除它的准备,如果你到时进不了X的话。
要了解更多的配置选项请阅读manpage
driconf是一款很不错的工具,值得一试。它让你能修改一些设定,比如vsync,anisotropic,texture compression等等。有些程序(比如Google Earth )要求“disable Low Impact fallback",使用driconf可以做到这一点。
[edit] TV输出(TV out)
自2007年8月起,所有集成了tv-out功能的Radeon显卡都有了驱动的tv-out支持。 目前tv-out还有一些局限:它对输出的自动识别并不总是正确,而且只支持NTSC制式。 不管怎样,它在我的Radeon 7000上工作地很棒。这里是我的方法:
首先,检查你的S端子输出:xrandr应该会给你类似如下的结果:
Screen 0: minimum 320x200, current 1024x768, maximum 1280x1200 ... S-video disconnected (normal left inverted right x axis y axis)
现在我们要告诉Xorg线已经插好了
xrandr --output S-video --set load_detection 1
设定TV制式标准
xrandr --output S-video --set tv_standard ntsc
为它添加一个分辨率(目前只支持800x600)
xrandr --addmode S-video 800x600
我打算使用复刻模式(clone mode)
xrandr --output S-video --same-as VGA-0
好了,让我们来看看效果吧
xrandr --output S-video --mode 800x600
这时,在电视上你应该能看到你的桌面,分辨率是800x600。
要关掉这一输出:
xrandr --output S-video --off
你可能还发现视频只在显示器上播放,而电视上没有。XV_CRTC属性控制着Xv overlay的输出方向。
把输出指向电视:
xvattr -a XV_CRTC -v 1
要切换回显示器,把1改成0。-1应用于双头显示(dual head)设置中的自动切换
[edit] ATI Catalyst驱动
ATI的私有驱动曾被称为fglrx,现在ATI将其重新命名为Catalyst。目前,改变的只是软件包的名字,内核模块依然保留着它原有的名字fglrx,因此下面提到的任何“fglrx"都特指内核模块,而不是软件包。
[edit] 支持的设备
访问ATI Catalyst 7.12 (Linux) Release Notes,查看支持的显卡列表
[edit] 安装
自Xorg 7发布以来,Arch在extra软件仓库中提供预编译的catalyst软件包。如果你使用core或者extra中提供的内核,那么安装过程将会很简单。如果你使用定制的内核,那么你将需要一些额外的步骤。
[edit] 普通内核
[edit] kernel26
安装kernel26的fglrx驱动,你需要catalyst软件包。
# pacman -S catalyst
这个软件包只包含内核模块,同时还要安装catalyst-utils作为依赖。catalyst-utils独立于内核,同时为Xorg提供库和实用程序,其中也包含了ATI自己的libGL.so。
[edit] 定制的内核
为定制的内核安装catalyst,你需要为你的内核编译专门的模块,并创建自己的catalyst-$kernel软件包。
如果你缺乏制作软件包的经验,首先阅读wiki中关于ABS的页面,这会使你接下来的工作更顺利。
[edit] 获取PKGBUILD
可以通过下面的两种方式从CVS或ABS中获取PKGBUILD和fglrx.install文件
- 访问http://www.archlinux.org/packages/12877/ 点击“View CVS Entries“
- 以root身份运行
abs,然后到var/abs/extra/modules/fglrx中寻找这些文件
[edit] 编辑PKGBUILD并创建软件包
这里需要作三处修改:
第一,把
pkgname=catalyst
改成
pkgname=catalyst-KERNEL_NAME
其中KERNEL_NAME可以是任何你想要的名字
第二, 从依赖列表(dependencies)中移除kernel26
第三, 把
_kernver=${_kernel_version}-ARCH
改成
_kernver=`uname -r`
(或者直接把使用你定制的内核时uname -r的输出结果填到那里)
最后,创建并安装软件包(makepkg -i或者makepkg然后pacman -A pkgname.pkg.tar.gz)
[edit] 注意
- 如果你使用仓库的多个内核,记得给每个内核都装上相应的catalyst模块。它们不会互相冲突。
- 不需要改动
catalyst-utils,它是独立于内核的。你需要做的只是编译一个内核模块。
[edit] ATI/AMD安装程序
[edit] 安装
警告:不推荐使用ati.com/amd.com的安装程序!
这样做会与各种pacman软件包发生文件冲突,同时也很可能造成X的运行失败。通过pacman获得的软件包是专门为Arch Linux配置的,建议你选择它们。
如果你已经尝试了用官方安装程序进行手动安装,并且发现电脑不再正常工作了,在/usr/share/ati里应该有一个卸载脚本,运行它,然后试一试pacman的软件包。
如果出于某种原因,你一定要使用ATI/AMD的安装程序,下面的步骤可能会对你有用:
- 下载ATI/AMD的驱动安装程序
- 给它可执行权限
- 安装mesa
#pacman -S mesa
- 如果需要的话,安装Xorg
- 检查ATI/AMD安装程序需要的其它包,这些包已在官方网站上列出。
#pacman -Q | grep NameOfPackage
- 按照接下来描述的方法用aticonfig更新xorg.conf
- 如果有需要,在xorg.conf里添加指向fglrx.so模块的ModulesPath
[edit] 配置
ATI提供了aticonfig来修改已存在的xorg.conf,配置显卡的各个方面。
查看aticonfig选项的完整列表,运行
$ aticonfig --help
如果你还没有xorg.conf,运行下面的命令来生成一个
# Xorg -configure
用aticonfig修改xorg.conf有一个最简单的方法。运行aticonfig,后面不要加任何命令行参数,在输出结果未尾的examples中你可以找到它。
Examples:
1. Setting up fglrx for the first time.
Single head : aticonfig --initial --input=/etc/X11/xorg.conf
Dual head : aticonfig --initial=dual-head --screen-layout=above
This command will generate a dual head configuration
file with the second screen located above the first
screen.
只要视实际情况调整两行中的一行来完成你的个人设置。
跟平常一样,最好还是亲眼检查一遍新的xorg.conf以保证文件的正确性。如果你愿意,你可以拿它与wiki中Xorg页面给出的Sample Xorg.conf files 相比较。
最后,运行startx来启动Xorg,确认direct rendering是否已经打开。在终端输入:
$ glxinfo | grep direct
如果显示为"direct rendering: yes",恭喜,你成功了!如果提示找不到glxinfo,你可能还需要安装mesa。
[edit] 已知问题及解决
[edit] 注销后KDM消失
如果你使用catalyst驱动,并且系统在注销以后自动回到控制台(vc/1),而不是正常时的KDM,你需要命令KDM在每次注销后重新启动X server:
$ sudo vim /opt/kde/share/config/kdm/kdmrc
在[X-*-Core]区段中加入:
TerminateServer=True
现在当你从KDE注销以后,应该可以看到KDM了。
[edit] Direct Rendering未开启
打不开Direct Rendering吗?运行:
$ LIBGL_DEBUG=verbose glxinfo > /dev/null
输出结果的开头部分通常会给出没有direct rendering的原因。
常见的错误信息和解决方法如下:
libGL error: XF86DRIQueryDirectRenderingCapable returned false
- 确认你在加载fglrx内核模块之前加载了正确的agp模块。运行hwdetect --show-agp来确定你所需的agp模块,然后确认所有这些模块都被列在rc.conf中的
MODULES=序列中,并且位于fglrx之前。
libGL error: failed to open DRM: Operation not permitted libGL error: reverting to (slow) indirect rendering
- 为解决这个问题,要确保你的xorg.conf中有以下的section:
Section "DRI"
Mode 0666
EndSection
libGL: OpenDriver: trying /usr/lib/xorg/modules/dri//fglrx_dri.so libGL error: dlopen /usr/lib/xorg/modules/dri//fglrx_dri.so failed (/usr/lib/xorg/modules/dri//fglrx_dri.so: cannot open shared object file: No such file or directory) libGL error: unable to find driver: fglrx_dri.so
- 如果错误信息给出的路径是/usr/X11R6/lib/modules/dri/fglrx_dri.so,先完全地从系统中注销,然后重新登陆。如果你使用图形化的登陆管理器(gdm, kdm, xdm),确认每次登陆时/etc/profile都被用作源。通常可以把/etc/profile作为源加入到~/.xsession或~/.xinitrc中,但设置方式也可能视不同登陆管理器而有所差别。
- 如果错误信息给出的路径是usr/lib/xorg/modules/dri/fglrx_dri.so,可能是有什么装错了。重装fglrx试试看。
fglrx: libGL version undetermined - OpenGL module is using glapi fallback
- 这可能是系统中有多个版本的libGL.so导致的。运行:
$ sudo updatedb $ locate libGL.so
应该会返回如下的结果:
$ locate libGL.so /usr/lib/libGL.so /usr/lib/libGL.so.1 /usr/lib/libGL.so.1.2 $
应该只有三个libGL.so,如果你还有别的(比如/usr/X11R6/lib/libGL.so.1.2)就把它们删掉。这样应该能修复你的问题。
也许没有什么错误指出这是一个问题,但如果你使用X11DR7,确保你的系统中没有下面这些文件:
/usr/X11R6/lib/libGL.so.1.2 /usr/X11R6/lib/libGL.so.1
[edit] 休眠相关
[edit] 无法进入待机/休眠状态
想利用休眠脚本进入待机状态时,如果fglrx返回了错误信息,可以这样解决:在/etc/X11/xorg.conf的"Device" section中加入下面的选项,这一选项将允许fglrx模块进入待机状态。
Option "UseInternalAGPGart" "no"
[edit] 无法从待机状态返回
如果你打开了framebuffer,catalyst驱动将不能从待机状态返回。若要关闭framebuffer,需在/boot/grub/menu.lst中添加vga=0的内核参数。比如:
# (0) Arch Linux title Arch Linux root (hd0,0) kernel /vmlinuz26 root=/dev/sda3 resume=/dev/sda2 ro vga=0 initrd /kernel26.img
[edit] 硬件冲突
在某些版本的nForce3主板上(比如nForce 3 250Gb),Radeon显卡没有3D加速。原因尚不明确,据说有一个办法可能让这一组合得到3D加速:用nVIDIA的驱动启动Windows,然后重启(--b)
可以这样来验证:
用root登陆,在控制台输入:
dmesg | grep agp
如果你得到类似的结果(这个是基于nForce3的系统)
agpgart: Detected AGP bridge 0
agpgart: Setting up Nforce3 AGP.
agpgart: aperture base > 4G
并且,如果发出这个命令……
tail -n 100 /var/log/Xorg.0.log | grep agp
得到类似的结果:
(EE) fglrx(0): [agp] unable to acquire AGP, error "xf86_ENODEV"
那就说明你遇到这个BUG了。
据说在某些情况下,降级主板的BIOS可能会有帮助,但这毕竟没有在所有的情况下都得到证实。而且,一次失败的BIOS降级有可能令你的硬件报废,所以请慎重行事。
更多关于这一bug的信息及可能的解决方法请看这里http://bugzilla.kernel.org/show_bug.cgi?id=6350
[edit] Compaq Presario笔记本电脑
即使安装了所需的驱动和配置文件,某些笔记本(比如装有Xpress 200M的Presario R4000 )仍然只给你一个空荡荡的屏幕。 问题似乎出在内核没有检测到正确的显存信息(即使你只有128M的显存,lspci -v也总是报告为256M)。修改BIOS的选项,使用"SidePort+UMA" ,让128M的显存加上128M的系统内存,这一方法看起来很管用。
这可能是BIOS或Linux PCI代码的bug。
[edit] 外部资源
这里可以找到更多信息