明天我办公桌上的电脑上会有一件大事要处理。
Nvidia:版本魔法“3.13.0-143-genric SMP mod_unload modversions”应为“3.13.0.143-generic SMP mod_unload modversions retpoline”
我知道这里解决了类似的问题(例如Nvidia 驱动程序安装 v14.04 后无法登录)
但我不知道如何改变命令以在我的系统上运行。
我有 Ubuntu 14.04...
我尝试加载较旧的内核。它运行良好。我检查了 GUI 配置工具。在更新和驱动程序中,我可以选择将我的 nvidia 驱动程序升级到最新版本 (384.111)。我试过了,一切仍然正常。
然后我回到了最新的内核。
现在,我检查了 modinfo,但 nvidia 不在这里。我尝试了“sudo modprobe nvidia”(dkms 看到 nvidia 384.111 已安装)。
答案:modprobe:错误,无法插入“nvidia_384”:执行格式错误
我检查了 /lib/modules/.../drivers/video/nivdia 中的 nvidiafb.ko,该文件处于 -rw-r--r-- 模式...我不知道它是否应该处于 exec 模式???
我现在被困住了
答案1
这是因为较新的内核具有 retpoline Spectre 缓解措施。您将需要使用修补版本的库存发行版 gcc 重建 nvidia.ko 内核模块。
以下是该错误和更多详细信息:https://bugs.launchpad.net/ubuntu/+source/xorg/+bug/1750937
答案2
我通过以下方式解决了这个问题这个帖子来自 bug 启动板。总结如下:
运行以下命令并查找该vermagic
行:
modinfo nvidia-384 -k 4.4.0-116-generic
它可能会显示:
vermagic: 4.4.0-116-generic SMP mod_unload modversions
。这里缺少 retpoline 字符串。您可以通过使用 DKMS 删除并重新构建模块来修复此问题
sudo dkms remove nvidia-384/384.111 -k 4.4.0-116-generic
sudo dkms install nvidia-384/384.111 -k 4.4.0-116-generic
之后 modinfo 命令将显示
vermagic: 4.4.0-116-generic SMP mod_unload modversions retpoline
如果你使用自定义版本的 gcc这个帖子也相关:
如果您使用的是 Ubuntu 版本的 gcc,那么当您获得较新的内核时,gcc 可能会更新。支持 retpoline 所需的 gcc 更改应该已反向移植到大多数活跃版本的 gcc。但是,如果您安装了自定义版本的 gcc,那么您的内核模块可能无法正确构建。
因此,如果上述步骤不起作用,您可能需要检查您正在使用的 gcc 版本。