Install VMWare For New Kernel Linux

Ngày đăng: 2026-04-24

Lời nói đầu

Bản chất của vấn đề: Tại sao VMware lại hay lỗi trên Linux?

Phần mềm VMware Workstation là mã nguồn đóng, được tối ưu cho các hệ điều hành ổn định (như Ubuntu LTS, RHEL) sử dụng nhân Kernel cũ (phiên bản 5.x). Tuy nhiên, bạn lại đang dùng Parrot OS (hoặc các distro như Arch, Manjaro) – những hệ thống cập nhật liên tục (Rolling Release) với Linux Kernel cực mới (6.15 trở lên).

Mỗi khi Kernel ra bản mới, cấu trúc code của Linux bị thay đổi (đổi tên biến, đổi tên hàm). Do VMware chưa kịp cập nhật bộ cài gốc để đuổi theo sự thay đổi này, nên khi nó cố gắng biên dịch (compile) các module lõi (vmmon - quản lý CPU ảo, vmnet - quản lý Mạng ảo) để gắn vào hệ thống của bạn, trình biên dịch của Linux không hiểu các dòng code cũ đó và lập tức báo lỗi (Exit code 1).

Hiểu được điều này, quy trình cài đặt chuẩn trên các máy Linux đời mới sẽ luôn bao gồm 3 Giai đoạn:

1. Giai đoạn Chuẩn bị & Cài đặt File Gốc

Hệ thống cần các công cụ để có thể tự biên dịch mã nguồn.

# Cài đặt bộ công cụ biên dịch và header của nhân hệ điều hành
sudo apt update
sudo apt install build-essential dkms linux-headers-$(uname -r)

# Cấp quyền và chạy file cài đặt gốc của VMware (.bundle)
chmod +x VMware-Workstation-Full-*.bundle
sudo ./VMware-Workstation-Full-*.bundle

Lưu ý: Cài xong file bundle, tuyệt đối chưa mở app VMware lên vội.

2. Giai đoạn Giải nén & Vá lỗi Mã nguồn (Quan trọng nhất)

Thay vì chờ đợi hãng cập nhật, chúng ta sẽ tự lôi mã nguồn của 2 module vmmonvmnet ra, sửa lại các từ khóa cũ thành từ khóa mới mà Kernel 6.19+ hiểu được.

Tạo thư mục làm việc và trích xuất mã nguồn:

mkdir ~/vmware-patch && cd ~/vmware-patch
tar -xf /usr/lib/vmware/modules/source/vmmon.tar
tar -xf /usr/lib/vmware/modules/source/vmnet.tar

Thực hiện vá lỗi bằng công cụ tìm kiếm và thay thế (sed): Sao chép nguyên khối lệnh này dán vào Terminal. Đây là cốt lõi của mọi lỗi bạn đã gặp:

# 1. Sửa lỗi "EXTRA_CFLAGS" (Do Linux đổi tên biến cấu trúc build)
find vmmon-only vmnet-only -name "Makefile*" -exec sed -i 's/EXTRA_CFLAGS/ccflags-y/g' {} \;

# 2. Sửa lỗi "rdmsrl_safe" (Do Linux đổi tên hàm đọc thanh ghi CPU)
find vmmon-only -name "*.c" -o -name "*.h" | xargs sed -i 's/rdmsrl_safe/rdmsrq_safe/g'

# 3. Sửa lỗi "del_timer_sync" (Do Linux đổi tên hàm quản lý thời gian)
find vmmon-only vmnet-only -name "*.c" -o -name "*.h" | xargs sed -i 's/del_timer_sync/timer_delete_sync/g'

# 4. Sửa lỗi "Magic init_module() function name is deprecated" của module mạng
# (Do luật viết code mới của Linux cấm dùng tên hàm mặc định)
sed -i 's/\binit_module\b/vmnet_init/g' vmnet-only/driver.c
sed -i 's/\bcleanup_module\b/vmnet_cleanup/g' vmnet-only/driver.c
echo 'module_init(vmnet_init);' >> vmnet-only/driver.c
echo 'module_exit(vmnet_cleanup);' >> vmnet-only/driver.c

3. Giai đoạn Đóng gói & Kích hoạt

Sau khi mã nguồn đã được sửa hoàn hảo, chúng ta sẽ đóng gói nó lại, biên dịch và nạp thẳng vào nhân hệ điều hành.

# Biên dịch (Compile) cả 2 module bằng lệnh make
make -C vmmon-only
make -C vmnet-only

# Copy các module vừa biên dịch (.ko) vào đúng vị trí của hệ thống
sudo mkdir -p /lib/modules/$(uname -r)/misc
sudo cp vmmon-only/vmmon.ko /lib/modules/$(uname -r)/misc/
sudo cp vmnet-only/vmnet.ko /lib/modules/$(uname -r)/misc/

# Cập nhật danh sách module cho hệ điều hành
sudo depmod -a

# Khởi động lại dịch vụ ảo hóa của VMware
sudo /etc/init.d/vmware restart

← Quay lại trang chủ