环境说明:

vmware 12.5.0 build-4352439

centos 7.3.1611   64位,内核版本:Linux version 3.10.0-514.16.1.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC) )

在安装vmtools 时,编译共享文件时会报错,错误信息如下:

/tmp/modconfig-xkFtz3/vmhgfs-only/page.c: 在函数‘HgfsWbRequestWait’中:
/tmp/modconfig-xkFtz3/vmhgfs-only/page.c::: 警告:传递‘wait_on_bit’的第 个参数时将指针赋给整数,未作类型转换 [默认启用]
TASK_UNINTERRUPTIBLE);
^
In file included from include/linux/mmzone.h::,
from include/linux/gfp.h:,
from include/linux/mm.h:,
from include/linux/pagemap.h:,
from /tmp/modconfig-xkFtz3/vmhgfs-only/page.c::
include/linux/wait.h::: 附注:需要类型‘unsigned int’,但实参的类型为‘int (*)(void *)’
wait_on_bit(void *word, int bit, unsigned mode)
^
/tmp/modconfig-xkFtz3/vmhgfs-only/page.c::: 错误:提供给函数‘wait_on_bit’的实参太多
TASK_UNINTERRUPTIBLE);
^
In file included from include/linux/mmzone.h::,
from include/linux/gfp.h:,
from include/linux/mm.h:,
from include/linux/pagemap.h:,
from /tmp/modconfig-xkFtz3/vmhgfs-only/page.c::
include/linux/wait.h::: 附注:在此声明
wait_on_bit(void *word, int bit, unsigned mode)
^
make[]: *** [/tmp/modconfig-xkFtz3/vmhgfs-only/page.o] 错误
make[]: *** 正在等待未完成的任务....
make[]: *** [_module_/tmp/modconfig-xkFtz3/vmhgfs-only] 错误
make[]: 离开目录“/usr/src/kernels/3.10.-514.16..el7.x86_64”
make: *** [vmhgfs.ko] 错误

大概意思就是由于 vmhgfs-only/page.c 文件中1649 行出现了wait_on_bit函数调用错误,传递的实参太多了

查看include/linux/wait.h 的文件,该文件为操作系统的头文件,在我个人机器上全路径为/usr/src/kernels/3.10.0-514.el7.x86_64/include/linux/wait.h。

wait_on_bit 函数的定义如下

wait_on_bit(void *word, int bit, unsigned mode)
{
if (!test_bit(bit, word))
return ;
return out_of_line_wait_on_bit(word, bit,
bit_wait,
mode);
}

我们再翻看page.c 的源码,page.c 源码在 /opt/vmware-tools-distrib/lib/modules/source/vmhgfs.tar 压缩文件中。

大家可以直接解压

解压命令为

tar -xvf vmhgfs.tar

查看page.c 文件

vi /opt/vmware-tools-distrib/lib/modules/source/vmhgfs-only/page.c

查看page.c 1649 行这个HgfsWbRequestWait函数定义

    int
HgfsWbRequestWait(HgfsWbPage *req) // IN: request of page data to write
{
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)
return wait_on_bit_io(&req->wb_flags,
PG_BUSY,
TASK_UNINTERRUPTIBLE);
#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 13)
return wait_on_bit(&req->wb_flags,
PG_BUSY,
#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 17, 0)
HgfsWbRequestWaitUninterruptible,
#endif
TASK_UNINTERRUPTIBLE);
#else
wait_event(req->wb_queue,
!test_bit(PG_BUSY, &req->wb_flags));
return ;
#endif
}

可以发现在1649 行,程序在调用wait_on_bit 函数时,当 LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 13) 并且 LINUX_VERSION_CODE < KERNEL_VERSION(3, 17, 0) 时,会为 wait_on_bit 函数传递 4 个参数,不符合wait_on_bit 函数的定义。

所以到这里解决的方式就很简单了,只要将第三个参数人为去掉就可以了,修改后的HgfsWbRequestWait 函数代码

    int
HgfsWbRequestWait(HgfsWbPage *req) // IN: request of page data to write
{
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)
return wait_on_bit_io(&req->wb_flags,
PG_BUSY,
TASK_UNINTERRUPTIBLE);
#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 13)
return wait_on_bit(&req->wb_flags,
PG_BUSY,
TASK_UNINTERRUPTIBLE);
#else
wait_event(req->wb_queue,
!test_bit(PG_BUSY, &req->wb_flags));
return ;
#endif
}

然后大家再对修改后的 vmhgfs-only 源码文件夹重新打包,打包命令如下

