Fedora 16 Installation Guide: Difference between revisions

From cchtml.com
Line 11: Line 11:
=== Compilation Problems on x86_64 Fedora 16 ===
=== Compilation Problems on x86_64 Fedora 16 ===


Due to an upstream sourcecode change in the Fedora ''kernel-headers'' package, building of AMD's ''fglrx'' module will currently fail with kernels 3.2.9-2.fc16 and later.
Due to an upstream sourcecode change in the Fedora ''kernel-headers'' package, building of AMD's ''fglrx'' module will currently fail with kernels 3.2.9-2.fc16 and later. If you are getting the following error in your /usr/share/ati/fgrlx-install.log:


To fix this, we can revert a small edit. Open the file '''/usr/src/kernels/`uname -r`/arch/x86/include/asm/uaccess_64.h''' in a text editor.
<pre>
 
make[1]: Entering directory `/usr/src/kernels/3.3.0-4.fc16.x86_64'
  CC [M]  /lib/modules/fglrx/build_mod/2.6.x/firegl_public.o
  CC [M]  /lib/modules/fglrx/build_mod/2.6.x/kcl_acpi.o
In file included from /usr/src/kernels/3.3.0-4.fc16.x86_64/arch/x86/include/asm/uaccess.h:575:0,
                from include/asm-generic/termios.h:51,
                from /usr/src/kernels/3.3.0-4.fc16.x86_64/arch/x86/include/asm/termios.h:1,
                from include/linux/termios.h:5,
                from include/linux/tty.h:41,
                from include/linux/vt_kern.h:11,
                from /lib/modules/fglrx/build_mod/2.6.x/kcl_acpi.c:35:
/usr/src/kernels/3.3.0-4.fc16.x86_64/arch/x86/include/asm/uaccess_64.h: In function ‘copy_from_user’:
/usr/src/kernels/3.3.0-4.fc16.x86_64/arch/x86/include/asm/uaccess_64.h:57:7: error: called object ‘2’ is not a function
make[2]: *** [/lib/modules/fglrx/build_mod/2.6.x/kcl_acpi.o] Error 1
make[1]: *** [_module_/lib/modules/fglrx/build_mod/2.6.x] Error 2
make[1]: Leaving directory `/usr/src/kernels/3.3.0-4.fc16.x86_64'
make: *** [kmod_build] Error 2
build failed with return value 2
[Error] Kernel Module : Failed to compile kernel module - please consult readme.
</pre>
 
Then this procedure is confirmed to work on 64 bit Fedora 16.
 
Open the file '''/usr/src/kernels/`uname -r`/arch/x86/include/asm/uaccess_64.h''' in a text editor.


On line 56 and 57 you will see:
On line 56 and 57 you will see:

Revision as of 02:42, 24 March 2012

Installing the Official AMD driver

Requirements

The AMD-supplied driver will work best in most cases if there is no xorg.conf file present before you begin the installation process. Move any existing xorg.conf files out of the /etc/X11 directory before installation.

You will need version 11.11 of the ATI driver or later for Fedora 16, earlier versions will not work with the version of XOrg that F16 ships with.

You require a Radeon HD2000 series or better to use the latest AMD-supplied driver.

Compilation Problems on x86_64 Fedora 16

Due to an upstream sourcecode change in the Fedora kernel-headers package, building of AMD's fglrx module will currently fail with kernels 3.2.9-2.fc16 and later. If you are getting the following error in your /usr/share/ati/fgrlx-install.log:


make[1]: Entering directory `/usr/src/kernels/3.3.0-4.fc16.x86_64'
  CC [M]  /lib/modules/fglrx/build_mod/2.6.x/firegl_public.o
  CC [M]  /lib/modules/fglrx/build_mod/2.6.x/kcl_acpi.o
In file included from /usr/src/kernels/3.3.0-4.fc16.x86_64/arch/x86/include/asm/uaccess.h:575:0,
                 from include/asm-generic/termios.h:51,
                 from /usr/src/kernels/3.3.0-4.fc16.x86_64/arch/x86/include/asm/termios.h:1,
                 from include/linux/termios.h:5,
                 from include/linux/tty.h:41,
                 from include/linux/vt_kern.h:11,
                 from /lib/modules/fglrx/build_mod/2.6.x/kcl_acpi.c:35:
/usr/src/kernels/3.3.0-4.fc16.x86_64/arch/x86/include/asm/uaccess_64.h: In function ‘copy_from_user’:
/usr/src/kernels/3.3.0-4.fc16.x86_64/arch/x86/include/asm/uaccess_64.h:57:7: error: called object ‘2’ is not a function
make[2]: *** [/lib/modules/fglrx/build_mod/2.6.x/kcl_acpi.o] Error 1
make[1]: *** [_module_/lib/modules/fglrx/build_mod/2.6.x] Error 2
make[1]: Leaving directory `/usr/src/kernels/3.3.0-4.fc16.x86_64'
make: *** [kmod_build] Error 2
build failed with return value 2
[Error] Kernel Module : Failed to compile kernel module - please consult readme.

