|
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)
此后编译便可通过。 |
|