QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1936|回复: 10

ML下ATI驱动安装的补充

[复制链接]
发表于 2005-7-2 21:03:50 | 显示全部楼层 |阅读模式
前面我写过9550+nf2+k2.6.12.1+xorg:3D加速成功 ,现在写一下安装经验。
基本上,这篇文章是对
中国Linux公社 -viewtopic-ATI 芯片显卡安装完全手册
中国Linux公社 -viewtopic-Magic 1.2f 下ATI显卡驱动安装详细功略
的补充,只有按上面两篇的方法还是不能用3D加速,才需要看。
这里需要的许多错误信息是从/var/log/Xorg.0.log和dmesg中得到的。

假设已经装好fglrx支持的XFree86 4.2,4.3版本或X.org 6.8及以上。如果没有装好,请参看下面的连接。到ATI找到适合的驱动。有适合的补丁。

rpm -ivh --force fglrx_6_8_0-8.14.13-1.i386.rpm
cp *.patch /lib/modules/fglrx/
cp *.diff /lib/modules/fglrx/
cd /lib/modules/fglrx
patch -p0 < *.patch
cd build_mod
chmod 755 make.sh
./make.sh
cd ..
chmod 755 make_install.sh
./make_install.sh
modprobe agpgart
modprobe xxx-agp
modprobe fglrx
fglrxconfig
startx
glxinfo |grep direct

这时出现
  direct rendering: Yes
就成功了。


中国Linux公社 -viewtopic-ATI 芯片显卡安装完全手册
http://www.linuxfans.org/nuke/modules.php?name=Forums&file=viewtopic&t=25497&highlight=%CF%D4%BF%A8

中国Linux公社 -viewtopic-Magic 1.2f 下ATI显卡驱动安装详细功略
http://www.linuxfans.org/nuke/modules.php?name=Forums&file=viewtopic&t=113495

ATI的Linux驱动程序
https://support.ati.com/ics/support/default.asp?deptID=894&task=knowledge&folderID=27

ATI Linux driver packages for Debian
http://xoomer.virgilio.it/flavio.stanchina/debian/fglrx-installer.html

ATI的官方论坛
http://www.rage3d.com/

非官方ATI Linux驱动bugzilla,有许多补丁。
http://ati.cchtml.com/


补充:
1.补丁
2.AGP驱动
3.此驱动支持的芯片,不支持(但是可能支持)时的办法
4.添加字体
5.unable to acquire AGP, error "xf86_ENOMEM"问题

--------------------------------------------------------------------------------------------------------------
1.补丁
    我的建议是,能不用补丁就不用,能少用就少用,实在不行再打补丁。ATI驱动目前只支持到kernel2.6.11,请找到适合你的内核版本的补丁。ys021662在“中国Linux公社 -viewtopic-Magic 1.2f 下ATI显卡驱动安装详细功略”中提到的补丁,可以看看。我只有用于kernel2.6.12的补丁2.6.12集成补丁 ,是从http://ati.cchtml.com/show_bug.cgi?id=136找到的,前一天,还是几个分开的,我装好后再去一看,已经合成一个了,可能这个会更好,不会出现我的问题。http://www.rage3d.com/是ATI的官方论坛,其中的Linux版,有不少关于在Linux下驱动ATI显卡的文章。


--------------------------------------------------------------------------------------------------------------
2.AGP驱动
关于AGP驱动的问题,从
ATI Linux driver packages for Debian
http://xoomer.virgilio.it/flavio.stanchina/debian/fglrx-installer.html
摘录一段,不想看E文的可以看下面的翻译(很烂),下面是我的总结

You need some support for your AGP chipset. You have two choices: the ATI driver's built-in AGP support or the kernel agpgart driver. It's difficult to say in advance which one is better or will work at all, because it depends on the exact driver and kernel versions you're using, but the kernel driver should be your preferred choice if it works for you. To use the kernel driver, add the following line to the "Device" section of your XFree86 config file:
Option "UseInternalAGPGART" "no"

