ubuntu 24.04 安装vmware workstation

ubuntu 24.04 安装vmware workstation


VMware-Workstation-Full-17.5.1-23298084.x86_64.bundle 安装包下载:https://sysin.org/blog/vmware-workstation-17/<>

vmnet.ko
vmmon.ko
编译
git clone https://github.com/mkubecek/vmware-host-modules.git
切到workstation-17.5.1 branch;

ubuntu 24.04内核版本6.17.0-19-generic,编译问题解决:

diff --git a/vmmon-only/Makefile.kernel b/vmmon-only/Makefile.kernel
index a39e099..57595ed 100644
--- a/vmmon-only/Makefile.kernel
+++ b/vmmon-only/Makefile.kernel
@@ -22,6 +22,11 @@ CC_OPTS += -DVMMON -DVMCORE
 INCLUDE := -I$(SRCROOT)/include -I$(SRCROOT)/include/x86 -I$(SRCROOT)/common -I$(SRCROOT)/linux
 EXTRA_CFLAGS := $(CC_OPTS) $(INCLUDE)
 
+ccflags-y += $(CC_OPTS) $(INCLUDE) $(INCLUDE)
+
+
+$(warning EXTRA_CFLAGS:$(EXTRA_CFLAGS) )
+
 obj-m += $(DRIVER).o
 
 $(DRIVER)-y := $(subst $(SRCROOT)/, , $(patsubst %.c, %.o, \
diff --git a/vmmon-only/linux/driver.c b/vmmon-only/linux/driver.c
index ab8e2dc..df5dc5a 100644
--- a/vmmon-only/linux/driver.c
+++ b/vmmon-only/linux/driver.c
@@ -29,6 +29,8 @@
 #include <linux/slab.h>
 #include <linux/smp.h>
 #include <linux/wait.h>
+#include <linux/timer.h>
+#include <linux/jiffies.h>
 
 #include <asm/hw_irq.h> /* for CALL_FUNCTION_VECTOR */
 
@@ -345,7 +347,8 @@ LinuxDriverExit(void)
 
    Log("Module %s: unloaded\n", vmmon_miscdev.name);
 
-   del_timer_sync(&tscTimer);
+   //del_timer_sync(&tscTimer);
+   timer_delete_sync(&tscTimer);
 
    Vmx86_CleanupHVIOBitmap();
    Task_Terminate();
diff --git a/vmmon-only/linux/hostif.c b/vmmon-only/linux/hostif.c
index c1e6c67..138e60c 100644
--- a/vmmon-only/linux/hostif.c
+++ b/vmmon-only/linux/hostif.c
@@ -55,6 +55,9 @@
 #include <linux/signal.h>
 #include <linux/taskstats_kern.h> // For linux/sched/signal.h without version check
 
+#include <linux/timer.h>
+#include <linux/jiffies.h>
+
 #include "x86apic.h"
 #include "modulecall.h"
 #include "driver.h"
@@ -1995,7 +1998,8 @@ HostIF_InitUptime(void)
 void
 HostIF_CleanupUptime(void)
 {
-   del_timer_sync(&uptimeState.timer);
+   //del_timer_sync(&uptimeState.timer);
+   timer_delete_sync(&uptimeState.timer);
 }
 
 
@@ -3410,7 +3414,7 @@ HostIF_SafeRDMSR(unsigned int msr,   // IN
    int err;
    u64 v;
 
-   err = rdmsrl_safe(msr, &v);
+   err = rdmsrq_safe(msr, &v);
    *val = (err == 0) ? v : 0;  // Linux corrupts 'v' on error
 
    return err;
diff --git a/vmnet-only/vmnetInt.h b/vmnet-only/vmnetInt.h
index b49c399..96f78ab 100644
--- a/vmnet-only/vmnetInt.h
+++ b/vmnet-only/vmnetInt.h
@@ -41,8 +41,16 @@
     compat_skb_set_network_header(skb, sizeof (struct ethhdr)),  \
     dev_queue_xmit(skb)                                   \
   )
-#define dev_lock_list()    read_lock(&dev_base_lock)
-#define dev_unlock_list()  read_unlock(&dev_base_lock)
+//#define dev_lock_list()    read_lock(&dev_base_lock)
+//#define dev_unlock_list()  read_unlock(&dev_base_lock)
+
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 11, 0)
+#   define dev_lock_list()    rcu_read_lock()
+#   define dev_unlock_list()  rcu_read_unlock()
+#else
+#   define dev_lock_list()    read_lock(&dev_base_lock)
+#   define dev_unlock_list()  read_unlock(&dev_base_lock)
+#endif
 
 
 extern struct proto vmnet_proto;


配置虚拟机自启动

[Unit]
Description=VMware Win10 Auto Start/Stop
After=network-online.target

[Service]
Type=oneshot
RemainAfterExit=yes
User=wyk
Environment=PATH=/usr/local/bin:/usr/bin:/bin

ExecStart=/usr/bin/vmrun start /home/wyk/VirtualMachines/vm-windows/Windows10.vmx nogui

ExecStop=/usr/bin/vmrun stop /home/wyk/VirtualMachines/vm-windows/Windows10.vmx soft
ExecStop=/usr/bin/vmrun stop /home/wyk/VirtualMachines/vm-windows/Windows10.vmx hard

TimeoutStopSec=120

[Install]
WantedBy=multi-user.target


sudo systemctl daemon-reload sudo systemctl restart vmware-win10

确认是否启动:
systemctl status vmware-win10 -l

vmrun list



配置虚拟机自启动

vim ~/.config/systemd/user/vmware-win10.service

[Unit]
Description=VMware Win10 Auto Start/Stop (User)
After=default.target

[Service]
Type=oneshot
RemainAfterExit=yes

Environment=PATH=/usr/local/bin:/usr/bin:/bin

# 等待 VMware 服务起来(关键)
ExecStartPre=/bin/bash -c 'for i in {1..30}; do systemctl is-active vmware && exit 0; sleep 2; done; exit 1'

# 再额外等一会(保险)
ExecStartPre=/bin/sleep 5

# 启动虚拟机
ExecStart=/usr/bin/vmrun start /home/wyk/VirtualMachines/vm-windows/Windows10.vmx nogui

# 停止虚拟机
ExecStop=/usr/bin/vmrun stop /home/wyk/VirtualMachines/vm-windows/Windows10.vmx soft
ExecStop=/usr/bin/vmrun stop /home/wyk/VirtualMachines/vm-windows/Windows10.vmx hard

TimeoutStopSec=120

[Install]
WantedBy=default.target

bash:

systemctl --user daemon-reload
systemctl --user restart vmware-win10

启动log:

systemctl --user status vmware-win10

posted @ 2026-03-28 22:31  王阳开  阅读(92)  评论(0)    收藏  举报