我一直尝试在我的 Linux 机器上安装最新的 AMD 驱动程序,但在编译后我收到了以下消息:
modprobe:错误:无法插入‘fglrx’:模块中的未知符号,或者未知参数(参见 dmesg)失败。
请注意,我不太擅长这个 Linux 东西,因为我更像是 BSD 本地人。
情境细节
- Arch Linux,x86_64,发布日期 2016.01.01
- 内核版本:4.3.3-2
- AMD Radeon R9 290x
- 深红色,fglrx 15.302
迄今已完成
一开始安装脚本甚至还没到 EULA 部分,因为我必须安装该kernel-headers
软件包。此时我实际上可以开始尝试安装它了。
仅运行脚本就出现了一个错误:
/usr/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c:634:9: error: void value not ignored as it ought to be
len = seq_printf(m, "%d\n", major);
^
经过一些简单的谷歌搜索后我发现此解决方案并手动执行/usr/lib/modules/fglrx/build_mod/make.sh
但汇编结果却以这样的信息结束:
WARNING: "mtrr_add" [/usr/lib/modules/fglrx/build_mod/2.6.x/fglrx.ko] undefined!
WARNING: "mtrr_del" [/usr/lib/modules/fglrx/build_mod/2.6.x/fglrx.ko] undefined!
当然,您应该忽略警告,因此我继续安装已编译的模块......结果出现消息:
modprobe:错误:无法插入‘fglrx’:模块中的未知符号,或者未知参数(参见 dmesg)失败。
查看了 dmesg 之后,我看到了以下几行:
[ 2848.332722] fglrx: module license 'Proprietary. (C) 2002 - ATI Technologies, Starnberg, GERMANY' taints kernel.
[ 2848.332725] Disabling lock debugging due to kernel taint
[ 2848.343063] fglrx: Unknown symbol mtrr_del (err 0)
[ 2848.343114] fglrx: Unknown symbol mtrr_add (err 0)
通过谷歌搜索,我找到了以下邮件列表消息:https://patchwork.ozlabs.org/patch/510277/mtrr_add()
其中提到由于它有点不好而被删除:
用与架构无关的 arch_phys_wc_add() 替换 mtrr_add() 的行动已经完成,这将确保利用写入合并实现(x86 上的 PAT)而不是使用 MTRR。现在行动完成后,隐藏了驱动程序的直接 MTRR 访问。
那么,我现在该怎么办?
我现在不知道该怎么做?我应该在源代码中进行差异分析,使用mtrr_add
和查找函数mtrr_del
吗?我应该打补丁吗?这都是一次大失败,我应该放弃吗?
答案1
谢谢@DanielB评论我让它工作了。
所以...我要做的是降级到较旧的 kernel/xorg 版本,并确保它棍棒(尽管 Arch Linux 的设计始终处于前沿)。但这有点棘手。linux-4.2.5-1
由于我被困在控制台中,我手动从档案(具体来说:linux-4.2.5-1、linux-headers-4.2.5-1 和 xorg-server-1.17.4-2)。我还必须获取旧版本的xorg-驱动程序软件包组。我将这些软件包放入其中/var/cache/pacman/pkg/
,然后使用命令将它们降级pacman -U /path/to/package-file.pkg.tar.xz
。
然后重新安装 Crimson 驱动程序并运行aticonfig --initial
以生成 xorg.conf。
为了阻止系统更新伪造一切,我添加了以下两行/etc/pacman.config
:
IgnorePkg = linux linux-headers xorg-server
IgnoreGroup = xorg-drivers
这些行将要运行时生成警告pacman -Syu
...这样您就真的无法忘记它了。当新的 AMD Crimson 驱动程序发布时,我将能够暂时禁用此临时功能。
然后它就爆炸了......
运行pacman -Syu
并重启后出现问题(重启时初始化卡住了)。我不太清楚发生了什么,但我做的是:
- 从安装 USB 启动
arch-chroot
在我的主分区中做一个- 禁用 sddm
- 重启
- 重新安装 Crimson 并重新生成 xorg.conf
- 启用 sddm
这解决了这个问题。我从阅读各种日志中了解到:更新fglrx
模块再次污染了内核,导致 Xorg 失败,进而导致 systemd-logind 无法访问 SDDM。和操作系统的任何合理部分一样,systemd 只是乳房向上锁定所有内容(键盘没有响应)。