ATI (简体中文)

From ArchWiki
Jump to navigation Jump to search


Template:I18n links start

Template:I18n entry Template:I18n entry Template:I18n entry

Template:I18n links end

概述

ATI用户有两种驱动可选。如果你不确定该用哪种,请先试一试开源版的。开源驱动能满足大多数的需要,而且,一般来说遇到的麻烦也更少些。

ATI的官方专属驱动自7.10(8.42.3)版开始支持AIGLX(虽然还有bug)。现在,要使用Compiz Fusion或者Compiz这些带有composite功能的管理器,你既可以使用开源驱动,也可以使用官方专属版本。目前,开源驱动在性能上不及官方专属版本,也缺乏双通道DVI(dual-link DVI)之类的功能。但另一方面,它能更好地支持双头显示(dual-head)。

开源ATI驱动

开源ATI驱动有两种,xf86-video-atixf86-video-radeonhd.

xf86-video-ati支持几乎所有的ATI显卡,包括最新的HD系列显卡。R500以及以下显卡支持完整稳定的3D,2D加速,R600以及R700(HD2400-HD4870)在内核2.6.30以及新的mesa支持下支持2D和3D加速,但是因为刚刚支持不久,可能效率不高。完整的支持情况:here。但是,它支持DRI1, RandR 1.2/1.3, EXA渲染Kernel-Mode-Setting/DRI2(kernel 2.6.31,libdrm 2.4.12,mesa 7.6)。

HDMI的支持将通过AtomBIOS被xf86-video-ati支持。

xf86-video-radeonhd是专为ATI R500芯片(Radeon X1000 series)和更新显卡而写的。这个驱动是Novell根据AMD发布的驱动文档重写的。它支持RandR 1.2但仍然很多东西仍在开发。如果硬件支持,驱动还支持HDMI声音输出。

安装与配置

要安装的软件包是xf86-video-ati注意:如果你之前安装过私有驱动,请确认卸载catalystcatalyst-utils

安装xf86-video-ati

pacman -S xf86-video-ati

注意:下面不额外说明,则都是以xf86-video-ati为标准

安装xf86-video-radeonhd

pacman -S xf86-video-radeonhd

git版本的驱动可以在AUR里面找到,可能提供更新的功能以及更多显卡的支持,但是可能不稳定。

在新版的xorg支持下,完全可以不用配置xorg.conf,只要你开启了hal服务,安装了xf86-input-evdev等xorg驱动,Xorg会自动帮你完成硬件识别等工作。

或者你想自定义你硬件的工作参数等,就需要用到xorg.conf,一般默认就可以得到很好的效果了。

编辑xorg.conf,下面是一个简单但是完全可以正常工作的样本,更详细请看man radeon:

Section "ServerLayout"				# 这里你需要配置什么就写什么,我需要定义显卡参数,就添加一个Screen行

Identifier "Xorg Configured" # 这个Layout的名称 Screen 0 "screen0" 0 0 # 定义你使用的名字叫screen0的Screen,下面一定要有定义 EndSection

Section "Device" Identifier "x700" # 定义名称叫"X700"的设备(Device),因为下面有用到 Driver "radeon" # 使用radeon驱动,完全可以不要 VendorName "ATI Technologies Inc" BoardName "ATI Mobility Radeon X700"

  1. Option "BackingStore" "on" # 不知道有什么作用

Option "DynamicClocks" "on" # 部分显卡开启动态调整频率 Option "EnablePageFlip" "on" # 提高性能

  1. Option "FBTexPercent" "50" # 默认如此

EndSection

Section "Screen" Identifier "screen0" Device "x700" # 使用名字叫"X700“的设备,上面有定义 DefaultDepth 24 # 默认使用的色深,可以不写 SubSection "Display" # 这里可以定义分辨率,当KMS启用后,这里可能失效 Viewport 0 0 # 自动识别分辨率,有这一行下面两行失效 # Depth 24 # 定义这里调整色深24的时候模式 # Modes "1280x800" # 分辨率为1280x800,去掉前面的"#"号,删除Viewport行生效 EndSubSection EndSection

使用这一驱动时,请确认你安装了libgl-dri而不是catalyst-utils。否则,错误的libGL.so将导致直接加速(direct rendering)无法工作。

性能调整

下面这些选项属于Section "Device":

       Option "AGPMode" ""

默认为"未定义"。所以有这个定义的最好删除,哪怕你定义成8说不定效率都不如留空

       Option "ColorTiling" "on"

默认开启。打开ColorTiling是绝对安全的,并且这被认为是默认的设置。人们注意到,通过xorg.conf来开启它,性能会有所提高。

       Option "AccelMethod" "EXA"

默认如此,定义加速方式(Acceleration architecture),最好不要修改。

       Option "EnablePageFlip" "on" 

