Difference between revisions of "ATI (简体中文)"

From ArchWiki
Jump to navigation Jump to search
(flagged broken section links (interactive))
Tag: wiki-scripts
 
(147 intermediate revisions by 21 users not shown)
Line 1: Line 1:
[[Category: 简体中文]]
+
[[Category:Graphics (简体中文)]]
[[Category: 显示设备]]
+
[[Category:X server (简体中文)]]
[[Category: X Server (简体中文)]]
+
[[de:ATI]]
[[Category: HOWTOs (简体中文)]]
+
[[en:ATI]]
 +
[[es:ATI]]
 +
[[fr:ATI]]
 +
[[it:ATI]]
 +
[[ja:ATI]]
 +
[[pl:ATI]]
 +
[[ru:ATI]]
 +
{{TranslationStatus (简体中文)|ATI|2017-12-04|495878}}
 +
{{Related articles start (简体中文)}}
 +
{{Related|AMD Catalyst (简体中文)}}
 +
{{Related|AMDGPU}}
 +
{{Related|Vulkan}}
 +
{{Related|Xorg (简体中文)}}
 +
{{Related articles end}}
 +
'''ATI/AMD'''显卡用户有两个选择:官方的专有驱动({{AUR|catalyst}})和开源驱动 ([[ATI]] 和 [[AMDGPU]])。本文主要介绍较旧的显卡使用的开源的 '''ATI'''/[https://wiki.freedesktop.org/xorg/radeon/ Radeon] 驱动. 要选择正确的驱动,请参考[[Xorg#AMD]]  
  
{{i18n_links_start}}
+
在很多显卡上开源驱动的性能几乎已经达到和闭源驱动一样的水平。(参见[https://www.phoronix.com/scan.php?page=article&item=radeonsi-cat-wow&num=1 这里]。)同时开源驱动有不错的多显支持,
  
{{i18n_entry|English|ATI}}
+
如果你不确定该用哪种,请先试一试开源版的。开源驱动能满足大多数的需要,而且,一般来说遇到的麻烦也更少些。查看现在功能开发进展情况可访问 [https://www.x.org/wiki/RadeonFeature 功能矩阵]。
{{i18n_entry|简体中文|ATI 驱动安装配置 (简体中文)}}
 
{{i18n_entry|Italiano|ATI (Italiano)}}
 
  
{{i18n_links_end}}
+
[https://www.x.org/wiki/RadeonFeature/#index5h2 这个页面]可以将市场名(例如 Radeon HD4330) 映射到芯片组名(例如 R700).
  
= 概述 =
+
== 安装==
ATI用户有两种驱动可选。如果你不确定该用哪种,请先试一试开源版的。开源驱动能满足大多数的需要,而且,一般来说遇到的麻烦也更少些。
+
{{注意|如果你之前安装过私有驱动(catalyst),请参见[[AMD_Catalyst_(简体中文)#.E5.8D.B8.E8.BD.BD|这里]]来卸载}}
  
ATI的官方专属驱动自7.10(8.42.3)版开始支持[[AIGLX]](虽然还有bug)。现在,要使用[[Compiz Fusion]]或者[[Compiz]]这些带有composite功能的管理器,你既可以使用开源驱动,也可以使用官方专属版本。目前,开源驱动在性能上不及官方专属版本,也缺乏双通道DVI(dual-link DVI)之类的功能。但另一方面,它能更好地支持双头显示(dual-head)。
+
[[Install|安装]软件包 {{Pkg|mesa}},它提供 DRI 和 3D 加速。
  
= 开源ATI驱动 =
+
* 若需要x86_64下的32位支持,可以从 [[multilib]] 安装 {{Pkg|lib32-mesa}}.
开源ATI驱动有两种,<code>xf86-video-ati</code>和<code>xf86-video-radeonhd</code>.
+
* 要使用 [[Xorg]] 2D 加速 DDX 驱动,请安装软件包 {{Pkg|xf86-video-ati}}.
  
<code>xf86-video-ati</code>支持几乎所有的ATI显卡,包括最新的HD系列显卡。R500以及以下显卡支持完整稳定的3D,2D加速,R600以及R700(HD2400-HD4870)在内核2.6.30以及新的mesa支持下支持2D和3D加速,但是因为刚刚支持不久,可能效率不高。完整的支持情况:[http://dri.freedesktop.org/wiki/ATI here]。但是,它支持DRI1, RandR 1.2/1.3, EXA渲染Kernel-Mode-Setting/DRI2(kernel 2.6.31,libdrm 2.4.12,mesa 7.6)。
+
[[#启动视频加速|加速视频解码]] 由 {{Pkg|mesa-vdpau}} 和 {{Pkg|lib32-mesa-vdpau}} 包提供支持。
  
'''HDMI'''的支持将通过AtomBIOS被xf86-video-ati支持。
+
== 载入 ==
  
<code>xf86-video-radeonhd</code>是专为ATI R500芯片(Radeon X1000 series)和更新显卡而写的。这个驱动是Novell根据AMD发布的驱动文档重写的。它支持RandR 1.2但仍然很多东西仍在开发。如果硬件支持,驱动还支持HDMI声音输出。
+
radeon模块应该在启动时被正常载入.
  
== 安装与配置 ==
+
要是没有的话...
要安装的软件包是<code>xf86-video-ati</code>。'''注意:'''如果你之前安装过私有驱动,请确认卸载<code>catalyst</code>和<code>catalyst-utils</code>。
 
  
安装<code>xf86-video-ati</code>:
+
* 确保 [[Kernel_parameters_(简体中文)|内核参数]] 中'''没有''' {{ic|nomodeset}} 或 {{ic|1=vga=}},因为现在 radeon 需要[[Kernel mode setting (简体中文)|内核级显示模式设置]]。
   
+
* 另外,确保 radeon 模块不在内核模块[[Kernel_modules#Blacklisting|黑名单]]中。
  pacman -S xf86-video-ati
+
 
 +
== 配置 ==
 +
Xorg 会自动装入驱动并通过 EDID 获得显示器分辨率,只有性能优化时才需要额外配置。
 +
 
 +
如果要手动配置,请添加文件 {{ic|/etc/X11/xorg.conf.d/20-radeon.conf}}, 并加入:
 +
 
 +
Section "Device"
 +
    Identifier "Radeon"
 +
    Driver "radeon"
 +
EndSection
 +
 
 +
通过此段可以调整显卡的设置。
 +
 
 +
=== 早启动 KMS ===
 +
 
 +
{{小贴士|若分辨率有问题,试试[[Kernel mode setting (简体中文)#强设模式和 EDID|强设模式]]{{Broken section link}}也许可以解决.}}
 +
 
 +
现在 radeon 支持并需要[[Kernel mode setting (简体中文)|内核级显示模式设置]] (KMS)。KMS 默认启用。
 +
 
 +
KMS一般在[[Arch boot process (简体中文)#initramfs|载入initramfs]]后初始化.不过,也可以在载入initramfs时启用KMS:将 {{ic|radeon}} 模块添加到 {{ic|/etc/mkinitcpio.conf}} 的 {{ic|MODULES}} 列:
 +
 
 +
  MODULES="... radeon ..."
 +
 
 +
重生成initramfs:
 +
 
 +
  # mkinitcpio -p linux
 +
 
 +
下次重启生效.
 +
 
 +
== 性能调整 ==
 +
=== 启动视频加速 ===
 +
 
 +
参见[[Hardware video acceleration]]。
 +
 
 +
=== 驱动设置 ===
 +
下面这些选项属于{{ic|/etc/X11/xorg.conf.d/'''20-radeon.conf'''}}.
 +
 
 +
请在应用驱动选项之前先阅读 {{man|4|radeon}} 和 [https://www.x.org/wiki/RadeonFeature/#index4h2 RadeonFeature]。
 +
 
 +
'''Acceleration architecture'''; Glamor是一种使用OpenGL的 2D加速方式,适用于R300及以上显卡驱动。
 +
自xf86-video-ati版本1:7.2.0-1后, 在radeonsi(南方群岛系列 和 superior GFX 显卡)上glamor默认启用; 在其他显卡默认使用 EXA.
 +
 
 +
Option "AccelMethod" "glamor"
 +
 
 +
使用 Glamor 加速方式时可以启用 '''ShadowPrimary''' 选项,它将启用一个被称为 "shadow primary" 的缓冲区来供CPU快速存取像素信息,并给每个显示控制器 (CRTC) 分离出单独的 scanout  缓冲区。这将提升某些 2D 工作的性能,但可能会降低其他(比如3D)工作的性能。
  
'''注意:'''下面不额外说明,则都是以xf86-video-ati为标准
+
Option "ShadowPrimary" "on"
  
安装<code>xf86-video-radeonhd</code>:
+
'''ColorTiling''' 和 '''ColorTiling2D''' 是绝对安全的,并且默认被启用. 大多数用户能注意到性能的提升,但是这个功能R200及更早的显卡不支持. 早的显卡虽可以启用,但是工作负担转移到了cpu上
  
  pacman -S xf86-video-radeonhd
+
  Option "ColorTiling" "on"
   
+
  Option "ColorTiling2D" "on"
git版本的驱动可以在[[AUR]]里面找到,可能提供更新的功能以及更多显卡的支持,但是可能不稳定。
 
  
在新版的xorg支持下,完全可以不用配置[[xorg.conf]],只要你开启了hal服务,安装了xf86-input-evdev等xorg驱动,[[Xorg]]会自动帮你完成硬件识别等工作。
+
'''DRI3''' 默认是启用的,老卡默认使用 DRI2, 要切换到 DRI3:
  
或者你想自定义你硬件的工作参数等,就需要用到[[xorg.conf]],一般默认就可以得到很好的效果了。
+
Option "DRI" "3"
  
编辑[[xorg.conf]],下面是一个简单但是完全可以正常工作的样本,更详细请看man radeon:
+
'''TearFree''' 使用硬件的 flipping mechanism 机制来防止撕裂。当前启用这个选项会禁用 "EnablePageFlip" 选项。
<code>
 
Section "ServerLayout" # 这里你需要配置什么就写什么,我需要定义显卡参数,就添加一个Screen行
 
Identifier "Xorg Configured" # 这个Layout的名称
 
Screen      0  "screen0" 0 0 # 定义你使用的名字叫screen0的Screen,下面一定要有定义
 
EndSection
 
  
Section "Device"
+
  Option "TearFree" "on"
Identifier "x700" # 定义名称叫"X700"的设备(Device),因为下面有用到
 
Driver "radeon" # 使用radeon驱动,完全可以不要
 
VendorName "ATI Technologies Inc"
 
BoardName "ATI Mobility Radeon X700"
 
# Option "BackingStore" "on" # 不知道有什么作用
 
Option          "DynamicClocks" "on" # 部分显卡开启动态调整频率
 
Option "EnablePageFlip" "on" # 提高性能
 
# Option "FBTexPercent" "50" # 默认如此
 
EndSection
 
  
Section "Screen"
+
'''EXAVSync ''' 选项仅在使用 EXA 加速方式时有效,它通过stalling the engine until the display controller has passed the destination region来避免撕裂。这将导致性能下降,并已知在某些芯片上导致不稳定。
Identifier "screen0"
 
Device    "x700" # 使用名字叫"X700“的设备,上面有定义
 
DefaultDepth    24 # 默认使用的色深,可以不写
 
SubSection "Display" # 这里可以定义分辨率,当KMS启用后,这里可能失效
 
Viewport  0 0 # 自动识别分辨率,有这一行下面两行失效
 
# Depth 24 # 定义这里调整色深24的时候模式
 
# Modes "1280x800" # 分辨率为1280x800,去掉前面的"#"号,删除Viewport行生效
 
EndSubSection
 
EndSection
 
</code>
 
  
使用这一驱动时,请确认你安装了<code>libgl-dri</code>而不是<code>catalyst-utils</code>。否则,错误的<code>libGL.so</code>将导致直接加速(direct rendering)无法工作。
+
Option "EXAVSync" "yes"
  
=== 性能调整 ===
+
下面是一个简单的 {{ic|/etc/X11/xorg.conf.d/'''20-radeon.conf'''}} 配置文件示例:
  
下面这些选项属于Section "Device"
+
{{bc|
         Option "AGPMode" ""
+
Section "Device"
默认为"未定义"。所以有这个定义的最好删除,哪怕你定义成8说不定效率都不如留空
+
        Identifier  "Radeon"
+
        Driver "radeon"
 +
         Option "AccelMethod" "glamor"
 +
        Option "DRI" "3"
 +
        Option "TearFree" "on"
 
         Option "ColorTiling" "on"
 
         Option "ColorTiling" "on"
默认开启。打开ColorTiling是绝对安全的,并且这被认为是默认的设置。人们注意到,通过xorg.conf来开启它,性能会有所提高。
+
        Option "ColorTiling2D" "on"
 +
EndSection
 +
}}
 +
 
 +
{{小贴士|{{AUR|driconf}} 是一个可以修改诸多设置的小工具,如 vsync, anisotropic filtering, texture compression 等。它还有一些程序(比如Goole Earth)需要的"disable Low Impact fallback"功能。}}
 +
 
 +
=== 内核参数 ===
 +
{{小贴士|你也许想用 {{ic|systool}} 来调试新的参数,参见[[Kernel modules (简体中文)#概览|这里]]{{Broken section link}}。}}
  
        Option "AccelMethod" "EXA"
+
如果 '''gartsize''' 没有被自动检测到,请添加 {{ic|1=radeon.gartsize=32}} 到 [[Kernel parameters (简体中文)|内核参数]]来手动定义它。
默认如此,定义加速方式(Acceleration architecture),最好不要修改。
 
  
        Option "EnablePageFlip" "on"
+
{{注意|对于新的AMD显卡不再需要设置这个参数:
默认未开启,开启Page Flip一般是安全的,同时也会禁用EXA,因此大多用在比较老的显卡上。新版驱动可以使之与EXA共存。
+
{{bc|<nowiki>
 +
[drm] Detected VRAM RAM=2048M, BAR=256M
 +
[drm] radeon: 2048M of VRAM memory ready
 +
[drm] radeon: 2048M of GTT memory ready.
 +
</nowiki>}}
 +
}}
  
        Option "AGPFastWrite" "yes"
+
重启后生效。
这一选项可以打开fast writes。很可能会出问题,比如造成X死锁,所以做好删除它的准备,如果你到时进不了X的话。
 
  
要了解更多的配置选项请阅读manpage
+
==== 关闭 PCIE 2.0 ====
man radeon
 
  
[http://aur.archlinux.org/packages.php?do_Details=1&ID=2994 driconf]是一款很不错的工具,值得一试。它让你能修改一些设定,比如vsync,anisotropic,texture compression等等。有些程序(比如Google Earth )要求“disable Low Impact fallback",使用driconf可以做到这一点。
+
从3.6版内核开始,radeon里PCIE 2.0选项默认启用。
  
=== TV输出(TV out) ===
+
对一些主板可能不稳定,可以向[[Kernel parameters|内核参数]]添加 {{ic|1=radeon.pcie_gen2=0}} 来关闭。
  
自2007年8月起,所有集成了tv-out功能的Radeon显卡都有了驱动的tv-out支持。
+
参考 [http://www.phoronix.com/scan.php?page=article&item=amd_pcie_gen2&num=1 Phoronix 文章]
目前tv-out还有一些局限:它对输出的自动识别并不总是正确,而且只支持NTSC制式。
 
不管怎样,它在我的Radeon 7000上工作地很棒。这里是我的方法:
 
  
首先,检查你的S端子输出:<code>xrandr</code>应该会给你类似如下的结果:
+
=== Gallium HUD ===
  
Screen 0: minimum 320x200, current 1024x768, maximum 1280x1200
+
radeonsi 驱动支持激活一个HUD,来显示透明的图像及文字于正在渲染的程序(如游戏)之上。可以显示当前帧率,每个CPU核心负载或者CPU负载平均值。这个HUD受 GALLIUM_HUD 环境变量控制,可以添加一些参数如:
...
+
*"fps" - 显示当前帧率
S-video disconnected (normal left inverted right x axis y axis)
+
*"cpu" - 显示平均CPU负载
 +
*"cpu0" - 显示第一个CPU核心负载
 +
*"cpu0+cpu1" - 显示前两个CPU核心负载
 +
*"draw-calls" - 显示一个物体的每个材质被显示到屏幕上多少次(displays how many times each material in an object is drawn to the screen)
 +
*"requested-VRAM" - 显示GPU的VRAM使用量
 +
*"pixels-rendered" - 显示正在显示的像素计数
  
现在我们要告诉Xorg线已经插好了
+
关于参数的完整列表以及操作GALLIUM_HUD的一些注意事项,你可以添加"help"参数运行一个简单程序(如glxgears)来查看相应的终端输出。
 +
{{bc|1=# GALLIUM_HUD="help" glxgears }}
  
xrandr --output S-video --set load_detection 1
+
更多信息参见 [http://lists.freedesktop.org/archives/mesa-dev/2013-March/036586.html 邮件列表页面] 或 [https://kparal.wordpress.com/2014/03/03/fraps-like-fps-overlay-for-linux/ 这篇博客].
  
设定TV制式标准
+
== 混合交火 ==
  
xrandr --output S-video --set tv_standard ntsc
+
这是一项通常在配备了双显卡——一块比较节能(比如Intel的核芯显卡),另一块为高性能、高能耗(Radeon或NVIDIA)的笔记本上启用的特性。有两种方法可以启用它:
  
为它添加一个分辨率(目前只支持800x600)
+
* 如果不需要运行很吃GPU的程序,可以禁用独立显卡(参见[https://help.ubuntu.com/community/HybridGraphics#Using_vga_switcheroo Ubuntu wiki] ): {{ic|echo OFF > /sys/kernel/debug/vgaswitcheroo/switch}}。
 +
* [[PRIME]]是在Linux系统中使用双显卡切换的正确方式,但仍然需要用户进行大量手动设置。
  
xrandr --addmode S-video 800x600
+
== 节能 ==
 +
{{注意|所有vbios中包含有适当电源状态表的显卡芯片(R1xx 及更新的)都支持电源管理。"dpm"仅在 R6xx 以及更新的芯片上被支持。}}
  
我打算使用复刻模式(clone mode)
+
开源驱动的节电功能默认关闭,需要可手动启用.
  
xrandr --output S-video --same-as VGA-0
+
三种方法可供选择:
  
好了,让我们来看看效果吧
+
# [[#动态电源管理|dpm]](3.13内核后默认启用)
 +
# [[#动态频率调整|dynpm]]
 +
# [[#基于计划的频率调整|profile]]
  
xrandr --output S-video --mode 800x600
+
详见 http://www.x.org/wiki/RadeonFeature/#index3h2 .
  
这时,在电视上你应该能看到你的桌面,分辨率是800x600。
+
=== 动态电源管理 ===
  
要关掉这一输出:
+
从3.13内核开始,在[http://kernelnewbies.org/Linux_3.13#head-f95c198f6fdc7defe36f470dc8369cf0e16898df 很多 AMD Radeon 设备]上 DPM 默认启用。如果要禁用可加入参数 {{ic|1=radeon.dpm=0}} 到 [[kernel parameters]]。
  
xrandr --output S-video --off
+
{{Tip|DPM 可以支持 R6xx,但是在内核里默认没有启用,仅 R7xx 及之后的显卡才默认启用. 在内核参数中加入 {{ic|1=radeon.dpm=1}} 可以启用 dpm.}}
  
你可能还发现视频只在显示器上播放,而电视上没有。XV_CRTC属性控制着Xv overlay的输出方向。
+
不像[[#动态频率调整|dynpm]],“dpm"方式根据GPU负载情况动态调整时钟频率和电压,同时它会启用频率和电压门控.
  
把输出指向电视:
+
dpm有3种模式可选:
  
xvattr -a XV_CRTC -v 1
+
* {{ic|battery}} 最节能
 +
* {{ic|balanced}} 默认
 +
* {{ic|performance}} 最佳性能
  
要切换回显示器,把<code>1</code>改成<code>0</code>。<code>-1</code>应用于双头显示(dual head)设置中的自动切换
+
可以通过sysfs来更改dpm的模式,如下:
 +
# echo battery > /sys/class/drm/card0/device/power_dpm_state
  
=== HDMI输出声音 ===
+
你也许想要强制显卡工作在某一性能等级下:
如果你硬件支持,而且安装的驱动为'''xf86-video-radeonhd''' ('''xf86-video-ati'''将很快有HDMI支持),你就可以按照下面修改[[xorg.conf]]:
 
  
Section "Device"
+
* {{ic|auto}} 默认; 使用当前dpm模式限定的所有性能等级
  # ...
+
* {{ic|low}} 强制在最低性能
  Option "Audio" "on"
+
* {{ic|high}} 强制在最高性能
  Option "HDMI" "all"
 
EndSection
 
  
重启X,看是否有效。
+
# echo low > /sys/class/drm/card0/device/power_dpm_force_performance_level
  
# Connect your PC to the TV via HDMI cable (duh).
+
==== 命令行工具 ====
# Use xrandr to get picture to the TV. Ex: <code>xrandr --output DVI-D_1 --mode 1280x768 --right-of PANEL</code>. Simply typing <code>xrandr</code> will give you a list of your valid outputs.
 
# Run <code>aplay -l</code> 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: <code>card 1: HDMI [HDA ATI HDMI], device 3: ATI HDMI [ATI HDMI]</code>
 
# Try sending sound to this device: <code>aplay -D plughw:1,3 /usr/share/sounds/alsa/Front_Center.wav</code>. 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 =
+
* [https://github.com/superjamie/snippets/blob/master/radcard radcard] - 一个获取/调整 DPM 电源状态与级别的脚本。
  
ATI的私有驱动曾被称为fglrx,现在ATI将其重新命名为Catalyst。目前,改变的只是软件包的名字,内核模块依然保留着它原有的名字fglrx,因此下面提到的任何“fglrx"都特指内核模块,而''不是软件包''。
+
=== 老方法 ===
  
== 支持的设备 ==
+
==== 动态频率调整 ====
  
访问[http://www2.ati.com/drivers/linux/catalyst_88_linux.html ATI Catalyst 8.8 (Linux) Release Notes],查看支持的显卡列表
+
此方法根据GPU负载自动改变时钟频率,所以GPU忙碌时显示性能提高,空闲时降低。自动变频试图在垂直消隐期间进行,但由于变频函数可能在周期内无法完成,这种方法可能导致显示闪烁。因此,动态调整只能在单显示器下正常工作。
  
== 安装 ==
+
可以通过以下命令启用:
  
自Xorg 7发布以来,Arch在<code>extra</code>软件仓库中提供预编译的catalyst软件包。如果你使用core或者extra中提供的内核,那么安装过程将会很简单。如果你使用定制的内核,那么你将需要一些额外的步骤。
+
# echo dynpm > /sys/class/drm/card0/device/power_method
  
=== 普通内核 ===
+
==== 基于计划的频率调整 ====
  
====kernel26====
+
该方法允许你选择5种不同的计划。主要来说,不同的计划最终都改变GPU时钟频率和电压。这种方式不同于积极方式,但更稳定,少闪屏,而且可用于多显示器环境
  
安装<code>kernel26</code>的fglrx驱动,你需要<code>catalyst</code>软件包。
+
要激活此方法,可运行以下命令:
  
  # pacman -S catalyst
+
  # echo profile > /sys/class/drm/card0/device/power_method
  
这个软件包'''只包含'''内核模块,同时还要安装<code>catalyst-utils</code>作为依赖。<code>catalyst-utils</code>独立于内核,同时为Xorg提供库和实用程序,其中也包含了ATI自己的<code>libGL.so</code>。
+
可选的计划:
 +
* {{ic|default}}    使用默认时钟频率,不改变电源状态。这是默认启用的计划。
 +
* {{ic|auto}}  根据系统是否使用电池,在电源状态 {{ic|mid}} 和 {{ic|high}} 间自动切换
 +
* {{ic|low}}    强制GPU运行于{{ic|low}}电源状态.注意{{ic|low}}在某些笔记本上可能导致显示问题, 如{{ic|auto}} 计划在显示器关闭时只选中{{ic|low}}.(Note that {{ic|low}} can cause display problems on some laptops, which is why {{ic|auto}} only uses {{ic|low}} when monitors are off. ) 在其他计划中,当显示器进入节能状态时,将自动切换为 {{ic|low}} 计划
 +
* {{ic|mid}}    强制GPU运行于{{ic|mid}}电源状态.
 +
* {{ic|high}}  强制GPU运行于{{ic|high}}电源状态.
  
=== 自己编译的内核 ===
+
例如,我们可以激活{{ic|low}} 计划(你可以根据需要替换为上述其他计划):
  
为定制的内核安装catalyst,你需要为你的内核编译专门的模块,并创建自己的<code>catalyst-$kernel</code>软件包。
+
# echo low > /sys/class/drm/card0/device/power_profile
  
如果你缺乏制作软件包的经验,首先阅读wiki中关于[[ABS]]的页面,这会使你接下来的工作更顺利。
+
==== 永久配置 ====
  
==== 获取PKGBUILD ====
+
上述方法不是永久性的,系统重启后将丢失。为了让它一直有效,可以使用[[udev]]规则, 例如设置基于计划的频率调整  :
可以通过下面的两种方式从CVS或ABS中获取<code>PKGBUILD</code>和<code>fglrx.install</code>文件
 
  
* 访问http://archlinux.org/packages/search/?q=catalyst 找到你系统类型,进入并点击“View CVS Entries“
+
{{hc|/etc/udev/rules.d/30-radeon-pm.rules|<nowiki>
* 以root身份运行<code>abs</code>,然后到<code>var/abs/extra/modules/fglrx</code>中寻找这些文件
+
KERNEL=="dri/card0", SUBSYSTEM=="drm", DRIVERS=="radeon", ATTR{device/power_method}="profile", ATTR{device/power_profile}="low"
 +
</nowiki>}}
  
==== 编辑PKGBUILD并创建软件包 ====
+
{{注意|如果上述规则失效,你可以试试删除  {{ic|dri/}}  前辍.}}
这里需要作三处修改:
+
KERNEL=="card0", SUBSYSTEM=="drm", DRIVERS=="radeon", ATTR{device/power_method}="profile",
  
'''第一''',把
+
==== 图形化工具 ====
    pkgname=catalyst
 
改成
 
    pkgname=catalyst-KERNEL_NAME
 
其中KERNEL_NAME可以是任何你想要的名字
 
  
'''第二''', 从依赖列表(dependencies)中移除<code>kernel26</code>
+
* {{App|Radeon-tray|通过状态栏图标控制配置方式的小工具。基于PyQt4编写,适合非gnome桌面的用户。|https://github.com/StuntsPT/Radeon-tray|{{AUR|radeon-tray}}}}
  
'''第三''', 把
+
=== 其它 ===
    _kernver=${_kernel_version}-ARCH
 
改成
 
    _kernver=`uname -r`
 
(或者直接把'''使用你定制的内核时'''<code>uname -r</code>的输出结果填到那里)
 
  
最后,创建并安装软件包(<code>makepkg -i</code>或者<code>makepkg</code>然后<code>pacman -A pkgname.pkg.tar.gz</code>)
+
要查看当前GPU频率,可以运行如下命令,你可以看到类似如下输出:
  
==== 注意 ====
+
{{hc|# cat /sys/kernel/debug/dri/0/radeon_pm_info|<nowiki>
* 如果你使用仓库的多个内核,记得给每个内核都装上相应的catalyst模块。它们不会互相冲突。
+
  state: PM_STATE_ENABLED
 +
  default engine clock: 300000 kHz
 +
  current engine clock: 300720 kHz
 +
  default memory clock: 200000 kHz
 +
</nowiki>}}
  
* 不需要改动<code>catalyst-utils</code>,它是独立于内核的。你需要做的只是编译一个内核模块。
+
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 {{ic|/sys/class/hwmon}}.
  
=== ATI/AMD安装程序 ===
+
== 风扇速度 ==
==== 安装 ====
+
即使上述省电功能应该能很好调整风扇速度,一些显卡在空闲状态时仍然太吵了。这时,如果你的风扇支持的话,你可以尝试手动改变风扇速度。
'''警告:不推荐使用ati.com/amd.com的安装程序!'''
 
 
 
这样做会与各种pacman软件包发生文件冲突,同时也很可能造成X的运行失败。通过pacman获得的软件包是专门为Arch Linux配置的,建议你选择它们。
 
  
如果你已经尝试了用官方安装程序进行手动安装,并且发现电脑不再正常工作了,在/usr/share/ati里应该有一个卸载脚本,运行它,然后试一试pacman的软件包。
+
{{注意|
 +
* 请谨记以下方法会将风扇速度设置为固定值,它不会随着 gpu 的压力而调整,所以在高负荷工作时这有可能导致过热。
 +
* 设置低于标准的数值时最好检查你的 gpu 温度。
 +
}}
  
如果出于某种原因,你一定要使用ATI/AMD的安装程序,下面的步骤'''可能'''会对你有用:
+
首先,输入如下命令来启用 gpu(或者在多 gpu 的情况下,第一个 gpu)的风扇手动调速。
  
*下载ATI/AMD的驱动安装程序
+
# echo 1 > /sys/class/drm/card0/device/hwmon/hwmon0/pwm1_enable
*给它可执行权限
 
*安装mesa
 
    #pacman -S mesa
 
*如果需要的话,安装Xorg
 
*检查ATI/AMD安装程序需要的其它包,这些包已在官方网站上列出。
 
    #pacman -Q | grep NameOfPackage
 
*按照接下来描述的方法用aticonfig更新xorg.conf
 
*如果有需要,在xorg.conf里添加指向fglrx.so模块的ModulesPath
 
  
== 配置 ==
+
接下来设置你想要的风扇速度,可选的数值为 0 到 255,分别对应 0-100% 的风扇速度。(比如下例设置为了大约 20%)
ATI提供了<code>aticonfig</code>来修改已存在的<code>xorg.conf</code>,配置显卡的各个方面。
 
查看<code>aticonfig</code>选项的完整列表,运行
 
$ aticonfig --help
 
  
如果你还没有xorg.conf,运行下面的命令来生成一个
+
  # echo 55 > /sys/class/drm/card0/device/hwmon/hwmon0/pwm1
  # 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.
 
  
只要视实际情况调整两行中的一行来完成你的个人设置。
+
如果固定值不符合你的期望,还可以自定义为按一个温度/风扇速度曲线来调整,比如写一个脚本,来根据当前温度 (/sys/class/drm/card0/device/hwmon/hwmon0/temp1_input) 设置风扇速度,最好还能设置为温度变化后延迟调整。这里有一个图形界面的工具:{{AUR|radeon-profile-git}}。
  
<font color="red">'''警告:'''最好还是亲眼检查一遍新的xorg.conf以保证文件的正确性。否则,你的图形界面可能无法启动</font> 你可以拿它与wiki中Xorg页面给出的[http://wiki.archlinux.org/index.php?title=Xorg7#Sample_Xorg.conf_Files Sample Xorg.conf files]
+
== TV输出 ==
相比较。
 
  
确保你的"Screen"章节含有"DefaultDepth  24"并且有包含"Mode 666"的"DRI"章节。fglrx需要这些,否则重启或者注销后可能无法使用图形界面。另外,最新的Xorg可以自动选择和调整X选项,你不必在xorg.conf里面写非常多的内容。以前为xorg写的配置内容可能多余了。
+
首先,检查你有S-video输出:{{ic|xrandr}}应该会给你类似如下的结果:
  
下面这个例子就可以正常工作了
+
Screen 0: minimum 320x200, current 1024x768, maximum 1280x1200
<pre>
+
...
Section "ServerLayout"
+
  S-video disconnected (normal left inverted right x axis y axis)
Identifier    "X.org Configured"
 
Screen      0 "Screen0" 0 0
 
InputDevice    "Mouse0" "CorePointer"
 
InputDevice    "Keyboard0" "CoreKeyboard"
 
EndSection
 
 
   
 
   
Section "Files"
+
现在我们应该告诉Xorg它已经接上了 (本来就是,对吧)
RgbPath      "/usr/share/X11/rgb"
+
xrandr --output S-video --set "load detection" 1
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"
+
设定TV制式标准
Load "extmod"
+
  xrandr --output S-video --set "tv standard" ntsc
Load  "dbe"
+
 
Load  "xtrap"
+
为它添加一个分辨率(目前只支持800x600)
Load "record"
+
  xrandr --addmode S-video 800x600
Load  "dri"
+
 
Load  "glx"
+
复制模式(clone mode)
Load "GLcore"
+
  xrandr --output S-video --same-as VGA-0
Load  "freetype"
+
 
EndSection
+
好了,让我们来看看效果吧
   
+
  xrandr --output S-video --mode 800x600
Section "InputDevice"
+
 
Identifier  "Keyboard0"
+
这时,在电视上你应该能看到你的桌面,分辨率是800x600。
Driver      "kbd"
+
 
EndSection
+
要关掉这一输出:
+
  xrandr --output S-video --off
Section "InputDevice"
+
 
Identifier "Mouse0"
+
=== 在KMS中强制TV输出 ===
Driver      "mouse"
+
 
Option     "Protocol" "auto"
+
内核可识别下列格式的 {{ic|1=video=}} 参数 (参见[[KMS]]):
Option     "Device" "/dev/input/mice"
+
 
Option     "ZAxisMapping" "4 5 6 7"
+
  video=<conn>:<xres>x<yres>[M][R][-<bpp>][@<refresh>][i][m][eDd]
EndSection
+
 
   
+
例如:
Section "Monitor"
+
 
Identifier  "Monitor0"
+
  video=DVI-I-1:1280x1024-24@60e
VendorName  "Monitor Vendor"
+
 
ModelName    "Monitor Model"
+
带有空格的参数必须用引号括起:
EndSection
+
 
   
+
  "video=9-pin DIN-1:1024x768-24@60e"
Section "Device"
+
 
Identifier  "Card0"
+
Current mkinitcpio implementation also requires {{ic|#}} in front. For example:
Driver      "fglrx"
+
 
VendorName "ATI Technologies Inc"
+
  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"
BoardName  "Radeon Mobility X1400"
+
 
BusID      "PCI:1:0:0"
+
* [[GRUB Legacy]] 可直接接受如上参数。
EndSection
+
*  [[LILO]] 需要在双引号前使用“\”转义 (例如 {{ic|1=# \"video=9-pin DIN-1:1024x768-24@60e\"}})
   
 
Section "Screen"
 
Identifier "Screen0"
 
Device    "Card0"
 
Monitor    "Monitor0"
 
DefaultDepth 24
 
SubSection "Display"
 
Viewport  0 0
 
Depth    24
 
EndSubSection
 
EndSection
 
   
 
Section "DRI"
 
Mode 0666
 
EndSection
 
</pre>
 
  
接下来,确定模块fglrx、以及相关需要的模块agp等被加载:
+
You can get list of your video outputs with following command:
  
<pre>
+
{{bc|<nowiki>$ ls -1 /sys/class/drm/ | grep -E '^card[[:digit:]]+-' | cut -d- -f2-</nowiki>}}
# modprobe fglrx
 
</pre>
 
  
把他们加到/etc/rc.conf的modules列表,使它们在系统启动时就加载。
+
== HDMI 音频输出 ==
  
最后,运行startx来启动Xorg,确认direct rendering是否已经打开。在终端输入:
+
HDMI 音频输出在 {{Pkg|xf86-video-ati}} 软件包中提供支持。要启禁用,在[[Kernel parameters (简体中文)|内核参数]]中添加 {{ic|1=radeon.audio=0}}。
$ glxinfo | grep direct
 
如果显示为"direct rendering: yes",恭喜,你成功了!如果提示找不到glxinfo,你可能还需要安装软件包mesa。
 
  
<font color="red">注意:Xorg近期的版本,libs的路径变了,所以有时libGL.so可能没被正确加载(即使已经安装了)。此时别忘了修正路径。 Please read "trouble shooting" section for detail.</font>
+
如果启动后没有视频输出,则请禁用这个参数。
  
== 已知问题及解决 ==
+
{{注意|
=== OpenGL程序支离破碎 ===
+
* 如果在安装驱动后 HDMI 音频没有工作,请使用[[Advanced Linux Sound Architecture (简体中文)#HDMI 输出无效|这里]]提供的方法进行检测。
这个bug已经在8.9版本里面修复了。
+
* 如果在 PulseAudio 中声音出现问题,尝试设置 {{ic|1=tsched=0}}(参见 [[PulseAudio/Troubleshooting#Glitches, skips or crackling]])并确保 {{ic|rtkit}} 守护进程正在运行。
OpenGL programs like e.g. blender in windowed mode, show a rectangle/checkerbox corruption.
+
* 因为 HDA 兼容硬件的相似性,你的声卡可能使用相同的模块。请使用推荐的方式[[Advanced Linux Sound Architecture (简体中文)#设置默认声卡|改变默认声卡]],比如修改 alsa 配置文件的 {{ic|defaults}} 节点。
这个可以通过使用虚拟显示来解决。只要设置虚拟大小为你的显示器横向大小加上64就可以了
+
}}
例如,你的显示器是1600x1200分辨率,那么用1664替代1600
 
  
  Section "Screen"
+
== 多显设置 ==
    Identifier "Screen0"
 
    Device    "Card0"
 
    Monitor    "Monitor0"
 
    SubSection "Display"
 
      Depth    24
 
      Virtual 1664 1200
 
    EndSubSection
 
  EndSection
 
  
===重启或者startx之后黑屏并且系统完全挂起或者锁死===
+
=== 使用 RandR 扩展 ===
这个bug已经上报了,请使用一个能引导的Live CD之类的光盘引导你的电脑,如ubuntu live cd,arch的安装光盘或者安装程序
 
#重启并且用光盘引导电脑。
 
#挂载你的系统分区,如你的系统分区在sda5,需要挂载到/mnt,那么就mount /dev/sda5 /mnt。
 
#查看/var/log/Xorg.0.log,主要是看里面以(EE)开头的内容。可以使用如下命令,grep -e EE /mnt/var/log/Xorg.0.log。
 
#搜索解决出现的问题。
 
#重启并且取出光盘,启动你的Archlinux,测试xorg.conf是否正常。
 
#如果仍然有问题,那么就修改xorg.conf里面驱动fglrx为mesa或者ati或者radeon,至少这样能让你进入图形界面,虽然没有3D加速了。
 
  
===注销后KDM消失===
+
参见 [[Multihead#RandR]]
如果你使用catalyst驱动,并且系统在注销以后自动回到控制台(vc/1),而不是正常时的KDM,你需要命令KDM在每次注销后重新启动X server:
 
$ sudo vim /opt/kde/share/config/kdm/kdmrc
 
[X-*-Core]区段中加入:
 
TerminateServer=True
 
现在当你从KDE注销以后,应该可以看到KDM了。
 
  
===Direct Rendering未开启===
+
=== 独立的 X screen ===
  
打不开Direct Rendering吗?运行:
+
独立的双显示器可以按正常方式配置,radeon 驱动有一个 {{ic|"ZaphodHeads"}} 选项可以把显示的区域绑定到固定的设备,例如:
    $ LIBGL_DEBUG=verbose glxinfo > /dev/null
+
{{hc|/etc/X11/xorg.conf.d/20-radeon.conf|
输出结果的开头部分通常会给出没有direct rendering的原因。
+
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,这时你可以通过 {{ic|"ZaphodHeads" "VGA-0"}} 来更改输出。这在使用多输出显卡时很方便。
  
    '''libGL error: XF86DRIQueryDirectRenderingCapable returned false'''
+
== 关闭垂直同步刷新==
  
*确认你在加载fglrx内核模块之前加载了正确的agp模块。运行hwdetect --show-agp来确定你所需的agp模块,然后确认所有这些模块都被列在rc.conf中的<code>MODULES=</code>序列中,并且'''位于fglrx之前'''。
+
radeon驱动默认启用垂直同步刷新,除了跑分外各种情况下工作良好。要关闭它,可以创建 {{ic|~/.drirc}} (如果已存在请修改),加入以下部分 :
 +
{{hc|~/.drirc|<nowiki>
 +
<driconf>
 +
    <device screen="0" driver="dri2">
 +
        <application name="Default">
 +
            <option name="vblank_mode" value="0" />
 +
        </application>
 +
    </device>
 +
    <!-- Other devices ... -->
 +
</driconf>
 +
</nowiki>}}
  
    '''libGL error: failed to open DRM: Operation not permitted'''
+
请确保是 '''dri2''' , 而不是你的显卡型号(如 r600 )。
    '''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'''
+
=== 使用 EXA 时性能低 ===
    '''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)'''
+
{{注意|仅适用于使用 EXA 的老显卡(R600 或更老).新卡应该使用  Glamor 。}}
    '''libGL error: unable to find driver: fglrx_dri.so'''
+
如果2D性能(比如在终端或浏览器的滚动滑块)有问题, 你可以将 {{ic|Option  "MigrationHeuristic"  "greedy"}} 添加到你的 {{ic|xorg.conf}} 文件的 {{ic|'''Device'''}} 部分. 禁用 {{ic|EXAPixmaps}} 也可能避免一些问题,但是可能带来别的问题,所以不建议使用。
  
* 如果错误信息给出的路径是/usr/X11R6/lib/modules/dri/fglrx_dri.so,先完全地从系统中注销,然后重新登陆。如果你使用图形化的登陆管理器(gdm, kdm, xdm),确认每次登陆时/etc/profile都被用作源。通常可以把/etc/profile作为源加入到~/.xsession或~/.xinitrc中,但设置方式也可能视不同登陆管理器而有所差别。
+
这是一个样例 {{ic|/etc/X11/xorg.conf.d/'''20-radeon.conf'''}}:
  
* 如果错误信息给出的路径是usr/lib/xorg/modules/dri/fglrx_dri.so,可能是有什么装错了。重装fglrx试试看。
+
{{bc|
 +
Section "Device"
 +
        Identifier  "My Graphics Card"
 +
        Driver  "radeon"
 +
        Option "AccelMethod" "exa"
 +
        Option  "MigrationHeuristic"  "greedy"
 +
        #Option "EXAPixmaps" "off"
 +
EndSection
 +
}}
  
 +
=== 添加没有被侦测到的分辨率 ===
  
    '''fglrx: libGL version undetermined - OpenGL module is using glapi fallback'''
+
参见[[Xrandr#Adding_undetected_resolutions|Xrandr的文章]].
  
* 这可能是系统中有多个版本的libGL.so导致的。运行:
+
=== 电视屏幕显示黑边  ===
    $ sudo updatedb
 
    $ locate libGL.so
 
  
应该会返回如下的结果:
+
我的Radeon HD 5770用HDMI连接到电视时, 电视显示图像模糊,周围有2-3cm黑边,用催化剂时不是这样. 这是对付过扫描(Overscan)的(参见[[Wikipedia:Overscan]]),使用xrandr关闭它:
    $ locate libGL.so
+
xrandr --output HDMI-0 --set underscan off
    /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,确保你的系统中'''没有'''下面这些文件:
+
=== KMS启用时,黑幕,没有控制台,但是 X 能够工作 ===
    /usr/X11R6/lib/libGL.so.1.2
 
    /usr/X11R6/lib/libGL.so.1
 
  
===休眠相关===
+
当在同一台PC使用两张或以上的ATI显卡时可能会遇到此问题. 例如 Fujitsu Siemens Amilo PA 3553 笔记本就有这个问题. 这是因为fbcon控制台驱动程序将自己映射到错误显卡的错误 framebuffer 设备上. 在内核参数添加:
==== 无法进入待机/休眠状态 ====
+
fbcon=map:1
想利用休眠脚本进入待机状态时,如果fglrx返回了错误信息,可以这样解决:在/etc/X11/xorg.conf的"Device" section中加入下面的选项,这一选项将允许fglrx模块进入待机状态。
+
这将告诉fbcon映射自己到 {{ic|/dev/fb1}} 而不是 {{ic|/dev/fb0}}.如果这并未解决你的问题,尝试如下配置启动:
  Option      "UseInternalAGPGart" "no"
+
  fbcon=map:0
  
==== 无法从待机状态返回 ====
+
=== 显示器旋转对光标起效却对窗口/内容不起效 ===
如果你打开了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
 
  
===硬件冲突===
+
启用EXA代替glamor的新显卡用户可能会发现,用xrandr旋转显示器将导致光标和显示器尺寸旋转了,但窗口与里面内容却保持原来方向. 另外移动鼠标时光标按照原来的方向移动.若有此问题,在你的 {{ic|/var/log/Xorg.0.log}} 中查找下面这一行:
 +
{{bc|
 +
(EE) RADEON(0): Rotation requires acceleration!
 +
}}
 +
新显卡上使用EXA时加速将被禁用(来源: [https://bugs.freedesktop.org/show_bug.cgi?id=73420#c17 这里]). 你必须从启用EXA ([[#Glamor|参见这里]]{{Broken section link}}) 和旋转中二选一.
  
在某些版本的nForce3主板上(比如nForce 3 250Gb),Radeon显卡没有3D加速。原因尚不明确,据说有一个办法可能让这一组合得到3D加速:用nVIDIA的驱动启动Windows,然后重启(--b)
+
=== 在ATI X1600 (RV530 series)上3D应用程序显示黑窗口 ===
  
可以这样来验证:
+
这三种方法可能有效:
 +
* 将 {{ic|<nowiki>pci=nomsi</nowiki>}} 添加到你的启动器的 [[Kernel parameters|内核参数]].
 +
* 如果没用的话,试试用{{ic|noapic}}代替{{ic|<nowiki>pci=nomsi</nowiki>}}.
 +
* 如果还是没用,你可以试试{{ic|<nowiki>vblank_mode=0 glxgears</nowiki>}} 或者 {{ic|<nowiki>vblank_mode=1 glxgears</nowiki>}},看看哪个对你有用. 然后安装{{AUR|driconf}} , 在{{ic|~/.drirc}}里设置此参数.
  
用root登陆,在控制台输入:
+
=== 从休眠中唤醒后光标崩溃 ===
  
    dmesg | grep agp
+
如果显示器唤醒后光标垂直方向重复刷新,可以在配置文件 {{ic|20-radeon.conf}} 中的 {{ic|"Device"}} 部分里设置 {{ic|"SWCursor" "True"}}。
  
如果你得到类似的结果(这个是基于nForce3的系统)
+
=== 多显示器模式下DisplayPort黑屏 ===
    agpgart: Detected AGP bridge 0
 
    agpgart: Setting up Nforce3 AGP.
 
    agpgart: aperture base > 4G
 
  
并且,如果发出这个命令……
+
尝试以[[kernel parameter|内核参数]] {{ic|1=radeon.audio=0}} 启动。
  
      tail -n 100 /var/log/Xorg.0.log | grep agp
+
=== R9-390 Poor Performance and/or Instability ===
  
得到类似的结果:
+
Firmware issues with R9-390 series cards include poor performance and crashes (frequently caused by gaming or using Google Maps) possibly related DPM. Comment 115 of this bug [https://bugs.freedesktop.org/show_bug.cgi?id=91880 report] includes instructions for a fix.
  
      (EE) fglrx(0): [agp] unable to acquire AGP, error "xf86_ENODEV"
+
=== QHD / UHD / 4k support over HDMI for older Radeon cards ===
  
那就说明你遇到这个BUG了。
+
Older cards have their pixel clock limited to 165MHz for HDMI. Hence, they do not support QHD or 4k only via dual-link DVI but not over HDMI.
  
据说在某些情况下,降级主板的BIOS可能会有帮助,但这毕竟没有在所有的情况下都得到证实。而且,一次失败的BIOS降级有可能令你的硬件报废,所以请慎重行事。
+
One possibility to work around this is to use [https://www.elstel.org/software/hunt-for-4K-UHD-2160p.html.en custom modes with lower refresh rate], e.g. 30Hz.
  
更多关于这一bug的信息及可能的解决方法请看这里http://bugzilla.kernel.org/show_bug.cgi?id=6350
+
Another one is a kernel patch removing the pixel clock limit, but this may damage the card!
  
===Compaq Presario笔记本电脑===
+
Official kernel bug ticket with patch for 4.8: https://bugzilla.kernel.org/show_bug.cgi?id=172421
即使安装了所需的驱动和配置文件,某些笔记本(比如装有Xpress 200M的Presario R4000 )仍然只给你一个空荡荡的屏幕。
 
问题似乎出在内核没有检测到正确的显存信息(即使你只有128M的显存,lspci -v也总是报告为256M)。修改BIOS的选项,使用"SidePort+UMA" ,让128M的显存加上128M的系统内存,这一方法看起来很管用。
 
  
这可能是BIOS或Linux PCI代码的bug。
+
The patch introduces a new kernel parameter {{ic|radeon.hdmimhz}} which alters the pixel clock limit.
  
= 外部资源 =
+
Be sure to use a high speed HDMI cable for this.
这里可以找到更多信息
 
* [http://ati.cchtml.com/buglist.cgi?query_format=specific&order=relevance+desc&bug_status=__open__&product=&content= Unofficial ATI Linux Bugtracker]
 
* [http://www.rage3d.com/board/forumdisplay.php?f=88 Rage3D ATI Linux Forums]
 
* [http://www.thinkwiki.org/wiki/Problems_with_fglrx ThinkWiki fglrx Problems page]
 
* [http://www.phoronix.com/scan.php?page=article&item=560 ATI R300: Open v. Closed Drivers]
 
* [http://www.thinkwiki.org/wiki/Additional_options_for_the_radeon_driver Additional options for the radeon driver]
 

Latest revision as of 13:55, 8 December 2019

翻译状态: 本文是英文页面 ATI翻译,最后翻译时间:2017-12-04,点击这里可以查看翻译后英文页面的改动。

ATI/AMD显卡用户有两个选择:官方的专有驱动(catalystAUR)和开源驱动 (ATIAMDGPU)。本文主要介绍较旧的显卡使用的开源的 ATI/Radeon 驱动. 要选择正确的驱动,请参考Xorg#AMD

在很多显卡上开源驱动的性能几乎已经达到和闭源驱动一样的水平。(参见这里。)同时开源驱动有不错的多显支持,

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

这个页面可以将市场名(例如 Radeon HD4330) 映射到芯片组名(例如 R700).

安装

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

[[Install|安装]软件包 mesa,它提供 DRI 和 3D 加速。

加速视频解码mesa-vdpaulib32-mesa-vdpau 包提供支持。

载入

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

要是没有的话...

配置

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

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

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

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

早启动 KMS

提示: 若分辨率有问题,试试强设模式[broken link: invalid section]也许可以解决.

现在 radeon 支持并需要内核级显示模式设置 (KMS)。KMS 默认启用。

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

MODULES="... radeon ..."

重生成initramfs:

# mkinitcpio -p linux

下次重启生效.

性能调整

启动视频加速

参见Hardware video acceleration

驱动设置

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

请在应用驱动选项之前先阅读 radeon(4)RadeonFeature

Acceleration architecture; Glamor是一种使用OpenGL的 2D加速方式,适用于R300及以上显卡驱动。 自xf86-video-ati版本1:7.2.0-1后, 在radeonsi(南方群岛系列 和 superior GFX 显卡)上glamor默认启用; 在其他显卡默认使用 EXA.

Option "AccelMethod" "glamor"

使用 Glamor 加速方式时可以启用 ShadowPrimary 选项,它将启用一个被称为 "shadow primary" 的缓冲区来供CPU快速存取像素信息,并给每个显示控制器 (CRTC) 分离出单独的 scanout 缓冲区。这将提升某些 2D 工作的性能,但可能会降低其他(比如3D)工作的性能。

Option "ShadowPrimary" "on"

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

Option "ColorTiling" "on"
Option "ColorTiling2D" "on"

DRI3 默认是启用的,老卡默认使用 DRI2, 要切换到 DRI3:

Option "DRI" "3"

TearFree 使用硬件的 flipping mechanism 机制来防止撕裂。当前启用这个选项会禁用 "EnablePageFlip" 选项。

Option "TearFree" "on"

EXAVSync 选项仅在使用 EXA 加速方式时有效,它通过stalling the engine until the display controller has passed the destination region来避免撕裂。这将导致性能下降,并已知在某些芯片上导致不稳定。

Option "EXAVSync" "yes"

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

Section "Device"
        Identifier  "Radeon"
        Driver "radeon"
        Option "AccelMethod" "glamor"
        Option "DRI" "3"
        Option "TearFree" "on"
        Option "ColorTiling" "on"
        Option "ColorTiling2D" "on"
EndSection
提示: driconfAUR 是一个可以修改诸多设置的小工具,如 vsync, anisotropic filtering, texture compression 等。它还有一些程序(比如Goole Earth)需要的"disable Low Impact fallback"功能。

内核参数

提示: 你也许想用 systool 来调试新的参数,参见这里[broken link: invalid section]

如果 gartsize 没有被自动检测到,请添加 radeon.gartsize=32内核参数来手动定义它。

注意: 对于新的AMD显卡不再需要设置这个参数:
[drm] Detected VRAM RAM=2048M, BAR=256M
[drm] radeon: 2048M of VRAM memory ready
[drm] radeon: 2048M of GTT memory ready.

重启后生效。

关闭 PCIE 2.0

从3.6版内核开始,radeon里PCIE 2.0选项默认启用。

对一些主板可能不稳定,可以向内核参数添加 radeon.pcie_gen2=0 来关闭。

参考 Phoronix 文章

Gallium HUD

radeonsi 驱动支持激活一个HUD,来显示透明的图像及文字于正在渲染的程序(如游戏)之上。可以显示当前帧率,每个CPU核心负载或者CPU负载平均值。这个HUD受 GALLIUM_HUD 环境变量控制,可以添加一些参数如:

  • "fps" - 显示当前帧率
  • "cpu" - 显示平均CPU负载
  • "cpu0" - 显示第一个CPU核心负载
  • "cpu0+cpu1" - 显示前两个CPU核心负载
  • "draw-calls" - 显示一个物体的每个材质被显示到屏幕上多少次(displays how many times each material in an object is drawn to the screen)
  • "requested-VRAM" - 显示GPU的VRAM使用量
  • "pixels-rendered" - 显示正在显示的像素计数

关于参数的完整列表以及操作GALLIUM_HUD的一些注意事项,你可以添加"help"参数运行一个简单程序(如glxgears)来查看相应的终端输出。

# GALLIUM_HUD="help" glxgears

更多信息参见 邮件列表页面这篇博客.

混合交火

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

  • 如果不需要运行很吃GPU的程序,可以禁用独立显卡(参见Ubuntu wiki ): echo OFF > /sys/kernel/debug/vgaswitcheroo/switch
  • PRIME是在Linux系统中使用双显卡切换的正确方式,但仍然需要用户进行大量手动设置。

节能

注意: 所有vbios中包含有适当电源状态表的显卡芯片(R1xx 及更新的)都支持电源管理。"dpm"仅在 R6xx 以及更新的芯片上被支持。

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

三种方法可供选择:

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

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

动态电源管理

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

Tip: DPM 可以支持 R6xx,但是在内核里默认没有启用,仅 R7xx 及之后的显卡才默认启用. 在内核参数中加入 radeon.dpm=1 可以启用 dpm.

不像dynpm,“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

命令行工具

  • radcard - 一个获取/调整 DPM 电源状态与级别的脚本。

老方法

动态频率调整

此方法根据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

永久配置

上述方法不是永久性的,系统重启后将丢失。为了让它一直有效,可以使用udev规则, 例如设置基于计划的频率调整 :

/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

其它

要查看当前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.

风扇速度

即使上述省电功能应该能很好调整风扇速度,一些显卡在空闲状态时仍然太吵了。这时,如果你的风扇支持的话,你可以尝试手动改变风扇速度。

注意:
  • 请谨记以下方法会将风扇速度设置为固定值,它不会随着 gpu 的压力而调整,所以在高负荷工作时这有可能导致过热。
  • 设置低于标准的数值时最好检查你的 gpu 温度。

首先,输入如下命令来启用 gpu(或者在多 gpu 的情况下,第一个 gpu)的风扇手动调速。

# echo 1 > /sys/class/drm/card0/device/hwmon/hwmon0/pwm1_enable

接下来设置你想要的风扇速度,可选的数值为 0 到 255,分别对应 0-100% 的风扇速度。(比如下例设置为了大约 20%)

# echo 55 > /sys/class/drm/card0/device/hwmon/hwmon0/pwm1

如果要让此成为永久设置,使用 #永久配置

如果固定值不符合你的期望,还可以自定义为按一个温度/风扇速度曲线来调整,比如写一个脚本,来根据当前温度 (/sys/class/drm/card0/device/hwmon/hwmon0/temp1_input) 设置风扇速度,最好还能设置为温度变化后延迟调整。这里有一个图形界面的工具:radeon-profile-gitAUR

TV输出

首先,检查你有S-video输出: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

在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 Legacy 可直接接受如上参数。
  • LILO 需要在双引号前使用“\”转义 (例如 # \"video=9-pin DIN-1:1024x768-24@60e\")

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 软件包中提供支持。要启禁用,在内核参数中添加 radeon.audio=0

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

注意:
  • 如果在安装驱动后 HDMI 音频没有工作,请使用这里提供的方法进行检测。
  • 如果在 PulseAudio 中声音出现问题,尝试设置 tsched=0(参见 PulseAudio/Troubleshooting#Glitches, skips or crackling)并确保 rtkit 守护进程正在运行。
  • 因为 HDA 兼容硬件的相似性,你的声卡可能使用相同的模块。请使用推荐的方式改变默认声卡,比如修改 alsa 配置文件的 defaults 节点。

多显设置

使用 RandR 扩展

参见 Multihead#RandR

独立的 X screen

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

/etc/X11/xorg.conf.d/20-radeon.conf
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" 来更改输出。这在使用多输出显卡时很方便。

关闭垂直同步刷新

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

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

请确保是 dri2 , 而不是你的显卡型号(如 r600 )。

故障排除

使用 EXA 时性能低

注意: 仅适用于使用 EXA 的老显卡(R600 或更老).新卡应该使用 Glamor 。

如果2D性能(比如在终端或浏览器的滚动滑块)有问题, 你可以将 Option "MigrationHeuristic" "greedy" 添加到你的 xorg.conf 文件的 Device 部分. 禁用 EXAPixmaps 也可能避免一些问题,但是可能带来别的问题,所以不建议使用。

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

Section "Device"
        Identifier  "My Graphics Card"
        Driver  "radeon"
        Option "AccelMethod" "exa"
        Option  "MigrationHeuristic"  "greedy"
        #Option "EXAPixmaps" "off"
EndSection

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

参见Xrandr的文章.

电视屏幕显示黑边

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

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

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

当在同一台PC使用两张或以上的ATI显卡时可能会遇到此问题. 例如 Fujitsu Siemens Amilo PA 3553 笔记本就有这个问题. 这是因为fbcon控制台驱动程序将自己映射到错误显卡的错误 framebuffer 设备上. 在内核参数添加:

fbcon=map:1

这将告诉fbcon映射自己到 /dev/fb1 而不是 /dev/fb0.如果这并未解决你的问题,尝试如下配置启动:

fbcon=map:0

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

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

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

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

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

这三种方法可能有效:

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

从休眠中唤醒后光标崩溃

如果显示器唤醒后光标垂直方向重复刷新,可以在配置文件 20-radeon.conf 中的 "Device" 部分里设置 "SWCursor" "True"

多显示器模式下DisplayPort黑屏

尝试以内核参数 radeon.audio=0 启动。

R9-390 Poor Performance and/or Instability

Firmware issues with R9-390 series cards include poor performance and crashes (frequently caused by gaming or using Google Maps) possibly related DPM. Comment 115 of this bug report includes instructions for a fix.

QHD / UHD / 4k support over HDMI for older Radeon cards

Older cards have their pixel clock limited to 165MHz for HDMI. Hence, they do not support QHD or 4k only via dual-link DVI but not over HDMI.

One possibility to work around this is to use custom modes with lower refresh rate, e.g. 30Hz.

Another one is a kernel patch removing the pixel clock limit, but this may damage the card!

Official kernel bug ticket with patch for 4.8: https://bugzilla.kernel.org/show_bug.cgi?id=172421

The patch introduces a new kernel parameter radeon.hdmimhz which alters the pixel clock limit.

Be sure to use a high speed HDMI cable for this.