まず,vmmon の compile で
Using 2.6.x kernel build system. make: ディレクトリ `/tmp/vmware-config0/vmmon-only' に入ります make -C /usr/src/linux-headers-2.6.22-2007072001/include/.. SUBDIRS=$PWD SRCROOT=$PWD/. modules make[1]: ディレクトリ `/usr/src/linux-headers-2.6.22-2007072001' に入ります CC [M] /tmp/vmware-config0/vmmon-only/linux/driver.o /tmp/vmware-config0/vmmon-only/linux/driver.c: In function '__LinuxDriver_Ioctl': /tmp/vmware-config0/vmmon-only/linux/driver.c:1833: error: 'struct mm_struct' has no member named 'dumpable' make[2]: *** [/tmp/vmware-config0/vmmon-only/linux/driver.o] エラー 1 make[1]: *** [_module_/tmp/vmware-config0/vmmon-only] エラー 2 make[1]: ディレクトリ `/usr/src/linux-headers-2.6.22-2007072001' から出ます make: *** [vmmon.ko] エラー 2 make: ディレクトリ `/tmp/vmware-config0/vmmon-only' から出ます Unable to build the vmmon module.
とかでこける.これは <URL:http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=6c5d523826dc639df709ed0f88c5d2ce25379652> の影響.mm_struct.dumpable に変更があったとのこと.
diff -uwr vmmon-only/linux/driver.c vmmon-only.new/linux/driver.c
--- vmmon-only/linux/driver.c 2007-04-09 10:20:35.000000000 +0900
+++ vmmon-only.new/linux/driver.c 2007-07-21 18:18:34.000000000 +0900
@@ -1494,6 +1494,26 @@
*/
#include <linux/sched.h>
+static void set_dumpable0(struct mm_struct *mm, int value)
+{
+ switch (value) {
+ case 0:
+ clear_bit(MMF_DUMPABLE, &mm->flags);
+ smp_wmb();
+ clear_bit(MMF_DUMP_SECURELY, &mm->flags);
+ break;
+ case 1:
+ set_bit(MMF_DUMPABLE, &mm->flags);
+ smp_wmb();
+ clear_bit(MMF_DUMP_SECURELY, &mm->flags);
+ break;
+ case 2:
+ set_bit(MMF_DUMP_SECURELY, &mm->flags);
+ smp_wmb();
+ set_bit(MMF_DUMPABLE, &mm->flags);
+ break;
+ }
+}
static int
__LinuxDriver_Ioctl(
struct file *filp,
@@ -1830,7 +1850,7 @@
current->egid == current->gid &&
current->fsgid == current->gid) {
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 7)
- current->mm->dumpable = 1;
+ set_dumpable0(current->mm, 1);
#else
current->dumpable = 1;
#endif
という感じでやるきなしなし対応.
set_dumpable(current->mm, 1);
として,include/linux/sched.h に用意されているっぽい
extern void set_dumpable(struct mm_struct *mm, int value);
を使ってもいいのだけれども,insmod 時に
vmmon: Unknown symbol set_dumpable
とかでこけるようになる(上記 pache は fs/exec.c から set_dumpable を copy して流用している).
次に,vmnet の compile で,
make: ディレクトリ `/tmp/vmware-config0/vmnet-only' に入ります make -C /usr/src/linux-headers-2.6.22-2007072001/include/.. SUBDIRS=$PWD SRCROOT=$PWD/. modules make[1]: ディレクトリ `/usr/src/linux-headers-2.6.22-2007072001' に入ります CC [M] /tmp/vmware-config0/vmnet-only/driver.o /tmp/vmware-config0/vmnet-only/driver.c: In function 'cleanup_module': /tmp/vmware-config0/vmnet-only/driver.c:531: error: void value not ignored as it ought to be make[2]: *** [/tmp/vmware-config0/vmnet-only/driver.o] エラー 1 make[1]: *** [_module_/tmp/vmware-config0/vmnet-only] エラー 2 make[1]: ディレクトリ `/usr/src/linux-headers-2.6.22-2007072001' から出ます make: *** [vmnet.ko] エラー 2 make: ディレクトリ `/tmp/vmware-config0/vmnet-only' から出ます Unable to build the vmnet module.
-extern int unregister_chrdev(unsigned int, const char *); +extern void unregister_chrdev(unsigned int, const char *);
といった変更による.ということで,
diff -uwr vmnet-only/driver.c vmnet-only.new/driver.c
--- vmnet-only/driver.c 2007-05-14 15:03:03.000000000 +0900
+++ vmnet-only.new/driver.c 2007-07-21 18:29:45.000000000 +0900
@@ -528,11 +528,7 @@
int retval;
unregister_ioctl32_handlers();
- retval = unregister_chrdev(VNET_MAJOR_NUMBER, "vmnet");
- if (retval != 0 ) {
- LOG(0, (KERN_WARNING "/dev/vmnet: could not unregister major device %d\n",
- VNET_MAJOR_NUMBER));
- }
+ unregister_chrdev(VNET_MAJOR_NUMBER, "vmnet");
VNetProtoUnregister();
VNetProc_Cleanup();
#ifdef CONFIG_NETFILTER
といった感じに.
Last-modified: Thu Aug 02 15:01:04 +0900 2007