Ubuntu 24.04 安装 VMware Workstation 17.6.4 并适配 Linux 7.0 内核技术笔记


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-y

2. 修复 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 核心模块加载成功
  • 网络模块正常
  • 虚拟机可以启动

十一、最终环境

项目状态
Ubuntu24.04 LTS
Kernel7.0.0-28-generic
VMware17.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 新版本

解决思路:

  1. 找 VMware module source
  2. 看 gcc 报错
  3. 修复 API
  4. 重新编译 ko

4. 保留备用内核

当前:

默认:

7.0.0-28-generic

备用:

6.8.0-136-generic

不要删除旧内核。

Linux 桌面稳定方案:

新内核尝鲜,旧内核兜底。

最终结论

经过排查:

Ubuntu 24.04 + Linux 7.0 + VMware Workstation 17.6.4 完全可用。

核心修改只有两个:

  1. Makefile.kernel
- EXTRA_CFLAGS
+ ccflags-y
  1. linux/driver.c

增加:

#include <linux/timer.h>

重新编译 vmmonvmnet 后,VMware 恢复正常。

这次折腾实际上完成了一次 VMware Linux 内核模块移植适配。对于后续维护 Ubuntu + VMware 环境,这份记录可以直接复用。

声明:墨墨的经验分享|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - Ubuntu 24.04 安装 VMware Workstation 17.6.4 并适配 Linux 7.0 内核技术笔记


他们的规则是他们的规则,我们只按自己的规则行动