centos 7.3 安装vmtools,解决无法编译共享文件夹模块
环境说明:
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,解决无法编译共享文件夹模块的更多相关文章
- 【转】virtualbox安装增强包及配置共享文件夹
原文网址:http://www.2cto.com/os/201308/233609.html virtualbox安装增强包及配置共享文件夹 因为需要在host及虚拟机间传输数据,想使用共享文 ...
- virtualbox安装增强功能并设置共享文件夹
virtualbox安装增强功能并设置共享文件夹 我们在安装之前,必须得先安装好它所需要的依赖包,不然安装过程必定会出现错误! 一.安装依赖包 #yum install kernel-headers# ...
- VirtualBox CentOS安装增强功能与设置共享文件夹
如果安装的是CentOS minimal版无网络的可以看这篇文章. 一.安装依赖环境 依次执行如下命令 yum install update yum install kernel-headers yu ...
- virtualbox安装增强包及配置共享文件夹
因为需要在host及虚拟机间传输数据,想使用共享文件夹.但是单独设置了共享文件夹后在centos里找不到共享文件夹,看了下要安装增强包.好吧,顺 便也解决下鼠标切换的问题,省的老是按右CTL切换 ...
- VirtualBox Guest Additions 在CentOS中无法安装的解决方法
安装时出现一步错误查看log为(log文件是 /var/log/vboxadd-install.log): /tmp/vbox.0/Makefile.include.header:94: *** Er ...
- Centos 7 成功安装 dosbox 解决 "error: expected primary-expression before ‘,’ token" 错误
dosbox-0.74 bug 修复版下载: http://download.csdn.net/detail/yangbodong22011/9663271 注意:这篇博客解决了下面这个问题,如果你也 ...
- CentOS 8 离线安装 podman 解决方法
CentOS 8 系统中如果没有安装Podman的话,想要离线安装会比较麻烦,因为podman依赖的包比较多,从网上一个一个下载会很繁琐,也容易出错. 这里介绍一种曲线救国的方式来离线安装. 首先分享 ...
- 不能安装vmtools解决:一个命令安装
https://blog.csdn.net/fly66611/article/details/77994339 换好源 sudo su apt-get update apt-get dist-upgr ...
- CentOS mini版安装后增加gcc编译环境
使用如下命令即可: sudo yum install gcc gcc-c++ make -y
随机推荐
- java编程之JDBC
JDBC的常用类和接口 1. DriverManager类 管理数据库中的所有驱动程序,其所有的方法都是静态方法,调用时无需实例化,通过类名就可以直接调用. 2. Connec ...
- parameters arguments 形式参数 实际参数
parameter和argument的区别 – 笑遍世界 http://smilejay.com/2011/11/parameter_argument/ https://en.wikipedia.or ...
- android studio发布公共类库到服务器maven仓库
在上一篇中提到了怎么创建私有maven库,这篇主要结合android studio的使用,直接进入正题,看以下步骤 1.创建android项目 创建Project,然后加一个library的modul ...
- SpringBoot-(9)-MyBatis 操作数据库
这里仅仅以插入数据为例: 一, 创建基于MyBatis的项目 具体流程参考之前帖 二,创建Mapper接口 public interface AccountMapper { @Insert(" ...
- LLVM的总结
LLVM 写在前面的话:无意中看到的LLVM的作者Chris Lattner相关的介绍和故事,觉得很有意思就贴上来,如果不感兴趣,可以直接跳入下一章. 关于LLVM 如果你对LLVM的由来陌生,那么我 ...
- 有关 java 不定参数
不定参数实际为数组参数的一种写法而已,本质上与数组参数完全相同 //1.数组参数函数 public static int sum(int[] values) { } //2.不定参数函数 不定参数只能 ...
- webpack v3 结合 react-router v4 做 dynamic import — 按需加载(懒加载)
为什么要做dynamic import? dynamic import不知道为什么有很多叫法,什么按需加载,懒加载,Code Splitting,代码分页等.总之,就是在SPA,把JS代码分成N个页面 ...
- Java诊断工具Arthas
Java诊断工具Arthas 1. Arthas简介 Arthas是阿里开源的一个线上java诊断工具,发现阿里还是挺喜欢开源一些技术的,造福人类.昨天试用了一下,发现真是强大,解决了我工作两年的很多 ...
- POJ2478 Farey Sequence —— 欧拉函数
题目链接:https://vjudge.net/problem/POJ-2478 Farey Sequence Time Limit: 1000MS Memory Limit: 65536K To ...
- MYSQL进阶学习笔记十三:MySQL 内存优化!(视频序号:进阶_31)
知识点十四:MySQL 内存的优化(31) 一.优化MySQL SERVER 7组后台进程: masterthread:主要负责将脏缓存页刷新到数据文件,执行purge操作,触发检查点,合并插入缓冲区 ...