内核升级后如何修复 ATI fglrx 驱动程序

内核升级后如何修复 ATI fglrx 驱动程序

我从 12.04.3 升级到了 12.04.4 lts saucy stack:

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

这样就安装了 3.11 内核,与我之前使用的 3.8 内核配合使用。但是,登录时我发现我处于回退模式,从 Xorg.0.log 中看不到 fglrx:

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

我也无法直接加载它:

 > sudo modprobe fglrx
FATAL: Module fglrx not found.

如果我使用旧的 3.8 内核启动,一切都会顺利。完全没有问题。

我认为这可能是某种 dkms 问题。在 /lib/modules 中,我有:

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

然而:

 > 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

那里不应该有一个 3.11 内核条目吗?如何刷新 dkms 以查看刚刚安装的新内核?或者这不是问题所在?

答案1

知道了! :-)

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

删除文件中的最后三行:

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

替换为:

#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;
}

然后运行:

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

然后重启。对我来说已经成功了 - 现在可以使用内核 3.11 和 fglrx 了!

(我从这个页面得出了这一结论:https://gist.github.com/moldcraft/8116528

答案2

无法评论;所以,这里有一个“答案”式的东西......

内核升级在 12.04 上停止了重新生成 fglrx 模块(超过 1 年)。重新启动(激活新内核)后,lightdm 将允许您登录,但随后您很快会收到与虚拟屏幕尺寸相关的错误,并被发送回登录屏幕。主显示器的分辨率非常低。辅助显示器显示黑色。

我的解决方案是清除 fglrx 并重新安装 fglrx deb 包。

  • Ctrl+Alt+F1
  • 登录。
  • dpkg -l | grep fglrx
  • sudo apt-get purge <packages output from previous command>
  • cd /path/to/generated/fglrx*.deb
  • sudo dpkg -i fglrx*.deb

这个“解决方案”要求您在每次安装新内核时重复此操作,这很糟糕。

@fig 每次有新内核时,您是否都需要重新编辑“kcl_acpi.c”?每次有新的 fglrx 时?

答案3

也救了我,我得到了错误,并且在 askubuntu.com 上只找到了误导性的答案

问题:

   tilo@t-ubuntu:~$ fglrxinfo
  X Error of failed request:  BadRequest (invalid request code or no such operation)
  Major opcode of failed request:  155 (ATIFGLEXTENSION)
  Minor opcode of failed request:  66 ()
  Serial number of failed request:  13
  Current serial number in output stream:  13

使用你的描述让我12.04.4 带有 3.11 saucy摞回。

编辑完“kcl_acpi.c”文件的末尾后,我运行

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

输出作为参考

tilo@t-ubuntu:~$ sudo dkms install -m fglrx -v 13.251 -k 3.11.0-19-generic 

Kernel preparation unnecessary for this kernel.  Skipping...

Building module:
cleaning build area....
cd /var/lib/dkms/fglrx/13.251/build; sh make.sh --nohints --uname_r=3.11.0-19-generic --norootcheck.....
cleaning build area....

DKMS: build completed.

fglrx.ko:
Running module version sanity check.
 - Original module
   - No original module exists within this kernel
 - Installation
   - Installing to /lib/modules/3.11.0-19-generic/updates/dkms/

depmod.....

DKMS: install completed.
tilo@t-ubuntu:~$ 

现在 fglrxinfo

tilo@t-ubuntu:~$ fglrxinfo
display: :0  screen: 0
OpenGL vendor string: Advanced Micro Devices, Inc.
OpenGL renderer string: ATI Mobility Radeon HD 5800 Series
OpenGL version string: 4.3.12618 Compatibility Profile Context 13.251

顺便说一下,在“兼容性配置文件上下文 9.012”之前,但我也尝试从 ATI 网站重新安装。

相关内容