VMWare Workstation vmmon не работает на Ubuntu 18.04

3409
user1330734

Я обновился до Ubuntu 18.04, и vmmon.koмодуль для VMWare Workstation 12.5.9 теперь не может быть собран.

vmmon compilation failure output

/usr/lib/vmware/modules/source/vmmon-only/linux/driver.c: In function ‘LinuxDriverInitTSCkHz’: /usr/lib/vmware/modules/source/vmmon-only/linux/driver.c:268:22: error: assignment from incompatible pointer type [-Werror=incompatible-pointer-types] tscTimer.function = LinuxDriverEstimateTSCkHzDeferred; ^ /usr/lib/vmware/modules/source/vmmon-only/linux/driver.c:270:12: error: ‘struct timer_list’ has no member named ‘data’ tscTimer.data = 0; ^ /usr/lib/vmware/modules/source/vmmon-only/linux/driver.c: In function ‘init_module’: /usr/lib/vmware/modules/source/vmmon-only/linux/driver.c:312:4: error: implicit declaration of function ‘init_timer’; did you mean ‘init_timers’? [-Werror=implicit-function-declaration] init_timer(&linuxState.pollTimer); ^~~~~~~~~~ init_timers /usr/lib/vmware/modules/source/vmmon-only/linux/driver.c:313:24: error: ‘struct timer_list’ has no member named ‘data’ linuxState.pollTimer.data = 0; ^ /usr/lib/vmware/modules/source/vmmon-only/linux/driver.c:314:34: error: assignment from incompatible pointer type [-Werror=incompatible-pointer-types] linuxState.pollTimer.function = LinuxDriverPollTimeout; 

Это кажется незначительным изменением, приводящим к сбою компиляции vmmon, возможно, что структуры данных изменились между версиями ядра?

Редактировать: Кажется, что в ядре Linux v4.15 init_timer()интерфейс был удален

uname -a Linux hostnema 4.15.0-22-generic #24-Ubuntu SMP Wed May 16 12:15:17 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux 

Любые предложения о том, как я мог бы начать это исправить?

3

3 ответа на вопрос

2
Charly

Я нашел решение и создал файл сценария на основе исходников mkucebek на github.

Вы должны создать файл с этим содержимым и запускать его каждый раз, когда это необходимо:

#!/bin/bash VMWARE_VERSION=workstation-12.5.9 TMP_FOLDER=/tmp/patch-vmware rm -fdr $TMP_FOLDER mkdir -p $TMP_FOLDER cd $TMP_FOLDER git clone https://github.com/mkubecek/vmware-host-modules.git cd $TMP_FOLDER/vmware-host-modules git checkout $VMWARE_VERSION git fetch make sudo make install sudo rm /usr/lib/vmware/lib/libz.so.1/libz.so.1 sudo ln -s /lib/x86_64-linux-gnu/libz.so.1  /usr/lib/vmware/lib/libz.so.1/libz.so.1 

sudo /etc/init.d/vmware restart

Затем вам просто нужно запустить VMware Workstation без сборки модулей.

1
NeoGeek

Используя предложенный Чарли скрипт, я смог собрать необходимые модули для ядра 4.15.0-29-generic на 16.04 LTS. В конце скрипта есть опечатка, не должно быть строки, возвращаемой между sudo ln -s /lib/x86_64-linux-gnu/libz.so.1и/usr/lib/vmware/lib/libz.so.1/libz.so.1

Еще одно дополнение, которое я бы порекомендовал, это добавить sudo /etc/init.d/vmware restartкоманду в конец приведенного выше сценария.

Таким образом, настоящий сценарий решения с настройками:

#!/bin/bash VMWARE_VERSION=workstation-12.5.9 TMP_FOLDER=/tmp/patch-vmware rm -fdr $TMP_FOLDER mkdir -p $TMP_FOLDER cd $TMP_FOLDER git clone https://github.com/mkubecek/vmware-host-modules.git cd $TMP_FOLDER/vmware-host-modules git checkout $VMWARE_VERSION git fetch make sudo make install sudo rm /usr/lib/vmware/lib/libz.so.1/libz.so.1 sudo ln -s /lib/x86_64-linux-gnu/libz.so.1 /usr/lib/vmware/lib/libz.so.1/libz.so.1 sudo /etc/init.d/vmware restart 

`` `

Извините, это не комментарий к ответу Чарли, у меня нет репутации в этом аккаунте.

Обратите внимание, что это будет работать только для Workstation 12.5.9, вы можете легко сказать, какая версия у вас есть, запустивvmware --version

Просто обновите до 4.15.0-32-generic, и это все еще работает для меня. NeoGeek 6 лет назад 0
Фу, рад, что нашел это - должен был сделать это после обновления Ubuntu 18.04 до 4.15.0-34-generic kernel Kelly Adams 6 лет назад 0
0
James Dube

Я столкнулся с той же проблемой в Ubuntu 18.04 при установке новой рабочей станции vmware (14.1.3 build-9474260) и после обновления ядра. Кажется, это проблема с импортом модулей в ядро ​​на машине с безопасной загрузкой, поэтому на основе этой статьи я сделал этот скрипт bash:

#!/bin/bash sudo vmware-modconfig --console --install-all  echo "signing vmmon module" sudo /usr/src/linux-headers-`uname -r`/scripts/sign-file sha256 ./MOK.priv  ./MOK.der $(modinfo -n vmmon)  echo "signing vmnet module" sudo /usr/src/linux-headers-`uname -r`/scripts/sign-file sha256 ./MOK.priv  ./MOK.der $(modinfo -n vmnet)  echo "importing MOK cert" mokutil --import MOK.der