# cd /usr/lib/vmware/modules/source # tar xf vmnet.tar # mv vmnet.tar vmnet.old.tar # sed -i -e ‘s/dev->trans_start = jiffies/netif_trans_update\(dev\)/g‘ vmnet-only/netif.c # tar cf vmnet.tar vmnet-only # vmware-modconfig --console --install-all
$ curl http://pastie.org/pastes/8672356/download -o /tmp/vmware-netfilter.patch $ cd /usr/lib/vmware/modules/source # tar -xvf vmnet.tar # patch -p0 -i /tmp/vmware-netfilter.patch # tar -cf vmnet.tar vmnet-only # rm -r vmnet-only # vmware-modconfig --console --install-all
# - as root user $ cd /usr/lib/vmware/modules/source $ tar -xvf vmnet.tar # - edit the file vmnet-only/netif.c and replace the line that looks like dev = alloc_netdev(sizeof *netIf, deviceName, VNetNetIfSetup); to dev = alloc_netdev(sizeof *netIf, deviceName, NET_NAME_UNKNOWN, VNetNetIfSetup); $ tar -cvf vmnet.tar vmnet-only/ $ rm -rf vmnet-only/ $ vmware-modconfig --console --install-all
编辑vmnet-only/userif.c,修改下面内容:
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 6, 0) retval = get_user_pages(addr, 1, 1, 0, &page, NULL);#else retval = get_user_pages(current, current->mm, addr, 1, 1, 0, &page, NULL);#endif
改为:
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 9, 0) retval = get_user_pages(addr, 1, 0, &page, NULL);#else#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 6, 0) retval = get_user_pages(addr, 1, 1, 0, &page, NULL);#else retval = get_user_pages(current, current->mm, addr, 1, 1, 0, &page, NULL);#endif#endif
编辑vmmon-only/linux/hostif.c,修改以下内容:
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 6, 0) retval = get_user_pages((unsigned long)uvAddr, numPages, 0, 0, ppages, NULL);#else retval = get_user_pages(current, current->mm, (unsigned long)uvAddr, numPages, 0, 0, ppages, NULL);#endif
改为:
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 9, 0) retval = get_user_pages((unsigned long)uvAddr, numPages, 0, ppages, NULL);#else#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 6, 0) retval = get_user_pages((unsigned long)uvAddr, numPages, 0, 0, ppages, NULL);#else retval = get_user_pages(current, current->mm, (unsigned long)uvAddr, numPages, 0, 0, ppages, NULL);#endif#endif
重新打包文件
tar cf vmnet.tar vmnet-only tar cf vmmon.tar vmmon-only
执行命令:
vmware-modconfig --console --install-all
执行结果:
[root@localhost source]# vmware-modconfig --console --install-all Stopping vmware (via systemctl): [ OK ] make: Entering directory ‘/tmp/modconfig-vbVNzr/vmmon-only‘ Using kernel build system. /bin/make -C /lib/modules/4.9.5-200.fc25.x86_64/build/include/.. SUBDIRS=$PWD SRCROOT=$PWD/. MODULEBUILDDIR= modules make[1]: Entering directory ‘/usr/src/kernels/4.9.5-200.fc25.x86_64‘ CC [M] /tmp/modconfig-vbVNzr/vmmon-only/linux/driverLog.o CC [M] /tmp/modconfig-vbVNzr/vmmon-only/linux/driver.o CC [M] /tmp/modconfig-vbVNzr/vmmon-only/linux/hostif.o CC [M] /tmp/modconfig-vbVNzr/vmmon-only/common/memtrack.o CC [M] /tmp/modconfig-vbVNzr/vmmon-only/common/apic.o CC [M] /tmp/modconfig-vbVNzr/vmmon-only/common/vmx86.o CC [M] /tmp/modconfig-vbVNzr/vmmon-only/common/cpuid.o CC [M] /tmp/modconfig-vbVNzr/vmmon-only/common/task.o /tmp/modconfig-vbVNzr/vmmon-only/linux/driver.c:1283:1: warning: always_inline function might not be inlinable [-Wattributes] LinuxDriverSyncReadTSCs(uint64 *delta) // OUT: TSC max - TSC min ^~~~~~~~~~~~~~~~~~~~~~~ CC [M] /tmp/modconfig-vbVNzr/vmmon-only/common/hashFunc.o /tmp/modconfig-vbVNzr/vmmon-only/common/task.o: warning: objtool: .text: unexpected end of section CC [M] /tmp/modconfig-vbVNzr/vmmon-only/common/comport.o CC [M] /tmp/modconfig-vbVNzr/vmmon-only/common/phystrack.o CC [M] /tmp/modconfig-vbVNzr/vmmon-only/vmcore/moduleloop.o /tmp/modconfig-vbVNzr/vmmon-only/common/phystrack.o: warning: objtool: PhysTrack_Free() falls through to next function PhysTrack_Add() /tmp/modconfig-vbVNzr/vmmon-only/common/phystrack.o: warning: objtool: PhysTrack_Add() falls through to next function PhysTrack_Remove() /tmp/modconfig-vbVNzr/vmmon-only/common/phystrack.o: warning: objtool: PhysTrack_Remove() falls through to next function PhysTrack_Test() LD [M] /tmp/modconfig-vbVNzr/vmmon-only/vmmon.o Building modules, stage 2. MODPOST 1 modules CC /tmp/modconfig-vbVNzr/vmmon-only/vmmon.mod.o LD [M] /tmp/modconfig-vbVNzr/vmmon-only/vmmon.ko make[1]: Leaving directory ‘/usr/src/kernels/4.9.5-200.fc25.x86_64‘ /bin/make -C $PWD SRCROOT=$PWD/. MODULEBUILDDIR= postbuild make[1]: Entering directory ‘/tmp/modconfig-vbVNzr/vmmon-only‘ make[1]: ‘postbuild‘ is up to date. make[1]: Leaving directory ‘/tmp/modconfig-vbVNzr/vmmon-only‘ cp -f vmmon.ko ./../vmmon.o make: Leaving directory ‘/tmp/modconfig-vbVNzr/vmmon-only‘ make: Entering directory ‘/tmp/modconfig-vbVNzr/vmnet-only‘ Using kernel build system. /bin/make -C /lib/modules/4.9.5-200.fc25.x86_64/build/include/.. SUBDIRS=$PWD SRCROOT=$PWD/. MODULEBUILDDIR= modules make[1]: Entering directory ‘/usr/src/kernels/4.9.5-200.fc25.x86_64‘ CC [M] /tmp/modconfig-vbVNzr/vmnet-only/driver.o CC [M] /tmp/modconfig-vbVNzr/vmnet-only/hub.o CC [M] /tmp/modconfig-vbVNzr/vmnet-only/userif.o CC [M] /tmp/modconfig-vbVNzr/vmnet-only/netif.o In file included from ./include/linux/pci.h:35:0, from /tmp/modconfig-vbVNzr/vmnet-only/compat_netdevice.h:27, from /tmp/modconfig-vbVNzr/vmnet-only/netif.c:43: ./include/linux/pci_ids.h:2253:0: warning: "PCI_VENDOR_ID_VMWARE" redefined #define PCI_VENDOR_ID_VMWARE 0x15ad In file included from /tmp/modconfig-vbVNzr/vmnet-only/net.h:38:0, from /tmp/modconfig-vbVNzr/vmnet-only/vnetInt.h:26, from /tmp/modconfig-vbVNzr/vmnet-only/netif.c:42: /tmp/modconfig-vbVNzr/vmnet-only/vm_device_version.h:56:0: note: this is the location of the previous definition #define PCI_VENDOR_ID_VMWARE 0x15AD CC [M] /tmp/modconfig-vbVNzr/vmnet-only/bridge.o CC [M] /tmp/modconfig-vbVNzr/vmnet-only/procfs.o CC [M] /tmp/modconfig-vbVNzr/vmnet-only/smac_compat.o CC [M] /tmp/modconfig-vbVNzr/vmnet-only/smac.o CC [M] /tmp/modconfig-vbVNzr/vmnet-only/vnetEvent.o CC [M] /tmp/modconfig-vbVNzr/vmnet-only/vnetUserListener.o In file included from /tmp/modconfig-vbVNzr/vmnet-only/net.h:38:0, from /tmp/modconfig-vbVNzr/vmnet-only/vnetInt.h:26, from /tmp/modconfig-vbVNzr/vmnet-only/bridge.c:52: /tmp/modconfig-vbVNzr/vmnet-only/vm_device_version.h:56:0: warning: "PCI_VENDOR_ID_VMWARE" redefined #define PCI_VENDOR_ID_VMWARE 0x15AD In file included from ./include/linux/pci.h:35:0, from /tmp/modconfig-vbVNzr/vmnet-only/compat_netdevice.h:27, from /tmp/modconfig-vbVNzr/vmnet-only/bridge.c:51: ./include/linux/pci_ids.h:2253:0: note: this is the location of the previous definition #define PCI_VENDOR_ID_VMWARE 0x15ad LD [M] /tmp/modconfig-vbVNzr/vmnet-only/vmnet.o Building modules, stage 2. MODPOST 1 modules CC /tmp/modconfig-vbVNzr/vmnet-only/vmnet.mod.o LD [M] /tmp/modconfig-vbVNzr/vmnet-only/vmnet.ko make[1]: Leaving directory ‘/usr/src/kernels/4.9.5-200.fc25.x86_64‘ /bin/make -C $PWD SRCROOT=$PWD/. MODULEBUILDDIR= postbuild make[1]: Entering directory ‘/tmp/modconfig-vbVNzr/vmnet-only‘ make[1]: ‘postbuild‘ is up to date. make[1]: Leaving directory ‘/tmp/modconfig-vbVNzr/vmnet-only‘ cp -f vmnet.ko ./../vmnet.o make: Leaving directory ‘/tmp/modconfig-vbVNzr/vmnet-only‘ Starting vmware (via systemctl): [ OK ]
本文出自 “独孤无愁” 博客,请务必保留此出处http://jlnetc.blog.51cto.com/10920149/1894518
linux :vmware kernel update导致vmware无法打开,解决
原文地址:http://jlnetc.blog.51cto.com/10920149/1894518