VMware Player 2.0.5 Build 109488のカーネルモジュールがLinux 2.6.27に対してビルドできない件とその対処
- VMware Server 2とVMware Player 2.5 Build 118166では問題なし
- VMware Player 2.0.5 Build 109488ではエラーが出る
- パッチ
- vmblockについて
VMware Server 2とVMware Player 2.5 Build 118166では問題なし
2008年9月に出たVMware Serverのバージョン2系では、Liunx 2.6.27でのビルドの問題はない。(2008/11/3)更に、VMware Playerのバージョン2.5(Build 118166)でも問題がなくなっている。2008/11/3現在
www.vmware.com/jp/download/player/
のページには書かれていないが
www.vmware.com/download/player/
にはバージョン2.5について書かれている。
VMware Player 2.0.5 Build 109488ではエラーが出る
2008年Using 2.6.x kernel build system. make -C /usr/src/linux M=$PWD SRCROOT=$PWD/. modules make[1]: Entering directory `/usr/src/linux-2.6.27-gentoo' make[1]: warning: jobserver unavailable: using -j1. Add `+' to parent make rule . CC [M] /var/tmp/portage/app-emulation/vmware-modules-1.0.0.22/work/vmmon-only /linux/driver.o In file included from /var/tmp/portage/app-emulation/vmware-modules-1.0.0.22/wor k/vmmon-only/./include/x86.h:24, from /var/tmp/portage/app-emulation/vmware-modules-1.0.0.22/wor k/vmmon-only/linux/driver.h:15, from /var/tmp/portage/app-emulation/vmware-modules-1.0.0.22/work/vmmon-only/linux/driver.c:84: /var/tmp/portage/app-emulation/vmware-modules-1.0.0.22/work/vmmon-only/./include/x86paging.h:61:1: warning: "PTE_PFN_MASK" redefined In file included from include/asm/pda.h:8, from include/asm/current.h:19, from include/asm/processor.h:15, from include/linux/prefetch.h:14, from include/linux/list.h:6, from include/linux/module.h:9, from /var/tmp/portage/app-emulation/vmware-modules-1.0.0.22/work/vmmon-only/linux/driver.c:12: include/asm/page.h:22:1: warning: this is the location of the previous definition In file included from /var/tmp/portage/app-emulation/vmware-modules-1.0.0.22/work/vmmon-only/linux/vmhost.h:13, from /var/tmp/portage/app-emulation/vmware-modules-1.0.0.22/work/vmmon-only/linux/driver.c:115: /var/tmp/portage/app-emulation/vmware-modules-1.0.0.22/work/vmmon-only/./include/compat_semaphore.h:5:27: error: asm/semaphore.h: No such file or directory make[3]: *** [/var/tmp/portage/app-emulation/vmware-modules-1.0.0.22/work/vmmon-only/linux/driver.o] Error 1 make[2]: *** [_module_/var/tmp/portage/app-emulation/vmware-modules-1.0.0.22/work/vmmon-only] Error 2 make[1]: *** [sub-make] Error 2 make[1]: Leaving directory `/usr/src/linux-2.6.27-gentoo' make: *** [vmmon.ko] Error 2
any-any-updateを探してもパッチはなかった。
パッチ
大変ありがたいことにbugs.gentoo.org/show_bug.cgi?id=242098
にパッチ(1.0.0.22-kernel-2.6.27.patch)があり、これをVMware Playerのバージョン2.0.5 Build 109488に含まれるモジュールのソースへ適用することで上記ビルドエラーは解消された。*2ebuildへの修正もアップロードされている。
Gentoo以外では、lib/modules/source以下にある、各モジュール(vmmonとvmnet)のtarファイルを展開してパッチを当て、再びtarファイルにまとめて元のファイルと置き換えることで適用することになりそう。
vmblockについて
上記パッチだけではvmblockが動かない。* Loading vmblock for drag and drop support ... /etc/init.d/vmware: line 63: 32446 強制終了 mount -t vmblock none /proc/fs/vmblock/mountPoint * Failed to mount the vmblock filesystem [ ok ]
手動でマウント操作をしてもダメ。
$ sudo mount -t vmblock none /proc/fs/vmblock/mountPoint 強制終了
原因は
CC [M] /var/tmp/portage/app-emulation/vmware-modules-1.0.0.22/work/vmblock-only/linux/filesystem.o /var/tmp/portage/app-emulation/vmware-modules-1.0.0.22/work/vmblock-only/linux/filesystem.c: In function 'VMBlockInitFileSystem': /var/tmp/portage/app-emulation/vmware-modules-1.0.0.22/work/vmblock-only/linux/filesystem.c:121: warning: passing argument 5 of 'kmem_cache_create' from incompatible pointer type
この部分と思われ(2.6.26ではこのファイルに対して警告は出ていない)、ソースの該当部分をダメ元で見たのだが、似たようなエラーから
http://web.archive.org/web/20091025124753/http://www.nabble.com/2.6.27-rc3:-squashfs-error-td19063795.html
などを参考にしつつ、下のような修正をしたところ、この警告はなくなって動作もするようになった。
[任意]ファイル名: vmblock-kernel-2.6.27.patch
(this patch is public domain) diff -ur vmblock-only.orig/include/compat_slab.h vmblock-only/include/compat_slab.h --- vmblock-only.orig/include/compat_slab.h +++ vmblock-only/include/compat_slab.h @@ -42,11 +42,17 @@ */ #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 23) && !defined(VMW_KMEMCR_CTOR_HAS_3_ARGS) # define VMW_KMEMCR_CTOR_HAS_3_ARGS +#elif LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 27) && !defined(VMW_KMEMCR_CTOR_HAS_2_ARGS) +# define VMW_KMEMCR_CTOR_HAS_2_ARGS #endif #ifdef VMW_KMEMCR_CTOR_HAS_3_ARGS typedef void compat_kmem_cache_ctor(void *, compat_kmem_cache *, unsigned long); #else +# ifdef VMW_KMEMCR_CTOR_HAS_2_ARGS typedef void compat_kmem_cache_ctor(compat_kmem_cache *, void *); +# else +typedef void compat_kmem_cache_ctor(void *); +# endif #endif #endif /* __COMPAT_SLAB_H__ */ diff -ur vmblock-only.orig/linux/filesystem.c vmblock-only/linux/filesystem.c --- vmblock-only.orig/linux/filesystem.c +++ vmblock-only/linux/filesystem.c @@ -403,9 +403,14 @@ compat_kmem_cache *cache, // IN: cache slab is from unsigned long flags) // IN: flags associated with allocation #else +# ifdef VMW_KMEMCR_CTOR_HAS_2_ARGS static void InodeCacheCtor(compat_kmem_cache *cache, // IN: cache slab is from void *slabElem) // IN: allocated slab item to initialize +# else +static void +InodeCacheCtor(void *slabElem) // IN: allocated slab item to initialize +# endif #endif { #ifdef VMW_EMBED_INODE
(2008/11/6)条件分岐の書き方が不正だったのを修正
使用したバージョン: