由于仅使用 GPL 代码,专有 FGLRX 模块无法编译

由于仅使用 GPL 代码,专有 FGLRX 模块无法编译

(Ubuntu 15.04) 经过最新一轮更新后,fglrx 无法在我的两台笔记本电脑上编译 dkms 模块。一台笔记本电脑有可切换显卡,另一台没有。有可切换显卡的笔记本电脑在集成英特尔芯片组下运行良好,而另一台笔记本电脑启动时出现黑屏。错误日志如下。

FATAL: modpost: GPL-incompatible module fglrx.ko uses GPL-only symbol 'pci_ignore_hotplug'
scripts/Makefile.modpost:90: recipe for target '__modpost' failed
make[2]: *** [__modpost] Error 1
Makefile:1397: recipe for target 'modules' failed
make[1]: *** [modules] Error 2
make[1]: Leaving directory '/usr/src/linux-headers-3.19.0-26-generic'

我浏览了 askubuntu.com,发现很多新的 Ubuntu 用户对使用 FGLRX 的 Ubuntu 桌面损坏感到不满,却没有任何答案来解释发生了什么。如果有人能给出答案,我们就可以回答这些用户的一些问题。

感谢 Pilot6 和 Vladimir 修复

在软件管理器中禁用预发布的更新。

放到终端并输入

sudo apt-get purge linux-headers-3.19.0-26 linux-headers-3.19.0-26-generic linux-image-3.19.0-26-generic 

sudo apt-get install linux-headers-3.19.0-25 linux-headers-3.19.0-25-generic linux-image-3.19.0-25-generic

答案1

真正的问题是内核有一个仅作为 gpl 导出的函数。两个可能的解决方案:

  1. 驱动程序更新以使用非 gpl 功能
  2. 内核更新以将函数导出为非 gpl

MODULE_LICENSE("Proprietary")到那时,FGLRX、NVIDIA 和自定义模块都将失败。

在我的情况下,在 3.19 内核中使用 trace_printk,对于专有的内部模块,会生成“__trace_bputs”的错误

我通过将 MODULE_LICENSE 更改为“GPL”解决了该问题(由于明显的法律原因,仅进行内部测试)。

相关内容