ATI (简体中文)

From ArchWiki
Revision as of 02:50, 18 February 2015 by Skysailing (talk | contribs) (add Cursor corruption after coming out of sleep)
Jump to navigation Jump to search
翻译状态: 本文是英文页面 ATI翻译,最后翻译时间:2015-02-18,点击这里可以查看翻译后英文页面的改动。

ATI/AMD显卡用户有两个选择:官方的专有驱动(catalystAUR)和开源驱动(xf86-video-ati)。本文介绍开源驱动.

目前,开源驱动在新显卡的 3D 性能上不及官方专属版本,也缺乏TV输出等功能。但另一方面,它能更好地支持双显示,优秀的2D加速,为基于 OpenGL 的窗口管理器Compiz 或 KWin 提供了足够的 3D 加速。

如果你不确定该用哪种,请先试一试开源版的。开源驱动能满足大多数的需要,而且,一般来说遇到的麻烦也更少些。查看现在功能开发进展情况可访问 功能矩阵

命名规范

Radeon品牌遵循这样的命名规则:每个产品关联与某个市场分段.这篇文章中读者将会见到产品名(比如 HD 4850, X1900)与代码或者核心名(比如 RV770, R580). 传统地, 一个产品系列将匹配一个核心系列 (比如产品系列 "X1000" 包含 X1300, X1600, X1800, 和 X1900 ,他们的核心系列是"R500" – 包含 RV515, RV530, R520, 和 R580 核心).

具体对应关系可以查看维基百科: Wikipedia:Comparison of AMD graphics processing units.

概览

xf86-video-ati(radeon) 驱动:

  • 支持至 Radeon HD 6xxx 和 7xxxM 显卡系列(“北方群岛” 系列显卡)。
    • HD 77xx (南方群岛系列)已大部分支持.查看功能矩阵以了解不受支持的功能.
    • Radeons X1xxx 以及之前的显卡系列,拥有稳定、完整的功能以及2D、3D加速功能。
    • Radeons HD 2xxx 到 HD 6xxx系列具备完整2D加速和较好的3D加速功能,但相比ati官方驱动,功能仍然不全(比如, powersaving仍然处于测试阶段)。
  • 支持 DRI1, RandR 1.2/1.3/1.4, Glamor, EXA 加速 和 kernel mode-setting/DRI2.

一般来说,xf86-video-ati 应该是是你的首选,无论你用什么ATI/AMD卡。当然如果你使用的是最新的AMD显卡,你可能更喜欢 catalyst 驱动。

注意: xf86-video-ati 驱动在Xorg (xorg.conf) 被识别为 "radeon"

安装

注意: 如果你之前安装过私有驱动(catalyst),请参见这里来卸载

安装位于官方软件仓库xf86-video-ati.它为2D加速提供DDX驱动,而作为其依赖的mesa提供DRI支持和3D加速.(It provides the DDX driver for 2D acceleration and it pulls in mesa as a dependency, providing the DRI driver for 3D acceleration.)

为了获得OpenGL支持,还需安装 mesa-libgl。若需要x86_64下的32位支持,可以从multilib安装lib32-mesa-libgl.

请从official repositories获取mesa-vdpaulib32-mesa-vdpau包来 加速视频解码

配置

Xorg 会自动装入驱动并通过 EDID 获得显示器分辨率,只有性能优化时才需要额外配置。

如果要手动配置,请添加文件 /etc/X11/xorg.conf.d/20-radeon.conf, 并加入:

Section "Device"
    Identifier "Radeon"
    Driver "radeon"
EndSection

通过此段可以调整显卡的设置。

载入

radeon模块应该在启动时被正常载入.

要是没有的话...

  • 确保 内核参数没有 nomodesetvga=,因为现在 radeon 需要 KMS.
  • 另外,检查 /etc/modprobe.d//usr/lib/modprobe.d/ 以确保radeon模块没有被禁用.

早启动KMS

提示: 若分辨率有问题,试试强设模式也许可以解决.

