The VirtualBox kernel modules do not match this version of VirtualBox 解决 (linux update,nvidia失败)

问题

arch linux 下 upgrade之后发现kernel版本没有变?!

sudo pacman -S linux

安装失败?!

virtualbox 打开告诉我kernel module do not match?!

vbox的所有东西都找不到?!

CC [M]  /tmp/NVIDIA-Linux-x86_64-367.44/kernel/nvidia-drm/nvidia-drm-drv.o
/tmp/NVIDIA-Linux-x86_64-367.44/kernel/nvidia-drm/nvidia-drm-drv.c: In function ‘nvidia_drm_migrate_modeset_ownership’:
/tmp/NVIDIA-Linux-x86_64-367.44/kernel/nvidia-drm/nvidia-drm-drv.c:455:26: error: ‘struct drm_minor’ has no member named ‘master’
         !file_priv->minor->master)
                          ^~
/tmp/NVIDIA-Linux-x86_64-367.44/kernel/nvidia-drm/nvidia-drm-drv.c:476:5: error: implicit declaration of function ‘drm_master_put’ [-Werror=implicit-function-declaration]
     drm_master_put(&file_priv->minor->master);
     ^~~~~~~~~~~~~~
/tmp/NVIDIA-Linux-x86_64-367.44/kernel/nvidia-drm/nvidia-drm-drv.c:476:37: error: ‘struct drm_minor’ has no member named ‘master’
     drm_master_put(&file_priv->minor->master);
                                     ^~
