追記:"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 *); */
-
- -
このあと、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.