radeon支持(并且现在强制需要)Kernel Mode Setting(KMS).KMS默认启用.

KMS一般在载入initramfs后初始化.不过,也可以在载入initramfs时启用KMS:将 radeon 模块添加到 /etc/mkinitcpio.confMODULES 列:

MODULES="... radeon ..."

重生成initramfs:

# mkinitcpio -p linux

下次重启生效.

性能调整

下面这些选项属于/etc/X11/xorg.conf.d/20-radeon.conf.

ColorTiling 是绝对安全的,并且默认被启用. 大多数用户能注意到性能的提升,但是这个功能R200及更早的显卡不支持. 早的显卡虽可以启用,但是工作负担转移到了cpu上

Option "ColorTiling" "on"

Acceleration architecture; 这只在新卡上有用. 如果你激活了这个功能然后进不了X,删除这个选项吧

Option "AccelMethod" "EXA"

Page Flip 一般来说是安全的. 老显卡可以启用这个功能,不过这样将会禁用EXA. 最近的驱动可以使这项功能和EXA都启用.

Option "EnablePageFlip" "on"

EXAVSync 选项试图通过stalling the engine until the display controller has passed the destination region来避免撕裂。在开启了Xv overlay视频选项的3D加速桌面非常有用,使用KMS时则没有必要。

Option "EXAVSync" "yes"

下面是一个简单的配置文件示例: /etc/X11/xorg.conf.d/20-radeon.conf:

Section "Device"
	Identifier  "My Graphics Card"
	Driver	"radeon"
	Option	"SWcursor"              "off" #software cursor might be necessary on some rare occasions, hence set off by default
	Option	"EnablePageFlip"        "on"  #supported on all R/RV/RS4xx and older hardware, and set on by default
	Option	"AccelMethod"           "EXA" #valid options are XAA, EXA and Glamor. Default value varies per-GPU.
	Option	"RenderAccel"           "on"  #enabled by default on all radeon hardware
	Option	"ColorTiling"           "on"  #enabled by default on RV300 and later radeon cards
	Option	"EXAVSync"              "off" #default is off, otherwise on. Only works if EXA activated
	Option	"EXAPixmaps"            "on"  #when on icreases 2D performance, but may also cause artifacts on some old cards. Only works if EXA activated
	Option	"AccelDFS"              "on"  #default is off, read the radeon manpage for more information
EndSection

如果gartsize没有自动检测到,可以通过向kernel parameters添加radeon.gartsize=32来实现,单位时Mb,32用于RV280显卡。

另外可以向modprobe文件/etc/modprobe.d/radeon.conf里添加选项实现:

options radeon gartsize=32

其他选项,可以阅读radeon manpage和模块的info page: man radeon, modinfo radeon.

可以尝试 driconf. 可以设置如 vsync, anisotropic filtering, texture compression 等诸多选项。还可以实现一些程序需要的"disable Low Impact fallback"选项(比如Goole Earth)。

关闭 PCI-E 2.0

从3.6版内核开始,radeon里PCI-E v2.0选项默认启用。

对一些主板可能不稳定,可以向kernel command line添加radeon.pcie_gen2=0来关闭。

参考 Phoronix article

Glamor

Glamor是一种使用OpenGL的 2D加速方式,适用于R300及以上显卡驱动。

自xf86-video-ati版本1:7.2.0-1后, 在radeonsi(南方群岛系列 和 superior GFX cards)上glamor默认启用; 在其他显卡上想启用的话,添加 AccelMethod glamor 到你的 xorg.conf 文件的Device部分:

 Option	"AccelMethod"           "glamor"
注意: 如果使用radeon (xf86-video-ati)驱动,上述的方法将有效防止浏览器崩溃,硬件加速和硬件解码将更稳定,从而能在大多数浏览器上硬件加速不出错。

若要使用EXA(上述bug修复前代替glamor)的话, 错误报告中有 建议的配置:

Section "Device"
  Identifier  "hd_7970"
  Driver      "radeon"
  Option      "AccelMethod"    "EXA"
  Option      "EXAVSync"      "off"
  Option      "EXAPixmaps"    "on"
  Option      "AccelDFS"      "on"
