無料Wikiサービス | デモページ
Linuxなどのメモ書き

vsock.o コンパイル (VMWare)


概要

Fedora Core4上にVMware Workstation 6.5をインストールした時の対応作業メモ。

  • Host OS: Fedora Core4
  • インストールバージョン: VMware Workstation 6.5 For Linux Build. 118166

現象

VMware Workstation 6.5をインストール後、vmwareを起動すると初回はカーネルモジュールをコンパイルしようとするが、VMCI Sockets(vsock.o)のコンパイルに失敗する。(コンパイルに失敗していてもVMWare自体は動作する模様)

エラーメッセージ

Using 2.6.x kernel build system.
make: Entering directory `/tmp/vmware-root/modules/vsock-only'
make -C /lib/modules/2.6.11-1.1369_FC4smp/build/include/.. SUBDIRS=$PWD SRCROOT=$PWD/. modules
make[1]: Entering directory `/usr/src/kernels/2.6.11-1.1369_FC4-smp-i686'
  CC [M]  /tmp/vmware-root/modules/vsock-only/linux/af_vsock.o
/tmp/vmware-root/modules/vsock-only/linux/af_vsock.c:331: error: unknown field ‘slab_obj_size’ specified in initializer
/tmp/vmware-root/modules/vsock-only/linux/af_vsock.c:331: 警告: 初期化子のまわりのブレースを欠いています
/tmp/vmware-root/modules/vsock-only/linux/af_vsock.c:331: 警告: (near initialization for ‘vsockVmciProto.name’)
/tmp/vmware-root/modules/vsock-only/linux/af_vsock.c:331: 警告: 暗黙の定数変換でオーバーフローしました
/tmp/vmware-root/modules/vsock-only/linux/af_vsock.c: In function ‘__VSockVmciCreate’:
/tmp/vmware-root/modules/vsock-only/linux/af_vsock.c:2414: error: ‘struct proto’ has no member named ‘slab_obj_size’
/tmp/vmware-root/modules/vsock-only/linux/af_vsock.c:2414: 警告: passing argument 4 of ‘sk_alloc’ makes integer from pointer without a cast
/tmp/vmware-root/modules/vsock-only/linux/af_vsock.c: In function ‘VSockVmciRegisterProto’:
/tmp/vmware-root/modules/vsock-only/linux/af_vsock.c:2704: 警告: implicit declaration of function ‘sk_alloc_slab’
/tmp/vmware-root/modules/vsock-only/linux/af_vsock.c:2706: 警告: implicit declaration of function ‘sk_alloc_slab_error’
/tmp/vmware-root/modules/vsock-only/linux/af_vsock.c: In function ‘VSockVmciUnregisterProto’:
/tmp/vmware-root/modules/vsock-only/linux/af_vsock.c:2741: 警告: implicit declaration of function ‘sk_free_slab’
make[2]: *** [/tmp/vmware-root/modules/vsock-only/linux/af_vsock.o] エラー 1
make[1]: *** [_module_/tmp/vmware-root/modules/vsock-only] エラー 2
make[1]: Leaving directory `/usr/src/kernels/2.6.11-1.1369_FC4-smp-i686'
make: *** [vsock.ko] エラー 2
make: Leaving directory `/tmp/vmware-root/modules/vsock-only'

エラーの原因

VMCI Socketsのソースコードは/usr/lib/vmware/modules/source/vsock.tarにインストールされており、エラーが発生しているファイルはtarファイル内のaf_vsock.cファイル。この中で以下のようにカーネルのバージョン毎に処理を分けている処理がいくつか存在する(下記)。

カーネルバージョン依存部分の例
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 9)
#elif LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 12)
   .slab_obj_size = sizeof (VSockVmciSock),
#else
   .obj_size = sizeof (VSockVmciSock),
#endif

Fedora Core4(2.6.11-1.1369_FC4smp)はKernel 2.6.11がベースなのだが、今回の関連部分は独自に修正されており、Kernel2.6.12以降の処理でコンパイルしてやる必要があった。

対策方針

af_vsock.c内のKernel 2.6.12以降か否かで処理を分けているところを2.6.11以降か否かでチェックするようにして、とりあえず強制的に2.6.12以降の処理でコンパイルされるようにする。

修正前: #elif LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 12)
修正後: #elif LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 11)


対策

(1) ソースの展開
# cp /usr/lib/vmware/modules/source/vsock.tar .
# tar xvf vsock.tar
(2) vsock-only/linux/af_vsock.cの編集
変更差分
330c330
< #elif LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 12)
---
> #elif LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 11)
2412c2412
< #elif LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 12)
---
> #elif LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 11)
2703c2703
< #elif LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 12)
---
> #elif LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 11)
2740c2740
< #elif LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 12)
---
> #elif LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 11)
(3) コンパイルのテスト
vsock-onlyディレクトリ配下で。
# make
Using 2.6.x kernel build system.
make -C /lib/modules/2.6.11-1.1369_FC4smp/build/include/.. SUBDIRS=$PWD SRCROOT=$PWD/. modules
make[1]: Entering directory `/usr/src/kernels/2.6.11-1.1369_FC4-smp-i686'
  CC [M]  /home/tomita/vsock-only/linux/af_vsock.o
  CC [M]  /home/tomita/vsock-only/linux/driverLog.o
  CC [M]  /home/tomita/vsock-only/linux/util.o
  CC [M]  /home/tomita/vsock-only/linux/vsockAddr.o
  LD [M]  /home/tomita/vsock-only/vsock.o
  Building modules, stage 2.
  MODPOST
*** Warning: "VMCIDatagram_CreateHnd" [/home/tomita/vsock-only/vsock.ko] undefined!
*** Warning: "VMCIDatagram_DestroyHnd" [/home/tomita/vsock-only/vsock.ko] undefined!
*** Warning: "VMCI_GetContextID" [/home/tomita/vsock-only/vsock.ko] undefined!
*** Warning: "VMCIDatagram_Send" [/home/tomita/vsock-only/vsock.ko] undefined!
  CC      /home/tomita/vsock-only/vsock.mod.o
  LD [M]  /home/tomita/vsock-only/vsock.ko
make[1]: Leaving directory `/usr/src/kernels/2.6.11-1.1369_FC4-smp-i686'
cp -f vsock.ko ./../vsock.o
(4) ごみの削除
# make clean
(5) アーカイブしてオリジナルのファイルと差し替え
# tar cvf vsock.tar vsock-only
以下rootで。
# cd /usr/lib/vmware/modules/source/
# mv vsock.tar vsock.tar.org   <-- オリジナルのファイルは残しておきましょう
# mv ~tomita/vsock.tar .
(6) vmware起動
# vmware &

これで、vsock.oが正常にコンパイルされてvmwareが起動する。

その他

ライセンスを購入しようとしたら、いつのまにか6.5がリリースされていた。6.0の時と異なり上記のようなインストール時のトラブルはあったが、一度入れてしまえば後は快適。vmware-config.plも無くなっており、設定はvmware起動後に行えるなど使い勝手も向上しているみたい。



最終更新 2008/10/01 16:45:22 - kztomita
(2008/09/30 20:44:19 作成)