Ubuntu Linux 内核更新至 3.13.0-46-generic 后,vmhgfs 模块无法为 VMware Tools 9.9.0(Fusion7.1)编译?

Ubuntu Linux 内核更新至 3.13.0-46-generic 后,vmhgfs 模块无法为 VMware Tools 9.9.0(Fusion7.1)编译?

Ubuntu Linux 内核更新至 3.13.0-46-generic(2015 年 2 月)后,vmhgfs 模块无法为 VMware Tools 9.9.0(Fusion7.1)和 VMware Tools 9.9.2(Fusion7.1.1 Build 2496486)编译(VMware Tools 的共享文件夹功能在 MacOSX Yosemite(主机)上的 Ubuntu 14.04 LTS(客户机)中不起作用)? 


大家好,社区成员和 VMware 开发团队,


2015 年 2 月 13 日,Ubuntu 和 MacOSX 之间的共享文件夹功能失效。可能是 Linux 内核更新至 3.13.0-46-generic 导致了此问题(尽管 Ubuntu 中 VMware Tools 的现有已编译 vmhgfs 模块不会因 Linux 内核更新而受损!)。我们将 VMware Fusion 7.0.0 与 Ubuntu 14.04 LTS 和 MacOSX 一起使用了一年,旧版 Linux 内核没有出现任何问题。我们将 VMware Fusion 7.1.0 和 Fusion7.1.1 Build 2496486 与 VMware Tools 9.9.2 更新,希望能够修复 7.0.0 版中首次出现的共享文件夹功能问题。

我们可以假设编译的 vmhgfs 模块与新的 Linux 内核 3.13.0-46-generic 之间存在不兼容。

我们尝试重新安装 VMware Tools 9.9.0 和 9.9.2 版,但无法编译 vmhgfs 模块,并且共享文件夹功能无法使用。所有其他 VMware 工具功能均运行正常。

在 Ubuntu 14.04 LTS 中,终端命令 lsmod | grep "vm." 没有列出 vmhgfs 模块

在 vmhgfs 模块编译期间,“/vmhgfs-only/”和“make[]:”附近出现了几个“错误”


以下是我们为您提供的其中一个终端日志: 


include/linux/compiler-gcc4.h:14:34: error: ‘struct dentry’ has no member named ‘d_alias’
#define __compiler_offsetof(a,b) __builtin_offsetof(a,b)
                                  ^
include/linux/stddef.h:17:31: note: in expansion of macro ‘__compiler_offsetof’
#define offsetof(TYPE,MEMBER) __compiler_offsetof(TYPE,MEMBER)
                               ^
include/linux/kernel.h:794:29: note: in expansion of macro ‘offsetof’
  (type *)( (char *)__mptr - offsetof(type,member) );})
                             ^
include/linux/list.h:687:40: note: in expansion of macro ‘container_of’
#define hlist_entry(ptr, type, member) container_of(ptr,type,member)
                                        ^
include/linux/list.h:698:15: note: in expansion of macro ‘hlist_entry’
     ____ptr ? hlist_entry(____ptr, type, member) : NULL; \
               ^
include/linux/list.h:710:13: note: in expansion of macro ‘hlist_entry_safe’
       pos = hlist_entry_safe((pos)->member.next, typeof(*(pos)), member))
             ^
/tmp/modconfig-h4Zwi0/vmhgfs-only/inode.c:1920:7: note: in expansion of macro ‘hlist_for_each_entry’
       hlist_for_each_entry(dentry,
       ^
make[2]: *** [/tmp/modconfig-h4Zwi0/vmhgfs-only/inode.o] Error 1
make[1]: *** [_module_/tmp/modconfig-h4Zwi0/vmhgfs-only] Error 2
make[1]: Leaving directory `/usr/src/linux-headers-3.13.0-46-generic'
make: *** [vmhgfs.ko] Error 2
make: Leaving directory `/tmp/modconfig-h4Zwi0/vmhgfs-only'

例如,/mnt/hgfs 为空,但已为 Mac 的“Documents”目录启用文件夹共享。如果我们在终端中运行 vmware-hgfsclient,我们会得到共享文件夹列表,但 /mnt/hgfs 为空。 


您能修复 vmhgfs 模块与新 Linux 内核 3.13.0-46-generic 之间的不兼容问题吗?

此致,

托尼


答案1

可以手动修补工具。在 vmhgfs.tar 中,d_alias必须将 inode.c 更改为d_u.d_alias,放回到 tar 中,然后重新编译工具。

执行该操作的脚本(在 Windows 主机上的 32 位 ubuntu 14.04、vmware Workstation 11.1 上测试)如下:

#!/bin/sh -x
cd /usr/lib/vmware-tools/modules/source
tar xf vmhgfs.tar
grep -q d_u.d_alias vmhgfs-only/inode.c && echo "already patched" && exit 0
sed -i -e s/d_alias/d_u.d_alias/ vmhgfs-only/inode.c
cp -p vmhgfs.tar vmhgfs.tar.orig
tar cf vmhgfs.tar vmhgfs-only
vmware-config-tools.pl -d -m

注意:这会使工具与旧内核版本(即 3.13.0-45)不兼容。

答案2

更新到内核 3.13.0-46 后,我也遇到了同样的情况。根据VMware 工具补丁,没有可用的补丁。

该补丁尚未成功应用于以下 Linux 内核:

3.13.x

我已vmhgfs通过以下方式修复:

  1. 恢复到内核版本 3.13.0-45,方法是启动旧版本或者回滚内核升级 然后
  2. 重新安装 vmware-tools

答案3

与@Will Wolcott 的回答类似,vmware-tools-patches 中的最新变化在内核为 3.13 的 14.04 版本上,这个问题对我来说已经解决了。

相关内容