EndSection

混合交火

这是一项通常在配备了双显卡——一块比较节能(比如Intel的核芯显卡),另一块为高性能、高能耗(Radeon或NVIDIA)的笔记本上启用的特性。有三种方法可以启用它:

  • 如果不需要运行任何需要GPU协助运算的程序,可以简单地禁用显卡切换: echo OFF > /sys/kernel/debug/vgaswitcheroo/switch。可以使用 vgaswitcheroo 进行更多配置(参见Ubuntu wiki )在一个图形会话中同一时间只能使用一块显卡。
  • 可以使用 PRIME 。这是在Linux系统中使用双显卡切换的正确方式,但仍然需要用户进行大量手动设置。
  • 也可以使用 bumblebeeAUR中有可供安装的软件包 bumblebee-amd-gitAUR

节能

开源驱动的节电功能默认关闭,需要可手动启用.

三种方法可供选择:

  1. dynpm
  2. profile
  3. dpm(3.13内核后默认启用)

不好说哪个方法对你最合适, 你该自己试试.

所有vbios中有合适的电源状态表的芯片(R1xx和更新的)都支持电源管理. "dpm" 仅在R6xx和更新的芯片上被支持.(Power management is supported on all chips that include the appropriate power state tables in the vbios (R1xx and newer). "dpm" is only supported on R6xx and newer chips.)

详见 http://www.x.org/wiki/RadeonFeature/#index3h2 .

老方法

动态频率调整

此方法根据GPU负载自动改变时钟频率,所以GPU忙碌时显示性能提高,空闲时降低。自动变频试图在垂直消隐期间进行,但由于变频函数可能在周期内无法完成,这种方法可能导致显示闪烁。因此,动态调整只能在单显示器下正常工作。

可以通过以下命令启用:

# echo dynpm > /sys/class/drm/card0/device/power_method

基于计划的频率调整

该方法允许你选择5种不同的计划。主要来说,不同的计划最终都改变GPU时钟频率和电压。这种方式不同于积极方式,但更稳定,少闪屏,而且可用于多显示器环境

要激活此方法,可运行以下命令:

# echo profile > /sys/class/drm/card0/device/power_method

可选的计划:

  • default 使用默认时钟频率,不改变电源状态。这是默认启用的计划。
  • auto 根据系统是否使用电池,在电源状态 midhigh 间自动切换
  • low 强制GPU运行于low电源状态.注意low在某些笔记本上可能导致显示问题, 如auto 计划在显示器关闭时只选中low.(Note that low can cause display problems on some laptops, which is why auto only uses low when monitors are off. ) 在其他计划中,当显示器进入节能状态时,将自动切换为 low 计划
  • mid 强制GPU运行于mid电源状态.
  • high 强制GPU运行于high电源状态.

例如,我们可以激活low 计划(你可以根据需要替换为上述其他计划):

# echo low > /sys/class/drm/card0/device/power_profile

永久配置

