linux - 未加载 vboxdrv 内核模块(Unknown rela relocation - debian buster)
问题描述
将 Debian 从 Stretch 更新到 Buster 后,Virtualbox 无法加载内核模块。我有 Virtualbox 6.1 和下一个内核版本:
~$ uname -a Linux debian 4.9.0-4-amd64 #1 SMP Debian 4.9.65-3+deb9u1 (2017-12-23) x86_64 GNU/Linux
此外,我的 Bios 和 Secureboot 已禁用旧版支持。Debian 也被配置为从 Legacy 启动
我见过很多类似的案例,但是所有建议的解决方法都对我不起作用。
我尝试了下一个解决方案:
~$ sudo /sbin/vboxconfig vboxdrv.sh: Stopping VirtualBox services.
vboxdrv.sh: Starting VirtualBox services. vboxdrv.sh: Building
VirtualBox kernel modules. vboxdrv.sh: failed: modprobe vboxdrv
failed. Please use 'dmesg' to find out why.
There were problems setting up VirtualBox. To re-start the set-up
process, run /sbin/vboxconfig as root. If your system is using EFI
Secure Boot you may need to sign the kernel modules (vboxdrv,
vboxnetflt, vboxnetadp, vboxpci) before you can load them. Please see
your Linux system's documentation for more information.
~$ sudo modprobe vboxdrv modprobe: ERROR: could not insert 'vboxdrv': Exec format error
~$ sudo dpkg-reconfigure virtualbox-6.1 dkms addgroup: The group
`vboxusers' already exists as a system group. Exiting. vboxdrv.sh:
failed: modprobe vboxdrv failed. Please use 'dmesg' to find out why.
There were problems setting up VirtualBox. To re-start the set-up
process, run /sbin/vboxconfig as root. If your system is using EFI
Secure Boot you may need to sign the kernel modules (vboxdrv,
vboxnetflt, vboxnetadp, vboxpci) before you can load them. Please see
your Linux system's documentation for more information.
~$ sudo apt-get install linux-headers-$(uname -r|sed 's,[^-]*-[^-]*-,,')
virtualbox-6.1 --reinstall ... Unpacking linux-headers-amd64
(4.19+105+deb10u7) over (4.19+105+deb10u7) ... Setting up
linux-headers-amd64 (4.19+105+deb10u7) ... Setting up virtualbox-6.1
(6.1.16-140961~Debian~buster) ... addgroup: The group `vboxusers'
already exists as a system group. Exiting. vboxdrv.sh: failed:
modprobe vboxdrv failed. Please use 'dmesg' to find out why.
There were problems setting up VirtualBox. To re-start the set-up
process, run /sbin/vboxconfig as root. If your system is using EFI
Secure Boot you may need to sign the kernel modules (vboxdrv,
vboxnetflt, vboxnetadp, vboxpci) before you can load them. Please see
your Linux system's documentation for more information. Processing
triggers for mime-support (3.62) ... Processing triggers for
hicolor-icon-theme (0.17-2) ... Processing triggers for systemd
(241-7~deb10u4) ... Processing triggers for shared-mime-info (1.10-1)
... Processing triggers for desktop-file-utils (0.23-4) ...
:~$ sudo /sbin/rcvboxdrv
setup vboxdrv.sh: Stopping VirtualBox services.
vboxdrv.sh: Starting VirtualBox services.
vboxdrv.sh:
Building VirtualBox kernel modules. vboxdrv.sh: failed: modprobe vboxdrv failed.
Please use 'dmesg' to find out why.
我也尝试了另一种可能的解决方法:
- 重新启动我的电脑并尝试执行 modprobe 和 vboxconfig 命令
- 以root身份运行virtualbox
- 从 Debian 仓库安装 Virtualbox 5.2、6.0、6.1
- 直接从 .deb 包安装最新的 Virtualbox
- sudo /opt/VirtualBox/vboxdrv.sh 强制重新加载
- sudo /opt/VirtualBox/vboxdrv.sh 设置
所有与 vboxdrv 内核模块相关的失败操作都在stdout或dmesg中返回此消息:
module: vboxdrv: Unknown rela relocation: 4
解决方案
重定位错误看起来像是正在运行的内核和构建模块时使用的 binutils 版本之间的兼容性问题。请参阅这些讨论:
执行格式错误和未知的 rela 重定位:
这个内核提交看起来很相关——0x02 和 0x04 分别是 R_X86_64_PC32 和 R_X86_64_PLT32——但你的内核中没有它。看起来您已经升级到 binutils >= 2.31,所以您的链接器现在决定使用 R_X86_64_PLT32 重定位。
确认,将 binutils 降级到 2.30 可以解决问题
在 Stack Overflow 上,请参阅 binutils 版本
推荐阅读
- android - Ktor api 不会改变和刷新
- angularjs - 检查函数是否成功执行茉莉花
- python - OpenPyXL:是否可以在 Excel 工作表中创建下拉菜单?
- reactjs - 如何在reactjs中获取远程定位的图像大小
- sql - ORA-01790: 表达式必须与对应的表达式 LISTAGG 具有相同的数据类型
- vue.js - 使用 Vue 处理递归组件中的插槽
- python - 如何从结果中创建 python 列表
- groovy - 如何从groovy中当前包的上一级导入
- php - Woocommerce 评级未显示在新的自定义主题中
- r - R数据框:每组(另一列)替换第一个值(一列)