Ubuntu – How fix ATI fglrx driver after kernel upgrade

12.04atidriversfglrxkernel

I upgraded to the 12.04.4 lts saucy stack from 12.04.3:

sudo apt-get install --install-recommends linux-generic-lts-saucy xserver-xorg-lts-saucy libgl1-mesa-glx-lts-saucy

That installed the 3.11 kernel to go with the 3.8 I had previously. However, when logging in I see I am in fallback mode, and fglrx is nowhere to be seen, from Xorg.0.log:

Loading extension GLX
FATAL: Module fglrx not found.
(WW) fglrx: No matching Device section for instance (BusID PCI:0@0:1:1) found
FATAL: Module fglrx not found.
Loading extension FGLRXEXTENSION

I cant load it directly either:

 > sudo modprobe fglrx
FATAL: Module fglrx not found.

If I boot with the old 3.8 kernel everything is hunkey-dorey. No probs at all.

I think this might be some kind of dkms problem. In /lib/modules I have:

drwxr-xr-x 4 root root 4096 Feb 10 20:43 3.8.0-35-generic
drwxr-xr-x 4 root root 4096 Feb 24 20:36 3.11.0-17-generic

However:

 > ls -l /var/lib/dkms/fglrx/13.251/
total 8
drwxr-xr-x 3 root root 4096 Feb  5 22:05 3.8.0-35-generic
drwxr-xr-x 4 root root 4096 Feb 24 20:36 build
lrwxrwxrwx 1 root root   21 Dec 27 17:06 source -> /usr/src/fglrx-13.251

Shouldnt there be a 3.11 kernel entry there? How to I refresh dkms to see the new kernel that just got installed? Or is that not the problem?

Best Answer

Got it! :-)

sudo gedit /usr/src/fglrx-13.251/kcl_acpi.c

Delete these last 3 lines in the file:

     ((acpi_table_handler)handler)(hdr);
     return KCL_ACPI_OK;
}

replace them with:

#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,1)
    ((acpi_tbl_table_handler)handler)(hdr);
#else
    ((acpi_table_handler)handler)(hdr);
#endif
    return KCL_ACPI_OK;
}

Then run:

sudo dkms install -m fglrx -v 13.251 -k 3.11.0-17-generic

Then reboot. Worked for me - working kernel 3.11 and fglrx now!

(I worked this out from this page: https://gist.github.com/moldcraft/8116528)