/tmp/NVIDIA-Linux-x86_64-367.44/kernel/nvidia-drm/nvidia-drm-drv.c: In function ‘nvidia_drm_pci_set_busid’:
/tmp/NVIDIA-Linux-x86_64-367.44/kernel/nvidia-drm/nvidia-drm-drv.c:493:11: error: dereferencing pointer to incomplete type ‘struct drm_master’
     master->unique = nvidia_drm_asprintf("pci:%04x:%02x:%02x.%d",
           ^~
/tmp/NVIDIA-Linux-x86_64-367.44/kernel/nvidia-drm/nvidia-drm-drv.c: In function ‘nvidia_update_drm_driver_features’:
/tmp/NVIDIA-Linux-x86_64-367.44/kernel/nvidia-drm/nvidia-drm-drv.c:655:36: error: assignment from incompatible pointer type [-Werror=incompatible-pointer-types]
     nv_drm_driver.master_drop      = nvidia_drm_master_drop;
                                    ^
cc1: some warnings being treated as errors
/usr/src/kernels/4.8.3-300.fc25.x86_64/scripts/Makefile.build:289: recipe for target '/tmp/NVIDIA-Linux-x86_64-367.44/kernel/nvidia-drm/nvidia-drm-drv.o' failed
make[3]: *** [/tmp/NVIDIA-Linux-x86_64-367.44/kernel/nvidia-drm/nvidia-drm-drv.o] Error 1
  CC [M]  /tmp/NVIDIA-Linux-x86_64-367.44/kernel/nvidia-drm/nvidia-drm-utils.o
  CC [M]  /tmp/NVIDIA-Linux-x86_64-367.44/kernel/nvidia-drm/nvidia-drm-crtc.o
  CC [M]  /tmp/NVIDIA-Linux-x86_64-367.44/kernel/nvidia-drm/nvidia-drm-encoder.o
  CC [M]  /tmp/NVIDIA-Linux-x86_64-367.44/kernel/nvidia-drm/nvidia-drm-connector.o
  CC [M]  /tmp/NVIDIA-Linux-x86_64-367.44/kernel/nvidia-drm/nvidia-drm-gem.o
  CC [M]  /tmp/NVIDIA-Linux-x86_64-367.44/kernel/nvidia-drm/nvidia-drm-fb.o
  CC [M]  /tmp/NVIDIA-Linux-x86_64-367.44/kernel/nvidia-drm/nvidia-drm-modeset.o
  CC [M]  /tmp/NVIDIA-Linux-x86_64-367.44/kernel/nvidia-drm/nvidia-drm-mmap.o
  CC [M]  /tmp/NVIDIA-Linux-x86_64-367.44/kernel/nvidia-drm/nvidia-drm-linux.o
/tmp/NVIDIA-Linux-x86_64-367.44/kernel/nvidia-drm/nvidia-drm-modeset.c: In function ‘nvidia_drm_atomic_commit’:
/tmp/NVIDIA-Linux-x86_64-367.44/kernel/nvidia-drm/nvidia-drm-modeset.c:678:34: error: passing argument 1 of ‘drm_atomic_helper_swap_state’ from incompatible pointer type [-Werror=incompatible-pointer-types]
     drm_atomic_helper_swap_state(dev, state);
                                  ^~~
In file included from /tmp/NVIDIA-Linux-x86_64-367.44/kernel/nvidia-drm/nvidia-drm-modeset.c:37:0:
/usr/src/kernels/4.8.3-300.fc25.x86_64/include/drm/drm_atomic_helper.h:75:6: note: expected ‘struct drm_atomic_state *’ but argument is of type ‘struct drm_device *’
 void drm_atomic_helper_swap_state(struct drm_atomic_state *state,
      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
  CC [M]  /tmp/NVIDIA-Linux-x86_64-367.44/kernel/nvidia-drm/nv-pci-table.o
cc1: some warnings being treated as errors
/usr/src/kernels/4.8.3-300.fc25.x86_64/scripts/Makefile.build:289: recipe for target '/tmp/NVIDIA-Linux-x86_64-367.44/kernel/nvidia-drm/nvidia-drm-modeset.o' failed
make[3]: *** [/tmp/NVIDIA-Linux-x86_64-367.44/kernel/nvidia-drm/nvidia-drm-modeset.o] Error 1
ld -r -o /tmp/NVIDIA-Linux-x86_64-367.44/kernel/nvidia/nv-interface.o /tmp/NVIDIA-Linux-x86_64-367.44/kernel/nvidia/nv-frontend.o /tmp/NVIDIA-Linux-x86_64-367.44/kernel/nvidia/nv-instance.o /tmp/NVIDIA-Linux-x86_64-367.44/kernel/nvidia/nv.o /tmp/NVIDIA-Linux-x86_64-367.44/kernel/nvidia/nv-acpi.o /tmp/NVIDIA-Linux-x86_64-367.44/kernel/nvidia/nv-chrdev.o /tmp/NVIDIA-Linux-x86_64-367.44/kernel/nvidia/nv-cray.o /tmp/NVIDIA-Linux-x86_64-367.44/kernel/nvidia/nv-dma.o /tmp/NVIDIA-Linux-x86_64-367.44/kernel/nvidia/nv-gvi.o /tmp/NVIDIA-Linux-x86_64-367.44/kernel/nvidia/nv-i2c.o /tmp/NVIDIA-Linux-x86_64-367.44/kernel/nvidia/nv-mempool.o /tmp/NVIDIA-Linux-x86_64-367.44/kernel/nvidia/nv-mmap.o /tmp/NVIDIA-Linux-x86_64-367.44/kernel/nvidia/nv-p2p.o /tmp/NVIDIA-Linux-x86_64-367.44/kernel/nvidia/nv-pat.o /tmp/NVIDIA-Linux-x86_64-367.44/kernel/nvidia/nv-procfs.o /tmp/NVIDIA-Linux-x86_64-367.44/kernel/nvidia/nv-usermap.o /tmp/NVIDIA-Linux-x86_64-367.44/kernel/nvidia/nv-vm.o /tmp/NVIDIA-Linux-x86_64-367.44/kernel/nvidia/nv-vtophys.o /tmp/NVIDIA-Linux-x86_64-367.44/kernel/nvidia/os-interface.o /tmp/NVIDIA-Linux-x86_64-367.44/kernel/nvidia/os-mlock.o /tmp/NVIDIA-Linux-x86_64-367.44/kernel/nvidia/os-pci.o /tmp/NVIDIA-Linux-x86_64-367.44/kernel/nvidia/os-registry.o /tmp/NVIDIA-Linux-x86_64-367.44/kernel/nvidia/os-usermap.o /tmp/NVIDIA-Linux-x86_64-367.44/kernel/nvidia/nv-modeset-interface.o /tmp/NVIDIA-Linux-x86_64-367.44/kernel/nvidia/nv-pci-table.o /tmp/NVIDIA-Linux-x86_64-367.44/kernel/nvidia/nv_uvm_interface.o /tmp/NVIDIA-Linux-x86_64-367.44/kernel/nvidia/nvlink_linux.o /tmp/NVIDIA-Linux-x86_64-367.44/kernel/nvidia/nvlink_pci.o /tmp/NVIDIA-Linux-x86_64-367.44/kernel/nvidia/ebridge_linux.o /tmp/NVIDIA-Linux-x86_64-367.44/kernel/nvidia/ibmnpu_linux.o
ld -r -o /tmp/NVIDIA-Linux-x86_64-367.44/kernel/nvidia-modeset/nv-modeset-interface.o /tmp/NVIDIA-Linux-x86_64-367.44/kernel/nvidia-modeset/nvidia-modeset-linux.o
  LD [M]  /tmp/NVIDIA-Linux-x86_64-367.44/kernel/nvidia.o
  LD [M]  /tmp/NVIDIA-Linux-x86_64-367.44/kernel/nvidia-uvm.o
  LD [M]  /tmp/NVIDIA-Linux-x86_64-367.44/kernel/nvidia-modeset.o
make[3]: Target '__build' not remade because of errors.
/usr/src/kernels/4.8.3-300.fc25.x86_64/Makefile:1475: recipe for target '_module_/tmp/NVIDIA-Linux-x86_64-367.44/kernel' failed
make[2]: *** [_module_/tmp/NVIDIA-Linux-x86_64-367.44/kernel] Error 2
make[2]: Target 'modules' not remade because of errors.
make[2]: Leaving directory '/usr/src/kernels/4.8.3-300.fc25.x86_64'
Makefile:150: recipe for target 'sub-make' failed
make[1]: *** [sub-make] Error 2
make[1]: Target 'modules' not remade because of errors.
make[1]: Leaving directory '/usr/src/kernels/4.8.3-300.fc25.x86_64'
Makefile:81: recipe for target 'modules' failed
make: *** [modules] Error 2
ERROR: The nvidia kernel module was not created.
ERROR: Installation has failed.  Please see the file '/var/log/nvidia-installer.log' for details.  You may find suggestions on fixing installation problems in the README available on the Linux driver download page at www.nvidia.com.

从没见过如此清新脱俗的错误提示?!

问题原因

是的就是坑跌的nvidia! kernel更新之后nvidia的驱动用的老API,编译过!不!了! 本来很简单的patch,还半天不!更!新! 完蛋玩意儿。(此处引用Linus老人家名言,“fuck you!Nvidia!”)

问题解决

于是见到某论坛有某大神自己给更新了,对的,所以我们需要更改源码。。

源码位置在/var/lib/dkms/nvidia/367.44/source/
所以接下来这里的目录到kernel这 就是到source这,也就是说后面的kernel/nvidia-drm之类的就是source/nvidia-drm了,减号是删除(或者注释掉,保险),加号是添加,更改好之后在pacman -S linux就可以成功了。 最后reboot就解决了

--- NVIDIA-Linux-x86_64-370.23/kernel/nvidia-drm/nvidia-drm-drv.c   2016-08-09 01:43:19.000000000 +0200
+++ NVIDIA-Linux-x86_64-370.23.patched/kernel/nvidia-drm/nvidia-drm-drv.c   2016-08-16 20:15:01.058822359 +0200
@@ -37,6 +37,7 @@
 #include "nvidia-drm-ioctl.h"

 #include <drm/drmP.h>
+#include <drm/drm_auth.h>

 #include <drm/drm_crtc_helper.h>

@@ -420,7 +421,7 @@

 static
 void nvidia_drm_master_drop(struct drm_device *dev,
-                            struct drm_file *file_priv, bool from_release)
+                            struct drm_file *file_priv)
 {
     struct nvidia_drm_device *nv_dev = dev->dev_private;
     int ret;
@@ -453,7 +454,7 @@
     mutex_lock(&dev->master_mutex);

     if (!file_priv->is_master ||
-        !file_priv->minor->master)
+        !file_priv->master)
     {
         goto done;
     }
@@ -474,7 +475,7 @@
      * NVKMS modeset ownership, because nvidia_drm_master_set()'s call to
      * grabOwnership() will fail.
      */
-    drm_master_put(&file_priv->minor->master);
+    drm_master_put(&file_priv->master);
     file_priv->is_master = 0;

     ret = 0;
--- NVIDIA-Linux-x86_64-370.23/kernel/nvidia-drm/nvidia-drm-modeset.c   2016-08-09 01:43:19.000000000 +0200
+++ NVIDIA-Linux-x86_64-370.23.patched/kernel/nvidia-drm/nvidia-drm-modeset.c   2016-08-16 20:15:01.058822359 +0200
@@ -675,7 +675,7 @@
         goto failed;
     }

-    drm_atomic_helper_swap_state(dev, state);
+    drm_atomic_helper_swap_state(state, true);

     nvidia_drm_update_head_mode_config(state, requested_config);
#1
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值