Then this procedure is confirmed to work on 64 bit Fedora 16.

Open the file /usr/src/kernels/`uname -r`/arch/x86/include/asm/uaccess_64.h in a text editor.

On line 56 and 57 you will see:

else
WARN(1, "Buffer overflow detected!\n");

Comment this out so it reads:

// else
// WARN(1, "Buffer overflow detected!\n"); 

Your AMD kernel module will now build correctly. You may have to reboot into the new kernel and force the module rebuild with

su -
akmods --force

then reboot again.

Compilation Problems on i686 Fedora 16

The following is a procedure that has been confirmed to work with i686 Fedora users. If you are getting the following message in your fglrx-install.log:


[Message] Kernel Module : Found kernel module build environment, generating kernel module now.
AMD kernel module generator version 2.1
doing Makefile based build for kernel 2.6.x and higher
rm -rf *.c *.h *.o *.ko *.a .??* *.symvers
make -C /lib/modules/3.2.9-1.fc16.i686/build SUBDIRS=/lib/modules/fglrx/build_mod/2.6.x modules
make[1]: Entering directory `/usr/src/kernels/3.2.9-1.fc16.i686'
  CC [M]  /lib/modules/fglrx/build_mod/2.6.x/firegl_public.o
/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c: In function ‘KCL_fpu_begin’:
/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c:5804:28: error: ‘TS_USEDFPU’ undeclared (first use in this function)
/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c:5804:28: note: each undeclared identifier is reported only once for each function it appears in
make[2]: *** [/lib/modules/fglrx/build_mod/2.6.x/firegl_public.o] Error 1
make[1]: *** [_module_/lib/modules/fglrx/build_mod/2.6.x] Error 2
make[1]: Leaving directory `/usr/src/kernels/3.2.9-1.fc16.i686'
make: *** [kmod_build] Error 2
build failed with return value 2
[Error] Kernel Module : Failed to compile kernel module - please consult readme.
[Reboot] Kernel Module : dracut

Then the following procedure should work for you.

Procedure is as follows:


1) Extract amd-driver-installer into subdir. Example:


chmod 700 amd-driver-installer-12-2-x86.x86_64.run

./amd-driver-installer-12-2-x86.x86_64.run --extract fgrlx-12.2

2) cd into directory containing firegl_public.c. i.e.,


  fglrx-12.2/common/lib/modules/fglrx/build_mod/


3) In that dir, save the following code to a file named "fglrx.patch":


fixed fgrlx compilation error on 32-bit x86 arch with kernel 3.3-rc4 due to commit:
https://github.com/torvalds/linux/commit/f94edacf998516ac9d849f7bc6949a703977a7f3
later modified (in 3.3-rc5) by commit:
https://github.com/torvalds/linux/commit/7e16838d94b566a17b65231073d179bc04d590c8#diff-1
and finally backported to kernel 3.2.8.

Signed-off-by: Gianluca Gennari <gennarone@gmail.com>
---
 firegl_public.c |    6 ++++++
 1 files changed, 6 insertions(+), 0 deletions(-)

diff --git a/firegl_public.c b/firegl_public.c
index 6e0aa82..cb9e217 100644
--- a/firegl_public.c
+++ b/firegl_public.c
@@ -5797,10 +5797,16 @@ void ATI_API_CALL KCL_fpu_begin(void)
 #ifdef CONFIG_X86_64
     kernel_fpu_begin();
 #else
+#ifndef TS_USEDFPU
+    preempt_disable();
+    if (__thread_has_fpu(current))
+        __save_init_fpu(current);
+#else
     struct thread_info *cur_task = current_thread_info();
     preempt_disable();
     if (cur_task->status & TS_USEDFPU)
         __save_init_fpu(cur_task->task);
+#endif
     else
         clts();
 #endif
-- 
1.7.5.4


4) Run the patch on firegl_public.c :


su-

patch -p1 < ~/fglrx.patch

5) From the extraction subdir (in this case "fgrlx-12.2"), run ati-installer.sh as follows:

su -

/bin/sh ./ati-installer.sh 8.95 --install

Multiple Monitor Setups

If you have an existing multiple monitor setup, move your existing xorg.conf to a safe place. Let the amd-driver-installer generate a fresh working xorg.conf file for you based on what it probes from EDID monitor info, If you are having difficulties after generating a new xorg.conf, use your old xorg.conf as a reference and transfer sections of that file as needed to the new one.

Here are some resources for those having difficulty getting their multiple monitors running:

If you need to start with a clean slate and all your monitors are connected, you can force a fresh xorg.conf to be generated taking into account the monitors present:

su -
aticonfig --initial -f

Pre-built packages from RPMFusion

RECOMMENDED METHOD

This is easier than manually building the driver from AMD as you don't need to worry about passing kernel options via GRUB2, configuring DKMS, rebuilding the kernel module every time you do a kernel upgrade, or cleaning up any mess if you want to remove the driver.

