+ -
当前位置:首页 → 问答吧 → VMWare 6.0.2 hgfs文件系统编译问题

VMWare 6.0.2 hgfs文件系统编译问题

时间:2007-12-03

来源:互联网

VMWare 6.0.2所带的tools在我的CLFS1.0.0上无法编译hgfs模块。幸运的是该模块的源代码是公开的,这使我得以跟踪这一问题。

gcc编译该模块时报告的错误是(大意):

filesystem.c:提供给kmem_cache_create的参数太少。

查看源代码,发现该处调用的是compat_kmem_cache_create函数。用grep发现这其实是定义在compat_slab.h头文件的一个宏,并使用了条件编译:

若内核版本小于2.6.22则定义该宏为对kmem_cache_create的调用,并添加最后一个参数为NULL。若否,则没有最后一个参数。

在这个宏的前面,有一段注释:析构函数在2.6.23-pre1中消失。据此推测,kmem_cache_create函数本应有6个参数,但在2.6.23后变成5个。

在经过跟踪后,发现我的系统内核版本为2.6.22。

大家发现这里的错误没有?没错,这是一个弱智错误。因为22并不小于22,所以hgfs模块认为我的系统中的kmem_cache_create只有5个参数,但事实上有6个。

弄清楚了这个问题后,问题就好解决了:
在该文件第27行,原文为
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 22) | defined(VMW_KMEMCR_HAS_DTOR)
需要改为:
#if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 22) | defined(VMW_KMEMCR_HAS_DTOR)

此后编译便可通过。

作者: 地球发动机   发布时间: 2007-12-03

沙发支持~~~

作者: ghosTM55   发布时间: 2007-12-03

好像不止这一个错误

作者: utstar   发布时间: 2007-12-03

不太明白 hgfs 其实有什麽用处?

作者: d00m3d   发布时间: 2007-12-04

引用:
作者: d00m3d
不太明白 hgfs 其实有什麽用处?
hgfs是VMWare中与主机通讯的一种机制。主机可以籍此与虚拟机共享一个或多个目录,籍此,虚拟机甚至可以不必有网络设备。某些时候,如果你希望虚拟机与主机完全隔离,这就很有用处。比方说,你刚从网络下载怀疑有病毒的文件,主机上不敢运行,就可以推给虚拟机,由它承担风险。这时候,你不敢让虚拟机上网,因为有些病毒能透过网络传播。而如果没有网络,如何让虚拟机执行怀疑带毒文件呢?有了hgfs事情不就简单了吗?

作者: 地球发动机   发布时间: 2007-12-04

好久没用 vm 了,还真不知道有 hgfs 这东西

作者: CHII   发布时间: 2007-12-04

引用:
作者: 地球发动机
hgfs是VMWare中与主机通讯的一种机制。主机可以籍此与虚拟机共享一个或多个目录,籍此,虚拟机甚至可以不必有网络设备。某些时候,如果你希望虚拟机与主机完全隔离,这就很有用处。比方说,你刚从网络下载怀疑有病毒的文件,主机上不敢运行,就可以推给虚拟机,由它承担风险。这时候,你不敢让虚拟机上网,因为有些病毒能透过网络传播。而如果没有网络,如何让虚拟机执行怀疑带毒文件呢?有了hgfs事情不就简单了吗?
我不懂 VM,长见识了,谢谢!

作者: d00m3d   发布时间: 2007-12-04