tar -cvf vmhgfs.tar vmhgfs-only/*

然后大家重新安装vmtools 软件就可以了,安装命令

/opt/vmware-tools-distrib/vmware-install.pl

大家一路回车确认即可

centos 7.3 安装vmtools,解决无法编译共享文件夹模块的更多相关文章

  1. 【转】virtualbox安装增强包及配置共享文件夹

    原文网址:http://www.2cto.com/os/201308/233609.html virtualbox安装增强包及配置共享文件夹     因为需要在host及虚拟机间传输数据,想使用共享文 ...

  2. virtualbox安装增强功能并设置共享文件夹

    virtualbox安装增强功能并设置共享文件夹 我们在安装之前,必须得先安装好它所需要的依赖包,不然安装过程必定会出现错误! 一.安装依赖包 #yum install kernel-headers# ...

  3. VirtualBox CentOS安装增强功能与设置共享文件夹

    如果安装的是CentOS minimal版无网络的可以看这篇文章. 一.安装依赖环境 依次执行如下命令 yum install update yum install kernel-headers yu ...

  4. virtualbox安装增强包及配置共享文件夹

       因为需要在host及虚拟机间传输数据,想使用共享文件夹.但是单独设置了共享文件夹后在centos里找不到共享文件夹,看了下要安装增强包.好吧,顺 便也解决下鼠标切换的问题,省的老是按右CTL切换 ...

  5. VirtualBox Guest Additions 在CentOS中无法安装的解决方法

    安装时出现一步错误查看log为(log文件是 /var/log/vboxadd-install.log): /tmp/vbox.0/Makefile.include.header:94: *** Er ...

  6. Centos 7 成功安装 dosbox 解决 "error: expected primary-expression before ‘,’ token" 错误

    dosbox-0.74 bug 修复版下载: http://download.csdn.net/detail/yangbodong22011/9663271 注意:这篇博客解决了下面这个问题,如果你也 ...

  7. CentOS 8 离线安装 podman 解决方法

    CentOS 8 系统中如果没有安装Podman的话,想要离线安装会比较麻烦,因为podman依赖的包比较多,从网上一个一个下载会很繁琐,也容易出错. 这里介绍一种曲线救国的方式来离线安装. 首先分享 ...

  8. 不能安装vmtools解决:一个命令安装

    https://blog.csdn.net/fly66611/article/details/77994339 换好源 sudo su apt-get update apt-get dist-upgr ...

  9. CentOS mini版安装后增加gcc编译环境

    使用如下命令即可: sudo yum install gcc gcc-c++ make -y

随机推荐

  1. Hibernate表关系映射之一对一映射

    一.数据表的映射关系 在数据库领域中,数据表和数据表之间关系一般可以分为如下几种: 一对一:比如公民和身份证的关系,一个人只有一张身份证,同时每张身份证也仅仅对应一个人! 一对多:比如客户和订单之间的 ...

  2. request,session,application三者关系<转>

    几乎所有的Web开发语言都支持Session功能,Servlet也不例外. Servlet/JSP中的Session功能是通过作用域(scope)这个概念来实现的. 对象作用域为:  page  在当 ...

  3. 阿里Java开发手册学习 2 异常日志

    异常日志 异常处理 1.不要捕获继承自RuntimeException的运行时异常类,这类异常通常由程序员来校验,来保证查询的健壮性. 2. 不要对大段代码 try catch,分清稳定代码和非稳定代 ...

  4. MFC获取电脑硬盘序列号(附源代码)

    在新建的project里面加入一个类  即:下面一个类  GetHDSerial.cpp <code class="hljs cs has-numbering" style= ...

  5. Java GET和POST请求

    从表面来看GET和POST请求: GET请求是在url后直接附上请求体,url和请求体之间用"?"分割,不同参数之间用"&"分隔,%XX中的XX为该符号 ...

  6. UITabBar 设置选中、未选中状态下title的字体颜色

    一.如果只是设置选中状态的字体颜色,使用 tintColor  就可以达到效果 self.tabBar.tintColor = [UIColor redColor]; 二.但如果要将未选中状态和选中状 ...

  7. 【MongoDB学习-在.NET中的简单操作类】

    1.新建MVC项目, 管理NuGet包,进入下载MongDB.net库文件 2.新增项目DAL数据访问层,引用以下库文件: 3.C# 访问MongoDB通用方法类: using MongoDB.Dri ...

  8. v-for指令用法二

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...

  9. python3 安装 opencv3 (win10,64bit)

    python3只能安装opencv3  (python2安装opencv应该比python3安装的要简单,可参阅网上其他教程)   步骤参考http://stackoverflow.com/quest ...

  10. HihoCoder 1508 : 剑刃风暴(占位)

    描述 主宰尤涅若拥有一招非常厉害的招式——剑刃风暴,“无论是战士还是法师,都害怕尤涅若的武士刀剑技”. 现在战场上有N名敌对英雄,他们的位置分别为(Xi, Yi),而剑刃风暴的伤害范围是一个半径为R的 ...