Ubuntu 24.04 安装 VMware Workstation 17.6.4 并适配 Linux 7.0 内核技术笔记
一、背景
系统环境:
- 操作系统:Ubuntu 24.04 LTS
- 桌面环境:GNOME + Wayland
- CPU:AMD 平台
- 当前内核:
uname -r
7.0.0-28-generic安装 VMware:
VMware Workstation 17.6.4 build-24832109安装方式:
VMware-Workstation-Full-17.6.4-24832109.x86_64.bundle二、遇到的问题
VMware 安装后启动正常,但是无法加载内核模块。
执行:
sudo vmware-modconfig --console --install-all出现:
fatal error: driver-config.h: 没有那个文件或目录以及:
fatal error: vm_basic_types.h: 没有那个文件或目录最终:
Unable to install all modules.三、问题分析
VMware Linux 版依赖两个核心内核模块:
| 模块 | 作用 |
|---|---|
| vmmon | 虚拟机监控核心 |
| vmnet | 虚拟网络 |
源码位置:
/usr/lib/vmware/modules/source/包含:
vmmon.tar
vmnet.tar问题不是缺少源码。
检查:
tar tf /usr/lib/vmware/modules/source/vmmon.tar发现:
vmmon-only/include/driver-config.h文件实际存在。
根本原因
VMware 17.6.4 自带模块源码针对旧 Linux 内核构建环境。
Ubuntu 24.04 当前:
Linux 7.0使用新版 Kbuild。
VMware 原来的 Makefile:
EXTRA_CFLAGS :=已经无法正确传递头文件路径。
导致:
虽然:
include/driver-config.h存在。
但是 gcc 编译时没有:
-Iinclude所以找不到。
四、尝试过程
1. 尝试官方社区源码
下载:
git clone https://github.com/mkubecek/vmware-host-modules.git发现:
最高只有:
workstation-17.5.1没有:
workstation-17.6.4原因:
17.6.x 源码结构变化,不适用。
2. 尝试降低 VMware 版本
考虑:
VMware 17.5.1
但是发现:
官方现在提供最低:
17.5.2原因:
从 VMware Workstation 17.5.2 开始个人用户免费。
最终放弃降级。
3. 尝试切换内核
安装 Ubuntu 官方 6.8 内核:
sudo apt install linux-generic得到:
6.8.0-136-generic但是最终继续使用:
7.0.0-28-generic原因:
新内核对 AMD 新硬件支持更好。
五、最终解决方案
1. 解包 VMware 官方源码
创建临时目录:
mkdir /tmp/test-vmmon
cd /tmp/test-vmmon解压:
tar xf /usr/lib/vmware/modules/source/vmmon.tar
tar xf /usr/lib/vmware/modules/source/vmnet.tar得到:
vmmon-only
vmnet-only六、修复 vmmon 编译问题
1. 修改 Makefile.kernel
文件:
vmmon-only/Makefile.kernel原:
EXTRA_CFLAGS := ...修改:
ccflags-y := ...原因:
Linux 新 Kbuild 已经逐渐淘汰:
EXTRA_CFLAGS推荐:
ccflags-y2. 修复 timer API
编译后出现:
implicit declaration of function ‘del_timer_sync’原因:
Linux 7.x 不再自动包含 timer 定义。
修改:
文件:
vmmon-only/linux/driver.c增加:
#include <linux/timer.h>放在其他 Linux include 中。
修改前:
#include <linux/highmem.h>
#include <linux/miscdevice.h>
#include <linux/mm.h>修改后:
#include <linux/highmem.h>
#include <linux/miscdevice.h>
#include <linux/mm.h>
#include <linux/timer.h>七、重新编译模块
编译 vmmon
进入:
cd vmmon-only执行:
make成功:
LD [M] vmmon.ko
cp -f vmmon.ko ../vmmon.o编译 vmnet
进入:
cd vmnet-only执行:
make成功:
LD [M] vmnet.ko
cp -f vmnet.ko ../vmnet.o八、替换 VMware 模块源码
先备份:
sudo cp /usr/lib/vmware/modules/source/vmmon.tar ~/vmmon.tar.backup
sudo cp /usr/lib/vmware/modules/source/vmnet.tar ~/vmnet.tar.backup重新打包:
sudo tar cf /usr/lib/vmware/modules/source/vmmon.tar vmmon-only
sudo tar cf /usr/lib/vmware/modules/source/vmnet.tar vmnet-only九、重新生成 VMware 内核模块
执行:
sudo vmware-modconfig --console --install-all最终成功:
Starting VMware services:
Virtual machine monitor done
Virtual ethernet done
VMware Authentication Daemon done十、验证
查看模块:
lsmod | grep vm输出:
vmnet
vmmon
vmw_vsock_vmci_transport
vmw_vmci说明:
- VMware 核心模块加载成功
- 网络模块正常
- 虚拟机可以启动
十一、最终环境
| 项目 | 状态 |
|---|---|
| Ubuntu | 24.04 LTS |
| Kernel | 7.0.0-28-generic |
| VMware | 17.6.4 |
| vmmon | 正常 |
| vmnet | 正常 |
| Wayland | 正常 |
| AMD硬件 | 正常 |
十二、经验总结
1. 不一定要换旧版本 VMware
最初认为:
新内核 → 老 VMware 不兼容
实际:
VMware 17.6.4 可以运行,只需要修复内核模块。
2. Linux 下 VMware 最大问题不是 GUI,而是 kernel module
Windows:
安装 → 下一步 → 完成Linux:
VMware
↓
vmmon/vmnet
↓
Linux kernel API
↓
Kbuild
↓
手动适配3. 新 Linux 内核经常需要手动 patch
类似问题未来可能再次出现:
- Linux 7.x
- 8.x
- Ubuntu 新版本
解决思路:
- 找 VMware module source
- 看 gcc 报错
- 修复 API
- 重新编译 ko
4. 保留备用内核
当前:
默认:
7.0.0-28-generic备用:
6.8.0-136-generic不要删除旧内核。
Linux 桌面稳定方案:
新内核尝鲜,旧内核兜底。
最终结论
经过排查:
Ubuntu 24.04 + Linux 7.0 + VMware Workstation 17.6.4 完全可用。
核心修改只有两个:
Makefile.kernel
- EXTRA_CFLAGS
+ ccflags-ylinux/driver.c
增加:
#include <linux/timer.h>重新编译 vmmon、vmnet 后,VMware 恢复正常。
这次折腾实际上完成了一次 VMware Linux 内核模块移植适配。对于后续维护 Ubuntu + VMware 环境,这份记录可以直接复用。

