问题形式
Could not open/dev]
are
vmmon:???
Please make sute that
the kernel module
‘vmmon’ is loaded.]
因为VWware无法直接从软件源获取,所以我们需要从官网获取,官网下载完以后在ubuntu上安装VMware可能出现以上问题
在Ubuntu22.04上安装的时候就需要安装内核模块,而在Kubuntu22.04上没有手动安装就成功打开了
对于Ubuntu安装VWware的步骤参考以下俩篇博客:
[2025年]最新VMware Workstation虚拟机下载并安装
在参考Ubuntu安装VMware虚拟机这篇文章过程中出现openEuler中安装vmware for linux 找不到gcc
Using kernel build system.
make -C /lib/modules/6.8.0-60-generic/build/include/… M= P W D S R C R O O T = PWD SRCROOT= PWDSRCROOT=PWD/.
MODULEBUILDDIR= modules
make[1]: 进入目录“/usr/src/linux-headers-6.8.0-60-generic”
warning: the compiler differs from the one used to build the kernel
The kernel was built by: x86_64-linux-gnu-gcc-12 (Ubuntu 12.3.0-1ubuntu1~22.04) 12.3.0
You are using:
CC [M] /usr/lib/vmware/modules/source/vmnet-only/driver.o
/bin/sh: 1: gcc-12: not found
make[3]: *** [scripts/Makefile.build:243:/usr/lib/vmware/modules/source/vmnet-only/driver.o] 错误 127
make[2]: *** [/usr/src/linux-headers-6.8.0-60-generic/Makefile:1925:/usr/lib/vmware/modules/source/vmnet-only] 错误 2
make[1]: *** [Makefile:240:__sub-make] 错误 2
make[1]: 离开目录“/usr/src/linux-headers-6.8.0-60-generic”
make: *** [Makefile:117:vmnet.ko] 错误 2
要解决编译VMware vmnet模块时出现的gcc-12 not found错误
由于内核是用gcc-12编译的,但系统中缺少该编译器:
bash
sudo apt update
sudo apt install gcc-12 g++-12
使用yum install gcc 安装gcc
手动执行下面的代码
cd /usr/lib/vmware/modules/source
- 目的: 切换到 VMware 模块源代码的目录。该目录通常包含 VMware 内核模块的源代码文件,比如
vmmon
和vmnet
。
tar xf vmmon.tar
- 目的: 解压
vmmon.tar
文件。这个文件包含了vmmon
模块的源代码。使用tar xf
命令会将压缩包中的内容解压到当前目录下。
tar xf vmnet.tar
- 目的: 解压
vmnet.tar
文件。该文件包含了vmnet
模块的源代码,功能与vmmon
类似,但主要负责网络功能。
cd vmmon-only
- 目的: 切换到
vmmon-only
目录,这个目录包含vmmon
模块的源代码和 Makefile 文件,用于编译内核模块。
make
- 目的: 使用
make
命令编译vmmon
模块。根据Makefile
的配置,它将使用当前的内核头文件和开发工具构建vmmon.o
内核模块文件。
cd ../vmnet-only
- 目的: 返回到上一级目录,并切换到
vmnet-only
目录,以便编译vmnet
模块。
make
- 目的: 使用
make
命令编译vmnet
模块,类似于上一步,将生成vmnet.o
内核模块文件。
cd ..
- 目的: 返回到
source
目录的上一级目录。
mkdir /lib/modules/`uname -r`/misc
- 目的: 创建一个名为
misc
的新目录,位于/lib/modules/当前内核版本/
下。这个目录用于存放自定义的内核模块。使用uname -r
命令获取当前正在运行的内核版本。
cp vmmon.o /lib/modules/`uname -r`/misc/vmmon.ko
- 目的: 将编译生成的
vmmon.o
模块文件复制到刚刚创建的misc
目录,并重命名为vmmon.ko
。.ko
是内核模块的标准扩展名。
cp vmnet.o /lib/modules/`uname -r`/misc/vmnet.ko
- 目的: 将编译生成的
vmnet.o
模块文件复制到misc
目录,并重命名为vmnet.ko
。
depmod -a
- 目的: 运行
depmod
命令,更新模块依赖关系。这一步确保在加载模块时,系统能够识别和处理它们之间的依赖关系。-a
参数表示分析所有已安装模块。
/etc/init.d/vmware restart
- 目的: 重启 VMware 服务。通过这个命令,所有 VMware 相关的服务将被停止并重新启动,使新的模块生效。
这些命令的主要目的是从源代码编译 VMware 的内核模块 vmmon
和 vmnet
,将编译后的模块安装到系统中,并重启 VMware 服务,以确保新模块能够正常工作。这种过程在更改内核或更新 VMware 版本后非常常见。确保每一步都顺利完成,以避免模块加载错误。
遇到“Failed to initialize monitor device”问题
是 VMware 虚拟化软件中一个常见的错误,通常表示 VMware 无法正确访问或初始化监控设备
可能的原因
内核模块未加载:
- VMware 依赖特定的内核模块(如
vmmon
和vmnet
)来管理虚拟机。如果这些模块没有被加载,可能会导致此错误。
权限问题:
- 运行 VMware 的用户可能没有足够的权限访问所需的设备文件。
与其它虚拟化软件的冲突:
- 如果系统上安装了其他虚拟化软件(如 VirtualBox 或 Hyper-V),可能会与 VMware 冲突,从而导致初始化失败。
缺少必要的依赖:
- 系统缺少编译和运行 VMware 所需的开发工具和库。
配置文件损坏:
- VMware 的配置文件可能损坏,导致无法正确初始化。
解决步骤
检查并加载内核模块:
使用以下命令检查 vmmon
和 vmnet
模块:
lsmod | grep vmmon
lsmod | grep vmnet
如果模块未加载,尝试手动加载:
sudo modprobe vmmon
sudo modprobe vmnet
复制完成后,加载 vmmon 模块:
sudo modprobe vmmon
sudo modprobe vmnet
检查是否加载成功:
lsmod | grep vmmon
lsmod | grep vmnet
此时这两个驱动已经加载到内核里了
重新编译内核模块:
- 如果您最近更新了内核,可能需要重新编译 VMware 的内核模块:
sudo vmware-modconfig --console --install-all
检查权限:
- 确保您有足够的权限运行 VMware。可以尝试以超级用户身份运行:
sudo vmware
检查其他虚拟化软件:
- 如果系统上有其他虚拟化软件,尝试禁用或卸载它们,然后重启计算机。
更新 VMware:
- 确保您使用的是 VMware 的最新版本,访问 VMware 官网下载并安装更新。
检查日志文件:
- 查看 VMware 的日志文件,以获取更多详细的错误信息。日志文件通常位于
/var/log/vmware/
目录下。
重启计算机:
- 在某些情况下,简单的重启计算机可以解决驱动和模块加载的问题。