默认未开启,开启Page Flip一般是安全的,同时也会禁用EXA,因此大多用在比较老的显卡上。新版驱动可以使之与EXA共存。

       Option "AGPFastWrite" "yes"

这一选项可以打开fast writes。很可能会出问题,比如造成X死锁,所以做好删除它的准备,如果你到时进不了X的话。

要了解更多的配置选项请阅读manpage

man radeon

driconf是一款很不错的工具,值得一试。它让你能修改一些设定,比如vsync,anisotropic,texture compression等等。有些程序(比如Google Earth )要求“disable Low Impact fallback",使用driconf可以做到这一点。

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)设置中的自动切换

HDMI输出声音

如果你硬件支持,而且安装的驱动为xf86-video-radeonhd (xf86-video-ati将很快有HDMI支持),你就可以按照下面修改xorg.conf

Section "Device"
  # ...
  Option "Audio" "on"
  Option "HDMI" "all"
EndSection

重启X,看是否有效。

  1. Connect your PC to the TV via HDMI cable (duh).
  2. Use xrandr to get picture to the TV. Ex: xrandr --output DVI-D_1 --mode 1280x768 --right-of PANEL. Simply typing xrandr will give you a list of your valid outputs.
  3. Run aplay -l to get the list of your sound devices. Find HDMI and note the card number and corresponding device number. Example of what you want to see: card 1: HDMI [HDA ATI HDMI], device 3: ATI HDMI [ATI HDMI]
  4. Try sending sound to this device: aplay -D plughw:1,3 /usr/share/sounds/alsa/Front_Center.wav. Be sure to change plughw:z,y to match your hardware number found with last command. You should be able to hear the test sound from your TV.

ATI官方驱动:Catalyst

ATI的私有驱动曾被称为fglrx,现在ATI将其重新命名为Catalyst。目前,改变的只是软件包的名字,内核模块依然保留着它原有的名字fglrx,因此下面提到的任何“fglrx"都特指内核模块,而不是软件包

支持的设备

访问ATI Catalyst 8.8 (Linux) Release Notes,查看支持的显卡列表

安装

自Xorg 7发布以来,Arch在extra软件仓库中提供预编译的catalyst软件包。如果你使用core或者extra中提供的内核,那么安装过程将会很简单。如果你使用定制的内核,那么你将需要一些额外的步骤。

普通内核

kernel26

安装kernel26的fglrx驱动,你需要catalyst软件包。

# pacman -S catalyst

这个软件包只包含内核模块,同时还要安装catalyst-utils作为依赖。catalyst-utils独立于内核,同时为Xorg提供库和实用程序,其中也包含了ATI自己的libGL.so

自己编译的内核

为定制的内核安装catalyst,你需要为你的内核编译专门的模块,并创建自己的catalyst-$kernel软件包。

如果你缺乏制作软件包的经验,首先阅读wiki中关于ABS的页面,这会使你接下来的工作更顺利。

获取PKGBUILD

可以通过下面的两种方式从CVS或ABS中获取PKGBUILDfglrx.install文件

  • 访问http://archlinux.org/packages/search/?q=catalyst 找到你系统类型,进入并点击“View CVS Entries“
  • 以root身份运行abs,然后到var/abs/extra/modules/fglrx中寻找这些文件

编辑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

注意

  • 如果你使用仓库的多个内核,记得给每个内核都装上相应的catalyst模块。它们不会互相冲突。
  • 不需要改动catalyst-utils,它是独立于内核的。你需要做的只是编译一个内核模块。

ATI/AMD安装程序

安装

警告:不推荐使用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

配置

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 相比较。

确保你的"Screen"章节含有"DefaultDepth 24"并且有包含"Mode 666"的"DRI"章节。fglrx需要这些,否则重启或者注销后可能无法使用图形界面。另外,最新的Xorg可以自动选择和调整X选项,你不必在xorg.conf里面写非常多的内容。以前为xorg写的配置内容可能多余了。

下面这个例子就可以正常工作了

Section "ServerLayout"
	Identifier     "X.org Configured"
	Screen      0  "Screen0" 0 0
	InputDevice    "Mouse0" "CorePointer"
	InputDevice    "Keyboard0" "CoreKeyboard"
EndSection
 
Section "Files"
	RgbPath      "/usr/share/X11/rgb"
	ModulePath   "/usr/lib/xorg/modules"
	FontPath     "/usr/share/fonts/misc"
	FontPath     "/usr/share/fonts/100dpi:unscaled"
	FontPath     "/usr/share/fonts/75dpi:unscaled"
	FontPath     "/usr/share/fonts/TTF"
	FontPath     "/usr/share/fonts/Type1"
EndSection
 