Clean up previous Offical AMD driver installation

If you're coming from the Official AMD driver to RPMFusion's AMD driver, you'll need to reinstall the mesa-libGL package as the Official AMD driver installation changes files it contains.

su -
yum reinstall mesa-libGL

Setup RPMFusion

There are instructions on http://www.rpmfusion.org/ but this should do it.

su -
rpm -Uvh http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-stable.noarch.rpm  http://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-stable.noarch.rpm

Install Catalyst driver packages

This procedure is the same for 32-bit and 64-bit, yum will automatically install the correct driver and libs for your architecture.

su -
yum install akmod-catalyst xorg-x11-drv-catalyst xorg-x11-drv-catalyst-libs

32-bit Libraries on 64-bit OS

If you want to play 32-bit games on a 64-bit Fedora installation, you will need to install the 32-bit libraries in addition to the above step.

su -
yum install xorg-x11-drv-catalyst-libs.i686

Kernel module packages

Note that there are individual kmod-catalyst- packages in RPMFusion which supply kernel modules for specific Fedora kernel versions. If you use these and you upgrade the kernel without upgrading the kmod-catalyst- package, loading the proprietary driver will fail and you'll revert back to the Free radeon graphics driver. Sometimes there is a day or so between Fedora upgrading their kernel and RPMFusion building a new kmod-catalyst- package.

The akmod-catalyst package we installed above automatically builds a new kernel module at boot-time when the kernel is upgraded, so you'll never have to worry about this.

Official AMD Driver

Preinstall required packages

The script from AMD builds the kernel module and a set of modules for XOrg. The Official AMD installer requires some development packages to be installed:

su -
yum install kernel-devel kernel-headers gcc gcc-c++

We'll also want to remove any kernel-devel packages from old versions of the kernel. Check your current kernel version with:

uname -a

Check all installed kernel packages with

su -
rpm -qa | grep kernel

Remove any kernel-devel packages which do not match the latest kernel version. For example:

su -
yum remove kernel-devel-3.2.9-1.fc16.x86_64

Note we are careful to specify the exact package name that was given to us by the rpm command above.

Boot into the latest kernel before continuing. Building the module on a kernel which you don't have -devel packages for will fail. Building the module on one kernel then booting into another will result in the compiled module not working.

Download driver

Download the driver for your particular card from http://support.amd.com/

It will look similar to: amd-driver-installer-XX-X-XXX.XXX_XX.run.

Install driver

Run the file as root in the sh shell.

su -
chmod +x amd-driver-installer-XX-X-XXX.XXX_XX.run
sh ./amd-driver-installer-XX-X-XXX.XXX_XX.run

Select the default install, do not generate distribution packages.

Confirming Installation

Check the build install log:

tail /usr/share/ati/fglrx-install.log

You should see data confirming the module build worked:

build succeeded with return value 0
duplicating results into driver repository...
done.

Uninstalling Official AMD driver

Run AMD's uninstall script:

su -
sh /usr/share/ati/fglrx-uninstall.sh

The following steps are not strictly required because the amd-driver-installer is written to put all files back as they were before the install. One set of files that amd-driver-installer alters is the mesa library set. To be sure of a mint-condition installation (especially if you are upgrading to the next Official driver version) reinstall the following package:

su -
yum reinstall mesa-libGL

For those running Wine or Crossover from Codeweavers.com, the following command will reinstall all the mesa libraries that (should) be on your system. This example is for users running Wine/Crossover on a 64 bit system:

su -
yum reinstall mesa-dri-filesystem.i686 mesa-libGL.x86_64 mesa-dri-drivers.x86_64 mesa-libGL.i686 mesa-dri-filesystem.x86_64 mesa-libEGL.x86_64 mesa-dri-drivers.i686 mesa-libGLU.x86_64

Troubleshooting

In the event you install the driver and are greeted with a blank screen or corrupted video signal when starting X, you are able to manually disable the Free Software radeon driver to troubleshoot.

Turn your system off and on again. On the GRUB boot screen, press e to edit the default boot entry, scroll down to the kernel line (which begins linux), then press e again to edit the line.

Add the entries radeon.modeset=0 blacklist=radeon to the end. For example, if your kernel line is

linux /vmlinuz-3.2.9-1.fc16.x86_64 LANG=en_US.UTF-8

we'll want to edit it so it is

linux /vmlinuz-3.2.9-1.fc16.x86_64 LANG=en_US.UTF-8 radeon.modeset=0 rdblacklist=radeon blacklist=radeon

These entries do the following:

  • radeon.modeset=0 disables "Kernel Mode Settting" for the Free Software driver (ie: the driver telling the kernel to setup the screen resolution, instead of XOrg doing it)
  • rdblacklist=radeon blacklist=radeon stops the kernel from loading the Free Software radeon driver altogether

From here you can manually remove and reinstall the proprietary drivers, either with yum or with PackageKit's Add/Remove Software application, as desired.