追記:"vsock module"のコンパイル

Ubuntu 8.04+VMware Server 2.0 Betaではvsock moduleをコンパイル出来なかったが、エラーメッセージを見ているとvsock-only/include/compat_wait.hというファイルの中で‘poll_initwait’が矛盾的に宣言されているとある。多分、VMware Serverのコンパイルに必要なカーネルのヘッダファイル(include/linux/poll.h)で以前は宣言していなかったpoll_initwaitを宣言していて、矛盾が起きたのだろう。
vsock-only/include/compat_wait.hでは、

#define compat_poll_wqueues struct poll_wqueues

extern void poll_initwait(compat_poll_wqueues *)

一方、/usr/src/linux-headers-2.6.24-16-generic/include/linux/poll.h では

extern void poll_initwait(struct poll_wqueues *pwq);

と宣言している。compat_wait.hでの宣言を削除すればコンパイルできそうである。
そこで、この宣言を削除してコンパイルしてみた。削除の手順は以下の通りである。

root@ubuntu804:~# cd /usr/lib/vmware/modules/source
root@ubuntu804:/usr/lib/vmware/modules/source# pwd
/usr/lib/vmware/modules/source
root@ubuntu804:/usr/lib/vmware/modules/source# ls
vmci.tar  vmmon.tar  vmnet.tar  vsock.tar
root@ubuntu804:/usr/lib/vmware/modules/source# mv vsock.tar vsock.tar.save
root@ubuntu804:/usr/lib/vmware/modules/source# tar xf vsock.tar.save
root@ubuntu804:/usr/lib/vmware/modules/source# ls
vmci.tar  vmmon.tar  vmnet.tar  vsock-only  vsock.tar.save
root@ubuntu804:/usr/lib/vmware/modules/source# cd vsock-only/include/
root@ubuntu804:/usr/lib/vmware/modules/source/vsock-only/include# ls
circList.h           compat_list.h    compat_semaphore.h  compat_uaccess.h    vm_assert.h            vmci_iocontrols.h
compat_completion.h  compat_mm.h      compat_slab.h       compat_version.h    vm_basic_defs.h        vmci_kernel_if.h
compat_file.h        compat_module.h  compat_sock.h       compat_wait.h       vm_basic_types.h       vmware.h
compat_fs.h          compat_namei.h   compat_spinlock.h   compat_workqueue.h  vmci_call_defs.h       vmware_pack_begin.h
compat_init.h        compat_page.h    compat_statfs.h     driver-config.h     vmci_defs.h            vmware_pack_end.h
compat_kernel.h      compat_sched.h   compat_string.h     includeCheck.h      vmci_infrastructure.h  vmware_pack_init.h
root@ubuntu804:/usr/lib/vmware/modules/source/vsock-only/include# mv compat_wait.h compat_wait.h.save
root@ubuntu804:/usr/lib/vmware/modules/source/vsock-only/include# cp compat_wait.h.save compat_wait.h
root@ubuntu804:/usr/lib/vmware/modules/source/vsock-only/include# vi compat_wait.h

root@ubuntu804:/usr/lib/vmware/modules/source/vsock-only/include# diff compat_wait.h compat_wait.h.save
64c64
< /* extern void poll_initwait(compat_poll_wqueues *); */
    • -
> extern void poll_initwait(compat_poll_wqueues *); root@ubuntu804:/usr/lib/vmware/modules/source/vsock-only/include# cd ../.. root@ubuntu804:/usr/lib/vmware/modules/source# pwd /usr/lib/vmware/modules/source root@ubuntu804:/usr/lib/vmware/modules/source# ls vmci.tar vmmon.tar vmnet.tar vsock-only vsock.tar.save root@ubuntu804:/usr/lib/vmware/modules/source# tar cf vsock.tar vsock-only/ root@ubuntu804:/usr/lib/vmware/modules/source# ls vmci.tar vmmon.tar vmnet.tar vsock-only vsock.tar vsock.tar.save

このあと、vmware-config.plを実行してコンパイルしたところ、次のように警告はでるもののエラーは出ずにコンパイルできた。

Extracting the sources of the vsock module.

Building the vsock module.

Using 2.6.x kernel build system.
make: Entering directory `/tmp/vmware-config1/vsock-only'
make -C /lib/modules/2.6.24-16-generic/build/include/.. SUBDIRS=$PWD SRCROOT=$PWD/. modules
make[1]: Entering directory `/usr/src/linux-headers-2.6.24-16-generic'
  CC [M]  /tmp/vmware-config1/vsock-only/linux/af_vsock.o
/tmp/vmware-config1/vsock-only/linux/af_vsock.c:260: warning: initialization from incompatible pointer type
/tmp/vmware-config0/vsock-only/linux/af_vsock.c: In function `__VSockVmciCreate':
/tmp/vmware-config0/vsock-only/linux/af_vsock.c:1789: warning: passing argument 1 of `sk_alloc' makes pointer from integer thout a cast
/tmp/vmware-config0/vsock-only/linux/af_vsock.c:1789: warning: passing argument 3 of `sk_alloc' makes integer from pointer thout a cast
/tmp/vmware-config0/vsock-only/linux/af_vsock.c:1789: warning: passing argument 4 of `sk_alloc' makes pointer from integer thout a cast
  CC [M]  /tmp/vmware-config1/vsock-only/linux/driverLog.o
  CC [M]  /tmp/vmware-config1/vsock-only/linux/util.o
  CC [M]  /tmp/vmware-config1/vsock-only/linux/vsockAddr.o
  LD [M]  /tmp/vmware-config1/vsock-only/vsock.o
  Building modules, stage 2.
  MODPOST 1 modules
WARNING: "VMCIDatagram_CreateHnd" [/tmp/vmware-config1/vsock-only/vsock.ko] undefined!
WARNING: "VMCIDatagram_DestroyHnd" [/tmp/vmware-config1/vsock-only/vsock.ko] undefined!
WARNING: "VMCI_GetContextID" [/tmp/vmware-config1/vsock-only/vsock.ko] undefined!
WARNING: "VMCIDatagram_Send" [/tmp/vmware-config1/vsock-only/vsock.ko] undefined!
  CC      /tmp/vmware-config1/vsock-only/vsock.mod.o
  LD [M]  /tmp/vmware-config1/vsock-only/vsock.ko
make[1]: Leaving directory `/usr/src/linux-headers-2.6.24-16-generic'
cp -f vsock.ko ./../vsock.o
make: Leaving directory `/tmp/vmware-config1/vsock-only'
The vsock module loads perfectly into the running kernel.