在 Ubuntu 12.04 上,我一直愉快地使用 VMware Workstation 6。然后,有一天,启动虚拟机时出现此错误:
Could not open /dev/vmmon: No such file or directory.
Please make sure that the kernel module `vmmon' is loaded.
Failed to initialize monitor device.
我不确定原因,但可能纯粹是推测,由于升级了 Nvidia 驱动程序(这就像去牙医诊所,所以请不要告诉我再次摆弄图形驱动程序。)
为了寻求解决方案,我使用 GUI 安装程序更新到 VMware Workstation 12。
gksudo bash xxxxx.bundle
我认为它足够聪明,在继续安装新版本之前卸载旧版本。一切都很好,只是当我尝试启动虚拟机时出现了上述相同的问题。事实上,正如建议的那样,我找不到文件或目录/dev/vmmon在我的系统中(在重新安装到较新版本之前也是如此。)
根据另一个明智的建议,我尝试:
sudo vmware-modconfig --console --install-all
完整的输出(以免我因提供细节不足而被否决)是这样的:
Stopping VMware services:
VMware Authentication Daemon done
VM communication interface socket family done
Virtual machine communication interface done
Virtual machine monitor done
Blocking file system done
Using kernel build system.
make: Entering directory `/tmp/modconfig-ha12A3/vmmon-only'
/usr/bin/make -C /lib/modules/3.13.0-49-generic/build/include/.. SUBDIRS=$PWD SRCROOT=$PWD/. \
MODULEBUILDDIR= modules
make[1]: Entering directory `/usr/src/linux-headers-3.13.0-49-generic'
CC [M] /tmp/modconfig-ha12A3/vmmon-only/linux/driver.o
CC [M] /tmp/modconfig-ha12A3/vmmon-only/linux/driverLog.o
CC [M] /tmp/modconfig-ha12A3/vmmon-only/linux/hostif.o
CC [M] /tmp/modconfig-ha12A3/vmmon-only/common/apic.o
CC [M] /tmp/modconfig-ha12A3/vmmon-only/common/comport.o
CC [M] /tmp/modconfig-ha12A3/vmmon-only/common/cpuid.o
CC [M] /tmp/modconfig-ha12A3/vmmon-only/common/hashFunc.o
CC [M] /tmp/modconfig-ha12A3/vmmon-only/common/memtrack.o
CC [M] /tmp/modconfig-ha12A3/vmmon-only/common/phystrack.o
CC [M] /tmp/modconfig-ha12A3/vmmon-only/common/task.o
CC [M] /tmp/modconfig-ha12A3/vmmon-only/common/vmx86.o
CC [M] /tmp/modconfig-ha12A3/vmmon-only/vmcore/moduleloop.o
/tmp/modconfig-ha12A3/vmmon-only/linux/driver.c: In function ‘LinuxDriver_Ioctl’:
/tmp/modconfig-ha12A3/vmmon-only/linux/driver.c:1983: warning: the frame size of 1280 bytes is larger than 1024 bytes
LD [M] /tmp/modconfig-ha12A3/vmmon-only/vmmon.o
Building modules, stage 2.
MODPOST 1 modules
WARNING: "mcount" [/tmp/modconfig-ha12A3/vmmon-only/vmmon.ko] undefined!
CC /tmp/modconfig-ha12A3/vmmon-only/vmmon.mod.o
LD [M] /tmp/modconfig-ha12A3/vmmon-only/vmmon.ko
make[1]: Leaving directory `/usr/src/linux-headers-3.13.0-49-generic'
/usr/bin/make -C $PWD SRCROOT=$PWD/. \
MODULEBUILDDIR= postbuild
make[1]: Entering directory `/tmp/modconfig-ha12A3/vmmon-only'
make[1]: `postbuild' is up to date.
make[1]: Leaving directory `/tmp/modconfig-ha12A3/vmmon-only'
cp -f vmmon.ko ./../vmmon.o
make: Leaving directory `/tmp/modconfig-ha12A3/vmmon-only'
Using kernel build system.
make: Entering directory `/tmp/modconfig-ha12A3/vmnet-only'
/usr/bin/make -C /lib/modules/3.13.0-49-generic/build/include/.. SUBDIRS=$PWD SRCROOT=$PWD/. \
MODULEBUILDDIR= modules
make[1]: Entering directory `/usr/src/linux-headers-3.13.0-49-generic'
CC [M] /tmp/modconfig-ha12A3/vmnet-only/driver.o
CC [M] /tmp/modconfig-ha12A3/vmnet-only/hub.o
CC [M] /tmp/modconfig-ha12A3/vmnet-only/userif.o
CC [M] /tmp/modconfig-ha12A3/vmnet-only/netif.o
CC [M] /tmp/modconfig-ha12A3/vmnet-only/bridge.o
CC [M] /tmp/modconfig-ha12A3/vmnet-only/procfs.o
CC [M] /tmp/modconfig-ha12A3/vmnet-only/smac_compat.o
CC [M] /tmp/modconfig-ha12A3/vmnet-only/smac.o
CC [M] /tmp/modconfig-ha12A3/vmnet-only/vnetEvent.o
CC [M] /tmp/modconfig-ha12A3/vmnet-only/vnetUserListener.o
LD [M] /tmp/modconfig-ha12A3/vmnet-only/vmnet.o
Building modules, stage 2.
MODPOST 1 modules
WARNING: "mcount" [/tmp/modconfig-ha12A3/vmnet-only/vmnet.ko] undefined!
CC /tmp/modconfig-ha12A3/vmnet-only/vmnet.mod.o
LD [M] /tmp/modconfig-ha12A3/vmnet-only/vmnet.ko
make[1]: Leaving directory `/usr/src/linux-headers-3.13.0-49-generic'
/usr/bin/make -C $PWD SRCROOT=$PWD/. \
MODULEBUILDDIR= postbuild
make[1]: Entering directory `/tmp/modconfig-ha12A3/vmnet-only'
make[1]: `postbuild' is up to date.
make[1]: Leaving directory `/tmp/modconfig-ha12A3/vmnet-only'
cp -f vmnet.ko ./../vmnet.o
make: Leaving directory `/tmp/modconfig-ha12A3/vmnet-only'
Starting VMware services:
Virtual machine monitor failed
Virtual machine communication interface done
VM communication interface socket family done
Blocking file system done
Virtual ethernet failed
VMware Authentication Daemon done
Unable to start services
我看到了一些警告信息,但没有错误,因此,丢失和无法加载的情况确实令人困惑维蒙。
遵循其他建议:
>> sudo /etc/init.d/vmware restart
Stopping VMware services:
VMware Authentication Daemon done
VM communication interface socket family done
Virtual machine communication interface done
Virtual machine monitor done
Blocking file system done
Starting VMware services:
Virtual machine monitor failed
Virtual machine communication interface done
VM communication interface socket family done
Blocking file system done
Virtual ethernet failed
VMware Authentication Daemon done
>> sudo modprobe vmmon
FATAL: Error inserting vmmon (/lib/modules/3.13.0-49-generic/misc/vmmon.ko): Unknown symbol in module, or unknown parameter (see dmesg)
我迫切寻求您的明智建议。
答案1
sudo vmware-modconfig --console --install-all
这个命令帮我修复了这个问题
答案2
从 UEFI 禁用安全启动是一个糟糕的答案,但这是 VMWare 论坛上的官方答案。
我在安装 VirtualBox 时遇到了类似的问题,并设法解决了我的 虚拟机使用相同方法解决问题。这使我能够保持安全启动启用状态并使用 VMWare。
问题是 vmware 内核模块未签名,因此在启用安全启动时无法加载。但是您可以“自行签名”模块,我在 VMWare 工作站和 VirtualBox 上都是这么做的。
- 转到此论坛帖子:https://forums.virtualbox.org/viewtopic.php?f=7&t=77363&start=15
- 转至 Fayce66 于 2016 年 5 月 6 日 08:37 发布的帖子
- 在每个命令中将内核模块“vboxdrv”(virtualbox 模块名称)替换为“vmmon”(vmware 模块名称)
- 您可能需要对内核模块“vmnet”(vmware 网络模块)再次执行所有命令
这些步骤对我有用。我能够保持安全启动启用状态并使用 VMWare Workstation。
答案3
您在使用 VMware Workstation 12 时遇到的问题可能如下...
在启用了安全模式的 Linux 主机上,不允许加载任何未签名的驱动程序。因此,VMware 驱动程序(例如 vmmon 和 vmnet)无法加载,从而阻止虚拟机启动。
要在不关闭安全启动的情况下解决此问题,您可以在终端中执行以下操作来对驱动程序进行自我签名:
使用 openssl 生成密钥对来签名 vmmon 和 vmnet 模块:
openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=VMware/"
(将 MOK 替换为您想要的密钥文件的名称。)
通过运行以下命令,使用生成的密钥对模块进行签名:
sudo /usr/src/linux-headers-`uname -r`/scripts/sign-file sha256 ./MOK.priv ./MOK.der $(modinfo -n vmmon) sudo /usr/src/linux-headers-`uname -r`/scripts/sign-file sha256 ./MOK.priv ./MOK.der $(modinfo -n vmnet)
通过运行以下命令将公钥导入系统的 MOK 列表:
sudo mokutil --import MOK.der
确认此 MOK 注册请求的密码。
- 重新启动计算机。按照说明从 UEFI 控制台完成注册。
引用自此 VMWare 文章:https://kb.vmware.com/kb/2146460
答案4
我构建了一个自动化的 shell 脚本来帮助下载、提取和构建 VMWAREvmnet
和vmmon
文件。运行此脚本应该可以解决问题。
点击这里尝试 ->VMware 主机模块生成器 CLI 如果遇到任何问题,请创建问题。