Section "Module"
	Load  "extmod"
	Load  "dbe"
	Load  "xtrap"
	Load  "record"
	Load  "dri"
	Load  "glx"
	Load  "GLcore"
	Load  "freetype"
EndSection
 
Section "InputDevice"
	Identifier  "Keyboard0"
	Driver      "kbd"
EndSection
 
Section "InputDevice"
	Identifier  "Mouse0"
	Driver      "mouse"
	Option	    "Protocol" "auto"
	Option	    "Device" "/dev/input/mice"
	Option	    "ZAxisMapping" "4 5 6 7"
EndSection
 
Section "Monitor"
	Identifier   "Monitor0"
	VendorName   "Monitor Vendor"
	ModelName    "Monitor Model"
EndSection
 
Section "Device"
	Identifier  "Card0"
	Driver      "fglrx"
	VendorName  "ATI Technologies Inc"
	BoardName   "Radeon Mobility X1400"
	BusID       "PCI:1:0:0"
EndSection
 
Section "Screen"
	Identifier "Screen0"
	Device     "Card0"
	Monitor    "Monitor0"
	DefaultDepth	24
	SubSection "Display"
		Viewport   0 0
		Depth     24
	EndSubSection
EndSection
 
Section "DRI"
	Mode 0666
EndSection

接下来,确定模块fglrx、以及相关需要的模块agp等被加载:

# modprobe fglrx 

把他们加到/etc/rc.conf的modules列表,使它们在系统启动时就加载。

最后,运行startx来启动Xorg,确认direct rendering是否已经打开。在终端输入:

$ glxinfo | grep direct

如果显示为"direct rendering: yes",恭喜,你成功了!如果提示找不到glxinfo,你可能还需要安装软件包mesa。

注意:Xorg近期的版本,libs的路径变了,所以有时libGL.so可能没被正确加载(即使已经安装了)。此时别忘了修正路径。 Please read "trouble shooting" section for detail.

已知问题及解决

OpenGL程序支离破碎

这个bug已经在8.9版本里面修复了。 OpenGL programs like e.g. blender in windowed mode, show a rectangle/checkerbox corruption. 这个可以通过使用虚拟显示来解决。只要设置虚拟大小为你的显示器横向大小加上64就可以了 例如,你的显示器是1600x1200分辨率,那么用1664替代1600

 Section "Screen"
   Identifier "Screen0"
   Device     "Card0"
   Monitor    "Monitor0"
   SubSection "Display"
     Depth     24
     Virtual 1664 1200
   EndSubSection
 EndSection

重启或者startx之后黑屏并且系统完全挂起或者锁死

这个bug已经上报了,请使用一个能引导的Live CD之类的光盘引导你的电脑,如ubuntu live cd,arch的安装光盘或者安装程序

  1. 重启并且用光盘引导电脑。
  2. 挂载你的系统分区,如你的系统分区在sda5,需要挂载到/mnt,那么就mount /dev/sda5 /mnt。
  3. 查看/var/log/Xorg.0.log,主要是看里面以(EE)开头的内容。可以使用如下命令,grep -e EE /mnt/var/log/Xorg.0.log。
  4. 搜索解决出现的问题。
  5. 重启并且取出光盘,启动你的Archlinux,测试xorg.conf是否正常。
  6. 如果仍然有问题,那么就修改xorg.conf里面驱动fglrx为mesa或者ati或者radeon,至少这样能让你进入图形界面,虽然没有3D加速了。

注销后KDM消失

如果你使用catalyst驱动,并且系统在注销以后自动回到控制台(vc/1),而不是正常时的KDM,你需要命令KDM在每次注销后重新启动X server:

$ sudo vim /opt/kde/share/config/kdm/kdmrc

在[X-*-Core]区段中加入:

TerminateServer=True

现在当你从KDE注销以后,应该可以看到KDM了。

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

休眠相关

无法进入待机/休眠状态

想利用休眠脚本进入待机状态时,如果fglrx返回了错误信息,可以这样解决:在/etc/X11/xorg.conf的"Device" section中加入下面的选项,这一选项将允许fglrx模块进入待机状态。

Option      "UseInternalAGPGart" "no"

无法从待机状态返回

如果你打开了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

硬件冲突

在某些版本的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

Compaq Presario笔记本电脑

即使安装了所需的驱动和配置文件,某些笔记本(比如装有Xpress 200M的Presario R4000 )仍然只给你一个空荡荡的屏幕。 问题似乎出在内核没有检测到正确的显存信息(即使你只有128M的显存,lspci -v也总是报告为256M)。修改BIOS的选项,使用"SidePort+UMA" ,让128M的显存加上128M的系统内存,这一方法看起来很管用。

这可能是BIOS或Linux PCI代码的bug。

外部资源

这里可以找到更多信息