上述方法不是永久性的,系统重启后将丢失。为了让它一直有效,你可以使用systemd-tmpfiles (例如 #Dynamic frequency switching):

/etc/tmpfiles.d/radeon-pm.conf
w /sys/class/drm/card0/device/power_method - - - - dynpm

你也可以使用udev规则替代 (例如 #Profile-based frequency switching):

/etc/udev/rules.d/30-radeon-pm.rules
KERNEL=="dri/card0", SUBSYSTEM=="drm", DRIVERS=="radeon", ATTR{device/power_method}="profile", ATTR{device/power_profile}="low"
注意: 如果上述规则失效,你可以试试删除 dri/ 前辍.

KERNEL=="card0", SUBSYSTEM=="drm", DRIVERS=="radeon", ATTR{device/power_method}="profile",

图形化工具

  • Radeon-tray — 通过状态栏图标控制配置方式的小工具。基于PyQt4编写,适合非gnome桌面的用户。
https://github.com/StuntsPT/Radeon-tray || radeon-trayAUR
  • power-play-switcher — 控制开源Radeon驱动电源的小工具
https://code.google.com/p/power-play-switcher/ || power-play-switcherAUR
  • Gnome-shell-extension-Radeon-Power-Profile-Manager — gnome-shell扩展,允许你改变开源Radeon驱动的电源配置方式
https://github.com/StuntsPT/shell-extension-radeon-power-profile-manager || gnome-shell-extension-radeon-ppmAUR gnome-shell-extension-radeon-power-profile-manager-gitAUR

动态电源管理

从3.13内核开始,在很多AMD Radeon设备上DPM默认启用。如果要禁用可加入参数 radeon.dpm=0kernel parameters

不像#动态频率调整,“dpm"方式根据GPU负载情况动态调整时钟频率和电压,同时它会启用频率和电压门控.

dpm有3种模式可选:

  • battery 最节能
  • balanced 默认
  • performance 最佳性能

可以通过sysfs来更改dpm的模式,如下:

# echo battery > /sys/class/drm/card0/device/power_dpm_state

你也许想要强制显卡工作在某一性能等级下:

  • auto 默认; 使用当前dpm模式限定的所有性能等级
  • low 强制在最低性能
  • high 强制在最高性能
# echo low > /sys/class/drm/card0/device/power_dpm_force_performance_level

图形界面工具

  • Gnome-shell-extension-Radeon-Power-Profile-Manager by lalmeras — 这个GNOME Shell扩展(StuntsPT's那个的fork)可以方便地在dpm设置档(battery,balanced和performance)间切换.支持多显卡的设置.
https://github.com/lalmeras/shell-extension-radeon-power-profile-manager || 未打包

其它

要查看当前GPU频率,可以运行如下命令,你可以看到类似如下输出:

# cat /sys/kernel/debug/dri/0/radeon_pm_info
  state: PM_STATE_ENABLED
  default engine clock: 300000 kHz
  current engine clock: 300720 kHz
  default memory clock: 200000 kHz

It depends on which GPU line yours is, however. Along with the radeon driver versions, kernel versions, etc. So it may not have much/any voltage regulation at all.

Thermal sensors are implemented via external i2c chips or via the internal thermal sensor (rv6xx-evergreen only). To get the temperature on asics that use i2c chips, you need to load the appropriate hwmon driver for the sensor used on your board (lm63, lm64, etc.). The drm will attempt to load the appropriate hwmon driver. On boards that use the internal thermal sensor, the drm will set up the hwmon interface automatically. When the appropriate driver is loaded, the temperatures can be accessed via lm_sensors tools or via sysfs in /sys/class/hwmon.

TV输出(TV out)

Tango-view-refresh-red.pngThis article or section is out of date.Tango-view-refresh-red.png

Reason: please use the first argument of the template to provide a brief explanation. (Discuss in Talk:ATI (简体中文)#)

自2007年8月起,所有集成了tv-out功能的Radeon显卡都有了驱动的tv-out支持。

目前tv-out还有一些局限:它对输出的自动识别并不总是正确,而且只支持NTSC制式。

首先,检查你的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
Note: you need to install xvattrAUR to execute this command.

要切换回显示器,把1改成0-1应用于双头显示(dual head)设置中的自动切换。

Please see Enabling TV-Out Statically for how to enable TV-out in your xorg configuration file.

在KMS中强制TV输出

内核可识别下列格式的 video= 参数 (参见KMS):

video=<conn>:<xres>x<yres>[M][R][-<bpp>][@<refresh>][i][m][eDd]

例如:

video=DVI-I-1:1280x1024-24@60e

带有空格的参数必须用引号括起:

"video=9-pin DIN-1:1024x768-24@60e"

Current mkinitcpio implementation also requires # in front. For example:

root=/dev/disk/by-uuid/d950a14f-fc0c-451d-b0d4-f95c2adefee3 ro quiet radeon.modeset=1 security=none # video=DVI-I-1:1280x1024-24@60e "video=9-pin DIN-1:1024x768-24@60e"
  • Grub 可直接接受如上参数。
  • Lilo 需要在双引号前使用“\”转义 (例如 # \"video=9-pin DIN-1:1024x768-24@60e\")
  • Grub2: TODO

You can get list of your video outputs with following command:

$ ls -1 /sys/class/drm/ | grep -E '^card[[:digit:]]+-' | cut -d- -f2-

HDMI 音频输出

HDMI音频输出在 xf86-video-ati 软件包中提供支持。由于可能引发一些问题,在 Linux内核版本 >=3.0 中默认禁用了HDMI音频输出。要启用它,在 内核参数 中添加 radeon.audio=1

如果启动后没有视频输出,则请禁用这个参数。

注意:
  • 如果在安装驱动后HDMI音频没有工作,请使用 这里 中提供的方法进行检测。
  • 如果在PulseAudio中声音出现问题,尝试设置 tsched=0 (参见 PulseAudio#Glitches, skips or crackling) 并确保 rtkit 守护进程正在运行。
  • Your sound card might use the same module, since HDA compliant hardware is pretty common. Change the default sound card using one of the suggested methods, which include using the defaults node in alsa configuration.

Dual Head setup

独立的 X screen

独立的双显示器可以按正常方式配置,radeon 驱动有一个 "ZaphodHeads" 选项可以把显示的区域绑定到固定的设备,例如:

       Section "Device"
       Identifier     "Device0"
       Driver         "radeon"
       Option         "ZaphodHeads"   "VGA-0"
       VendorName     "ATI"
       BusID          "PCI:1:0:0"
       Screen          0
       EndSection

有些设备有多个输出(HDMI, DVI 和 VGA),但是双屏显示的时候只使用其中的某两个组合例如 HDMI+DVI,所以需要通过 "ZaphodHeads" "VGA-0" 更改输出设备。

启动视频加速

mesa-vdpau 包已为开源驱动带来MPEG1/2的硬件解码支持,安装 libvdpau 后将自动启用。

要是它不会自动使用的话,你也可以通过声明环境变量 LIBVA_DRIVER_NAMEvdpauVDPAU_DRIVER 对应驱动强制启用 例如:

~/.bashrc
export LIBVA_DRIVER_NAME=vdpau
export VDPAU_DRIVER=r600

对于基于 r600 系列及以上的显卡,所有可用VDPAU 驱动位于 /usr/lib/vdpau/) 目录下找到

如果你拥有一个块Southern Islands(HD 7XXX) 或者更高的显卡,VDPAU_DRIVER变量因该置成radeonsi

~/.bashrc
export VDPAU_DRIVER=radeonsi

关闭垂直同步刷新

radeon驱动默认启用垂直同步刷新,除了跑分外各种情况下工作良好。要关闭它,可以创建 ~/.drirc (如果已存在请修改),加入以下部分 :

~/.drirc
<driconf>
    <device screen="0" driver="dri2">
        <application name="Default">
            <option name="vblank_mode" value="0" />
        </application>
    </device>
    <!-- Other devices ... -->
</driconf>

(译者注:以下这一段英文wiki上没这一段.另外的译者加进去的吗?) 也可以通过以下方法

~/.bashrc
export vblank_mode=0

(译者注:以上这一段英文wiki上没这一段.另外的译者加进去的吗?) 请确保是 dri2 , 而不是你的显卡型号(如 r600 )。

故障排除

Artifacts upon logging in

如果遇到了artifacts, 先试试不用/etc/X11/xorg.conf启动X. 最近版本的Xorg有可靠的自动检测/配置能力.过时或者不当的 xorg.conf 会导致问题.

不以配置文件启动时,推荐先安装xorg-input-drivers软件包组.

你也可以试着禁用 EXAPixmaps.在/etc/X11/xorg.conf.d/20-radeon.conf中:

Section "Device"
    Identifier "Radeon"
    Driver "radeon"
    Option "EXAPixmaps" "off"
EndSection

若想进一步地调整,还可以禁用 AccelDFS:

Option "AccelDFS" "off"

添加没有被侦测到的分辨率

比如,EDID在DisplayPort连接上失效(e.g. When EDID fails on a DisplayPort connection. )

参见Xrandr的文章.

AGP被禁用(KMS启用)

如果性能很差,dmesg也有如下信息

[drm:radeon_agp_init] *ERROR* Unable to acquire AGP: -19

那么检查针对你主板的agp驱动(如 via_agp, intel_agp 等)是否在 radeon 前被加载, 参见 #启用 KMS.

电视屏幕显示黑边

我的Radeon HD 5770用HDMI连接到电视时, 电视显示图像模糊,周围有2-3cm黑边,用催化剂时不是这样. 这是对付过扫描(Overscan)的(参见Wikipedia:Overscan),使用xrandr关闭它:

xrandr --output HDMI-0 --set underscan off

从睡眠恢复后X显示一个黑屏,鼠标指针还在

32MB或者更低的卡可能会有这个问题. 鼠标指针移动过的区域可能会被重绘.在 /etc/X11/xorg.conf.d/20-radeon.conf 中强制EXAPixmaps"enabled" 可能能解决此问题.参见#性能调整 .

X1300上KDE4没有桌面特效

KDE4的一个问题可能使视频硬件检测不准确,因此禁用了桌面特效,即使X1300的GPU有足够的能力. 一个可行的办法是,禁用掉KDE的检测,在/usr/share/kde-settings/kde-profile/default/share/config/kwinrc 和/或 .kde/share/config/kwinrc

添加

DisableChecks=true 

到 [Compositing] 部分. 确保compositing是启用的:

Enabled=true

KMS启用时,黑幕,没有控制台,但是 X 能够工作

当在同一台PC使用两张或以上的ATI显卡时可能会遇到此问题. 例如 Fujitsu Siemens Amilo PA 3553 笔记本就有这个问题. 这是因为fbcon控制台驱动程序映射自己到已存在于错误的显卡的framebuffer设备上(This is due to fbcon console driver mapping itself to wrong framebuffer device that exist on the wrong card). 在内核参数添加:

fbcon=map:1

这将告诉fbcon映射自己到 /dev/fb1 而不是 /dev/fb0.

2D 性能(比如滚动滑块)缓慢

如果2D性能(比如在终端或浏览器的滚动滑块)有问题, 你可以将 Option "MigrationHeuristic" "greedy" 添加到你的 xorg.conf 文件的 Device 部分. 仅适用于EXA.

这是一个样例 /etc/X11/xorg.conf.d/20-radeon.conf:

Section "Device"
        Identifier  "My Graphics Card"
        Driver  "radeon"
        Option  "MigrationHeuristic"  "greedy"
EndSection

新显卡 (HD 77** 及以上) 可能由于glamor的bug而遇到这样的问题,详见这里.启用EXA可以解决这个问题.

显示器旋转对光标起效却对窗口/内容不起效

启用EXA代替glamor的新显卡用户可能会发现,用xrandr旋转显示器将导致光标和显示器尺寸旋转了,但窗口与里面内容却保持原来方向. 另外移动鼠标时光标按照原来的方向移动.若有此问题,在你的 /var/log/Xorg.0.log 中查找下面这一行:

(EE) RADEON(0): Rotation requires acceleration!

新显卡上使用EXA时加速将被禁用(来源: 这里). 你必须从启用EXA (参见这里) 和旋转中二选一.

在ATI X1600 (RV530 series)上3D应用程序显示黑窗口

这三种方法可能有效:

  • pci=nomsi 添加到你的启动器的 内核参数.
  • 如果没用的话,试试用noapic代替pci=nomsi.
  • 如果还是没用,你可以试试vblank_mode=0 glxgears 或者 vblank_mode=1 glxgears,看看哪个对你有用. 然后安装driconf , 在~/.drirc里设置此参数.

从休眠中唤醒后光标崩溃

如果显示器唤醒后光标垂直方向重复刷新,可以在xorg的配置文件的"Device"部分中将"SWCursor"设置成"true".