The XFree86 configuration is discussed in more detail below, but the AGP configuration is important so I'm mentioning this detail early because I'd like to make sure that it sticks in your memory somewhere.
The error unable to acquire AGP, error "xf86_ENOMEM" in your XFree86 log usually means that you are using the built-in AGP support with an unsupported chipset. Set "UseInternalAGPGART" to "no" and load the kernel driver (see below for details) which will hopefully support your AGP chipset.
If you want to use the ATI driver's built-in AGP support instead, set "UseInternalAGPGART" to "yes" (it's the default setting, so you can just omit it) and make sure that the kernel driver is not compiled into your kernel: either compile it as a module or disable it entirely. Beware that discover (and possibly other hardware detection tools) might try to load the kernel driver automatically during startup. If that happens to you, you can tweak discover's configuration or you can simply move the agpgart.* files away from /lib/modules.
If neither one supports your chipset, try using the kernel driver with the agp_try_unsupported=1 option on the kernel command line or as a parameter when you load the module.
Note that in the 2.6 kernel the AGP chipset drivers are separate from the agpgart driver itself, so if you build them as modules you will need to load the agpgart module and a chipset module such as via-agp, nvidia-agp, etc.

你需要AGP芯片的支持。有两个选择:ATI驱动的内建AGP支持 或者 内核的agpgart驱动。很难说哪个更好甚至于能不能用,因为这依赖于你使用的驱动与内核的精确版本,但是如果内核驱动能用的话,它是你应该用的选择。
要使用内核驱动,把下面一行加入你的XFree86配置文件:
Option "UseInternalAGPGART" "no"
XFree86的配置将在下面讨论细节,但是AGP配置是重要的,所以我才提前提到这个细节,我要确定这个细节已经扎根在你的脑海。
在XFree86 log中的这个错误:unable to acquire AGP, error "xf86_ENOMEM",意味着你使用内建的AGP支持碰到了不支持的芯片。那就把"UseInternalAGPGART"设为"no",然后装入内核驱动(细节参看下面),它很有希望支持你的芯片。
如果你想用ATI驱动的内建AGP支持,那就把"UseInternalAGPGART"设为"yes"(这是默认设置,所以你可以忽略它)并确定内核驱动没有编译进内核:或者编译为模块module,或者完全禁用。注意,discover(可能是其他的硬件检测工具)会在系统启动时自动装入内核驱动。如果发生这个,你可以调整discover的配置,或者把agpgart.*从/lib/modules中移走。
如果两种方法都不支持你的芯片,试试内核驱动,使用agp_try_unsupported=1选项,在内核命令行,或者作为装入模块时的参数。
注意2.6内核中,AGP芯片的驱动程序是和agpgart驱动分开的,如果你把它们编译为模块的话,你需要装入agpgart模块和一个芯片的模块,比如via-agp, nvidia-agp等。

我的建议是:
    编译内核时,把agpgart和芯片驱动(via-agp, nvidia-agp等)都编译成模块,就是有两个文件agpgart.ko和xxx-agp.ko(一般在/lib/modules/内核版本号/kernel/drivers/char/agp)。这样ATI驱动的内建AGP支持 或者 内核的agpgart驱动都可以用。如果一种不行的话,不用再编译内核就可以换另一种。至于上面说的agp_try_unsupported=1,我实在不知道怎么传入,没用过。
a.用内核的agpgart驱动:
X配置文件中:        Option "UseInternalAGPGART" "no"
modprobe agpgart
modprobe xxx-agp
modprobe fglrx
用lsmod确定上面三个模块都装入再startx。

b.用ATI驱动的内建AGP支持:
X配置文件中:        Option "UseInternalAGPGART" "yes"
简单一点,把agpgart.ko改名后重启。
lsmod |grep agpgart 确定agpgart和xxx-agp都没有装入。
modprobe fglrx
startx

