Khắc phục lỗi VMware failed to build vmmon, vmnet trên Kernel 4.9 - Thekalitools.com

Saturday, January 21, 2017

Khắc phục lỗi VMware failed to build vmmon, vmnet trên Kernel 4.9

Nếu bạn nào cập nhật lên Kernel 4.9 vừa ra mắt cách đây không lâu sẽ gặp phải trường hợp không thể mở VMware Workstation vì lỗi Unable to start services - See log file for details, mở log file thì nhận được thông tin failed to build vmmon  failed to build vmnet.
Unable to star services.
Ảnh mượn của Ubuntu 


Bắt đầu nào!

Đầu tiên ta di chuyển vào thư mục module của VMware:
# cd /usr/lib/vmware/modules/source
Giải nén 2 file vmnet.tarvmmon.tar:
# tar -xf vmnet.tar
# tar -xf vmmon.tar
Sửa lại file vmnet-only/userif.c:
Tìm đoạn sau hoặc tương tự:
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 6, 0)
    retval = get_user_pages(addr, 1, 1, 0, &page, NULL);
#else
    retval = get_user_pages(current, current->mm, addr,
                1, 1, 0, &page, NULL);
#endif
Thay thành:
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 9, 0)
     retval = get_user_pages(addr, 1, 0, &page, NULL);
#else
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 6, 0)
     retval = get_user_pages(addr, 1, 1, 0, &page, NULL);
#else
     retval = get_user_pages(current, current->mm, addr,
                 1, 1, 0, &page, NULL);
#endif
#endif
Lưu ý: thay 4, 9, 0 thành 4, 9, 5 nếu bạn dùng kernel 4.9.5 nhé!
Lưu lại và tiếp tục sửa file vmmon-only/linux/hostif.c:
Tìm đoạn tương tự như sau:
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 6, 0)
   retval = get_user_pages((unsigned long)uvAddr, numPages, 0, 0, ppages, NULL);
#else
   retval = get_user_pages(current, current->mm, (unsigned long)uvAddr,
                           numPages, 0, 0, ppages, NULL);
#endif
Và cũng thay thành:
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 9, 0)
   retval = get_user_pages((unsigned long)uvAddr, numPages, 0, ppages, NULL);
#else
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 6, 0)
   retval = get_user_pages((unsigned long)uvAddr, numPages, 0, 0, ppages, NULL);
#else
   retval = get_user_pages(current, current->mm, (unsigned long)uvAddr,
                           numPages, 0, 0, ppages, NULL);
#endif
#endif
Lưu ý: thay 4, 9, 0 thành 4, 9, 5 nếu bạn dùng kernel 4.9.5 nhé!
Sao lưu hai file nén ở trên lại:
# mv vmnet.tar vmnet.tar.BACKUP
# mv vmmon.tar vmmon.tar.BACKUP
Tạo 2 file nén mới từ hai thư mục đã chỉnh sửa:
# tar -cf vmnet.tar vmnet-only
# tar -cf vmmon.tar vmmon-only
Như vậy là xong, hãy thử khởi động VMware Workstation nào!

Lời kết: 

Về nguyên nhân thì do VMware chưa hỗ trợ cho phiên bản Kernel mới, cụ thể là như thế nào mình sẽ cập nhật sau vậy. Chúng ta khắc phục lỗi này trước nào! Chúc các bạn thành công.

Nguồn tham khảo: rglinuxtech.com | askubuntu.com

No comments:

Post a Comment