VMWare Workstation vmmon сломанной на Ubuntu 18.04

я обновился до 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

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

27
задан JakeGould
24.04.2023 10:35 Количество просмотров материала 3623
Распечатать страницу

3 ответа

Я нашел решение и создаю файл скрипта на основе GitHub-источников mkucebek.

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

#!/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.д/с VMware перезагрузить

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

2
отвечен Charly 2023-04-25 18:23

используя предложенный Чарли скрипт, я смог собрать необходимые модули для ядра 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

1
отвечен NeoGeek 2023-04-25 20:40

я столкнулся с той же проблемой на Ubuntu 18.04 на новой vmware worksation (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
0
отвечен James Dube 2023-04-25 22:57

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя

Похожие вопросы про тегам:

c
kernel-module
linux
ubuntu
vmware-workstation
Вверх