![由于仅使用 GPL 代码,专有 FGLRX 模块无法编译](https://linux22.com/image/874862/%E7%94%B1%E4%BA%8E%E4%BB%85%E4%BD%BF%E7%94%A8%20GPL%20%E4%BB%A3%E7%A0%81%EF%BC%8C%E4%B8%93%E6%9C%89%20FGLRX%20%E6%A8%A1%E5%9D%97%E6%97%A0%E6%B3%95%E7%BC%96%E8%AF%91.png)
(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 导出的函数。两个可能的解决方案:
- 驱动程序更新以使用非 gpl 功能
- 内核更新以将函数导出为非 gpl
MODULE_LICENSE("Proprietary")
到那时,FGLRX、NVIDIA 和自定义模块都将失败。
在我的情况下,在 3.19 内核中使用 trace_printk,对于专有的内部模块,会生成“__trace_bputs”的错误
我通过将 MODULE_LICENSE 更改为“GPL”解决了该问题(由于明显的法律原因,仅进行内部测试)。