Ubuntu 18.04にアップグレードしたところ、VMWare Workstation 12.5.9の_vmmon.ko
_モジュールがビルドできなくなりました。
_/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
_
これを修正し始める方法についての提案はありますか?
私は解決策を見つけ、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を起動するだけです。
Charlyの推奨スクリプトを使用して、16.04 LTSでカーネル4.15.0-29-genericに必要なモジュールを構築できました。スクリプトの最後にタイプミスがあります。Sudo ln -s /lib/x86_64-linux-gnu/libz.so.1
と/usr/lib/vmware/lib/libz.so.1/libz.so.1
の間に改行を入れないでください
私がお勧めするもう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
を実行すると、使用しているバージョンを簡単に確認できます。
Ubuntu 18.04で、新しいvmwareの動作(14.1.3 build-9474260)のインストール時とカーネルの更新後に同じ問題に直面していました。セキュアブートを備えたマシンのカーネルにモジュールをインポートすることには問題があるようですので、これに基づいて article 作成しました this 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