--------------------------------------------------------------------------------------------------------------
3.此驱动支持的芯片:
(II) ATI Radeon/FireGL: The following chipsets are supported:
        RADEON 9000/9000 PRO (RV250 4966), RADEON 9000 LE (RV250 4967),
        MOBILITY FireGL 9000 (M9 4C64), MOBILITY RADEON 9000 (M9 4C66),
        RADEON 9000 PRO (D9 4C67), RADEON 9250 (RV280 5960),
        RADEON 9200 (RV280 5961), RADEON 9200 SE (RV280 5964),
        MOBILITY RADEON 9200 (M9+ 5C61), MOBILITY RADEON 9200 (M9+ 5C63),
        FireGL 8800 (R200 514, RADEON 8500 (R200 514C),
        RADEON 9100 (R200 514D), RADEON 8500 AIW (R200 4242),
        RADEON 9600 (RV350 4150), RADEON 9600 SE (RV350 4151),
        RADEON 9600 PRO (RV360 4152),
        MOBILITY RADEON 9600/9700 (M10/M11 4E50), RADEON 9500 (R300 4144),
        RADEON 9600 TX (R300 4146), FireGL Z1 (R300 4147),
        RADEON 9700 PRO (R300 4E44), RADEON 9500 PRO/9700 (R300 4E45),
        RADEON 9600 TX (R300 4E46), FireGL X1 (R300 4E47),
        RADEON 9800 SE (R350 414, RADEON 9550 (RV350 4153),
        FireGL T2 (RV350 4154), RADEON 9800 PRO (R350 4E4,
        RADEON 9800 (R350 4E49), RADEON 9800 XT (R360 4E4A),
        FireGL X2-256/X2-256t (R350 4E4B),
        MOBILITY FireGL T2/T2e (M10/M11 4E54), RADEON X300 (RV370 5B60),
        RADEON X600 (RV380 5B62), FireGL V3100 (RV370 5B64),
        MOBILITY RADEON X300 (M22 5460), MOBILITY FireGL V3100 (M22 5464),
        RADEON X600 (RV380 3E50), FireGL V3200 (RV380 3E54),
        MOBILITY RADEON X600 (M24 3150), MOBILITY RADEON X300 (M22 3152),
        MOBILITY FireGL V3200 (M24 3154), RADEON X800 (R420 4A4,
        RADEON X800 PRO (R420 4A49), RADEON X800 SE (R420 4A4A),
        RADEON X800 XT (R420 4A4B), RADEON X800 (R420 4A4C),
        FireGL X3-256 (R420 4A4D), MOBILITY RADEON 9800 (M18 4A4E),
        RADEON X800 XT Platinum Edition (R420 4A50), RADEON X800 (R423 554,
        RADEON X800 PRO (R423 5549),
        RADEON X800 XT Platinum Edition (R423 554A),
        RADEON X800 SE (R423 554B), RADEON X800 XT (R423 5D57),
        FireGL V7100 (R423 5550), FireGL V5100 (R423 5551),
        MOBILITY RADEON X800 XT (M28 5D4, MOBILITY FireGL V5100 (M28 5D49),
        RADEON X800 XL (R430 554D), RADEON X800 (R430 554F),
        RADEON X850 XT Platinum Edition (R480 5D4D),
        RADEON X850 PRO (R480 5D4F), RADEON X850 XT (R480 5D52),
        MOBILITY FireGL V5000 (M26 564A), MOBILITY FireGL V5000 (M26 564B),
        FireGL V5000 (RV410 5E4, FireGL V3300 (RV410 5E49),
        RADEON X700 XT (RV410 5E4A), RADEON X700 PRO (RV410 5E4B),
        RADEON X700 SE (RV410 5E4C), RADEON X700 (RV410 5E4D),
        RADEON X700 (RV410 5E4F), MOBILITY RADEON X700 (M26 5652),
        MOBILITY RADEON X700 (M26 5653), RADEON 9100 IGP (RS300 5834),
        RADEON 9000 PRO/9100 PRO IGP (RS350 7834),
        MOBILITY RADEON 9000/9100 IGP (RS300M 5835)

认出的情况(/var/log/Xorg.0.log):
(II) Primary Device is: PCI 02:00:0
(WW) fglrx: No matching Device section for instance (BusID PCI:2:0:1) found
(**) Chipset RADEON 9550 (RV350 4153) found

如果你的显卡不在里面,或没被认出,在上面的表里找一个芯片相同的(比如用RADEON 9600 (RV350 4150)替代RADEON 9550 (RV350 4153)),在X的配置文件里面这样写,就是加上ChipId。
########        Section "Device"
########                Identifier  "ATI Graphics Adapter"
########                Driver      "fglrx"
########                VendorName  "Videocard vendor"
########                BoardName   "ATI Radeon 9550"
########                ChipId      0x4150
########        EndSection

--------------------------------------------------------------------------------------------------------------
4.字体

X.org没有找到所有字体,在/etc/X11/xorg.conf的字体部分加上:
    FontPath         "/usr/share/fonts:unscaled"
    FontPath         "/usr/share/fonts/default/Type1"
    FontPath         "/usr/share/fonts/pcf/zh_CN:unscaled"
    FontPath         "/usr/share/fonts/ttf/zh_CN"
    FontPath         "/usr/share/fonts/override"
    FontPath         "/usr/share/fonts/Chinese/wqy-bitmapfont:unscaled"

--------------------------------------------------------------------------------------------------------------
5.unable to acquire AGP, error "xf86_ENOMEM"问题

不能打开3D加速时,如果/var/log/Xorg.0.log里出现
(EE) fglrx(0): [agp] unable to acquire AGP, error "xf86_ENOMEM"
(EE) fglrx(0): cannot init AGP

仔细看看:2.AGP驱动

用dmesg看看:

当    Option "UseInternalAGPGART"         "no"时,有没有这个:
[fglrx] module unloaded - fglrx 8.14.13 [Jun  8 2005] on minor 0
[fglrx] Maximum main memory to use for locked dma buffers: 430 MBytes.
ACPI: PCI Interrupt 0000:02:00.0[A] -> Link [LNK4] -> GSI 12 (level, low) -> IRQ 12
[fglrx] module loaded - fglrx 8.14.13 [Jun  8 2005] on minor 0
[fglrx] *ERROR* Kernel AGP support was not present at module build time.
[fglrx] *ERROR* Process 12013 using kernel context 0


当    Option "UseInternalAGPGART"         "yes",可能有这个:
[fglrx] module unloaded - fglrx 8.14.13 [Jun  8 2005] on minor 0
[fglrx] Maximum main memory to use for locked dma buffers: 430 MBytes.
ACPI: PCI Interrupt 0000:02:00.0[A] -> Link [LNK4] -> GSI 12 (level, low) -> IRQ 12
[fglrx] module loaded - fglrx 8.14.13 [Jun  8 2005] on minor 0
[fglrx] *ERROR* Kernel AGP support was not present at module build time.
[fglrx] *ERROR* Process 12013 using kernel context 0
Fire GL built-in AGP-support
Based on agpgart interface v0.99 (c) Jeff Hartmann
agpgart: Maximum main memory to use for agp memory: 439M
agpgart: Detected nVidia nForce2 chipset
agpgart: Bridge device is in AGP v3 mode
agpgart: AGP aperture is 64M @ 0xe0000000
Power management callback for AGP chipset installed
[fglrx] AGP detected, AgpState   = 0x00000000 (hardware caps of chipset)
[fglrx] *ERROR* Process 12217 using kernel context 0

这时,试试换一个AGP驱动,就是 ATI驱动的内建AGP支持 和 内核的agpgart驱动 互换。
Option "UseInternalAGPGART"的yes换成no,no换成yes。按照2.AGP驱动,最后的我的建议。

如果,两个驱动都是 unable to acquire AGP, error "xf86_ENOMEM"的话,
恭喜你,和我一样中奖了,不能用kernel的agp,连fglrx的agp驱动也不能用,看看这一行:
[fglrx] *ERROR* Kernel AGP support was not present at module build time.
fglrx编译时就没找到agp,重新编译也没用,如果没有patch的话,只有自己改fglrx的源码了:


#define __AGP__
加到/lib/modules/fglrx/build_mod/firegl_public.h
或/lib/modules/fglrx/build_mod/firegl_public.c
的开始

刚看到, http://ati.cchtml.com/show_bug.cgi?id=136 上有人说是某个补丁在Makefile中删除了__AGP__,所以更好的办法是在Makefile中加__AGP__(应该是在编译选项中加-D__AGP__)。

再重新编译,安装,用
Option "UseInternalAGPGART"         "no"
作为配置,
modprobe agpgart
modprobe xxx-agp
modprobe fglrx
startx

这次dmesg看看有没有
[fglrx] *ERROR* Kernel AGP support was not present at module build time.

没有的话,应该是这个:
/var/log/X.0.log
(II) fglrx(0): [agp] Mode=0x1f00421b bridge: 0x10de/0x01e0
(II) fglrx(0): [agp] AGP v1/2 disable mask 0x00000000
(II) fglrx(0): [agp] AGP v3 disable mask   0x00000000
(II) fglrx(0): [agp] enabling AGP with mode=0x1f00431a
(II) fglrx(0): [agp] AGP protocol is enabled for graphics board. (cmd=0x1f004312)
(II) fglrx(0): [agp] graphics chipset has AGP v3.0 (native mode)

dmesg
[fglrx] module loaded - fglrx 8.14.13 [Jun  8 2005] on minor 0
[fglrx] Kernel AGP support doesn't provide agplock functionality.
[fglrx] AGP detected, AgpState   = 0x1f00421b (hardware caps of chipset)
agpgart: Found an AGP 3.0 compliant device at 0000:00:00.0.
agpgart: Putting AGP V3 device at 0000:00:00.0 into 8x mode
agpgart: Putting AGP V3 device at 0000:02:00.0 into 8x mode
[fglrx] AGP enabled,  AgpCommand = 0x1f004312 (selected caps)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
发表于 2005-7-2 21:25:54 | 显示全部楼层
文章很好,不过补丁不敢恭维,
补丁中一大半是修改注释的,像下面这样把“//....”该成"/* .... */"
-        agp_free_key(curr->key);    // release the agp handle
-        vfree(curr->memory);        // release the table with the phys adresses
-        kfree(curr);                // release the agp_memory structure itself
+        agp_free_key(curr->key);    /* release the agp handle */
+        vfree(curr->memory);        /* release the table with the phys adresses */
+        kfree(curr);                /* release the agp_memory structure itself */

批评不妥的地方还请原谅。
总的来说,下了一番功夫,不过表象的东西太多:)
回复

使用道具 举报

发表于 2005-7-2 21:27:09 | 显示全部楼层
我的FireGL Mobility 7800怎么办,难道不能装? :-(
回复

使用道具 举报

 楼主| 发表于 2005-7-2 21:39:33 | 显示全部楼层
我说过,2.6.12集成补丁 ,是从http://ati.cchtml.com/show_bug.cgi?id=136找到的,我还写不出,虽然有很多修改注释的,但没有它还真的不能在2.6.12下编译。

不过,这个补丁似乎还引入了Bug,就是我说的__AGP__。据说是在Makefile中简单的关闭了AGP支持。

有人和你说的一样:
------- Additional Comment #44 From Sergey Vlasov 2005-07-02 08:08 EST  [reply] -------  
(In reply to comment #3
> Created an attachment (id=121) [edit] [edit]
> USE _THIS_ and this ALONE!!! It is a consolidated patch; allows fglrx + 2.6.12
> to compile and run.

This patch includes lots of formatting changes, which obscure real modifications
to the code.  And it just turns off kernel AGP support instead of adding
compatibility with 2.6.12 interfaces - therefore the driver won't work with some
newer chipsets which are supported by the in-kernel AGP drivers, but not
supported by the old AGP driver included in fglrx.
回复

使用道具 举报

发表于 2005-7-2 21:41:00 | 显示全部楼层
如果显卡不算新,kernel 和 XFree 自带的 DRI 驱动就可以了。

用新显卡的人只能装驱动。
回复

使用道具 举报

 楼主| 发表于 2005-7-2 21:42:31 | 显示全部楼层
[quote:8c2fa8c652="fantasy2"]我的FireGL Mobility 7800怎么办,难道不能装? :-([/quote]

这个驱动是从R8500开始支持,之前的显卡,只能用XFree86或X.org自带radeon驱动。
回复

使用道具 举报

发表于 2005-7-3 09:30:29 | 显示全部楼层
我用的9200se,用系统自带的驱程玩魔兽、CS都很好。显卡选项那里设置如下:
Section "Device"
        Identifier "ATI Radeon 9200SE"
        Driver "radeon"
        BoardName "Unknown"
        Option "AGPMODE" "4"
        Option "EnablePageFlip" "true"
EndSection

内核用的2.6.12,在玩游戏时要注意dri的权限,有了能访问dri的权限才能有3d支持。
chmod 666 /dev/dri/*
回复

使用道具 举报

发表于 2005-7-3 09:42:12 | 显示全部楼层
[code:1]--- lib/modules/fglrx/build_mod/2.6.x/Makefile.old        2005-04-06 00:25:08.000000000 +0300
+++ lib/modules/fglrx/build_mod/2.6.x/Makefile        2005-05-11 05:17:33.000000000 +0300
@@ -13,7 +13,6 @@

EXTRA_CFLAGS    += \
                 -I$(PWD) \
-                -D__AGP__ \
                 -DFGL \
                 -DFGL_LINUX \
                 -DFGL_GART_RESERVED_SLOT \
[/code:1]
这个 patch 吧,改回来就好了。[/code]
回复

使用道具 举报

发表于 2005-7-22 10:05:38 | 显示全部楼层
[root@HUST_TURINGCAT fglrx]# ./make_install.sh
- creating symlink
- recreating module dependency list
- trying a sample load of the kernel module
FATAL: Error inserting fglrx (/lib/modules/2.6.12.3/kernel/drivers/char/drm/fglrx.ko): Invalid module format
failed.
我出现这个错误~
是什么原因?
回复

使用道具 举报

发表于 2005-7-22 23:22:03 | 显示全部楼层
patch -p0 < *.patch
是否:
patch -p0 < *.patch *.diff  ?????
回复

使用道具 举报

发表于 2005-7-23 00:18:37 | 显示全部楼层
都打了~

补丁单用use_this_patch.diff还不够吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-29 17:53 , Processed in 0.042671 second(s), 17 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表