vmware 共享文件夹配置及 error: too many arguments to function ‘wait_on_bit’ 解决方法

背景:

需要从本地的win10系统传文件到vmware虚拟机的redhat Linux系统中(内核版本:3.10.0),通过网上查资料,我选择共享文件夹的方式(其他方式自行搜索)

步骤:

一、安装vmware tools

1、在vmware虚拟机选项下,选择安装vmware-tools

2、将vmware安装目录下的linux.iso装载到系统中

2.1、选择需安装VMWareTools的虚拟机,右击--可移动设备--CD/DVD--设置

2.2、选择CD/DVD(SATA)--使用ISO映像文件--选文件--打钩设备状态下的“已连接”--确定

3、在系统中输入如下命令挂载:mount /dev/cdrom /mnt (注意,/mnt前面有一个空格)

4、进入/mnt 会看到

5、(重要)将VMWareTools-10.0.10-4301679.tar.gz 拷贝到其他目录,我是拷贝到目录/home

# cp VMWareTools-10.0.10-4301679.tar.gz /home/VMWareTools-10.0.10-4301679.tar.gz

不拷贝直接解压会出错,错误如下

6、进入目录/home,解压VMWareTools-10.0.10-4301679.tar.gz,解压后出现vmware-tools-distrib

  cd /home

  tar -zxf  VMWareTools-10.0.10-4301679.tar.gz

  

7、进入目录vmware-tools-distrib,运行安装文件./vmware-install.pl,一路enter就可以了

8、恭喜,完成了



二、创建共享文件夹

2、     操作

1)        Windows:建立共享文件夹D:\Virtual Machines\shared_vm3

2)        虚拟机linux: 添加共享文件夹

选择虚拟机VM_3 --> 右击 --> 设置

选择 选项 --> 共享文件夹 --> 总是启用 --> 添加

出来设置向导后,点击 下一步

浏览windows文件夹,这里是选择D:\Virtual Machines\shared_vm3 --> 下一步

备注:名称对应的是Linux系统显示的文件夹名称

默认打钩启用此共享,点击完成。

点击确定

注意:红框中要打钩,默认是打钩的

3)        虚拟机linux: 启动虚拟机VM_3

选择VM_3 --> 启动该虚拟机

4)        虚拟机linux: 挂载共享文件夹

# cd /mnt

# mkdir hgfs

注意:要通过共享文件夹实现linux与windows文件共享,必须安装 VMWare-tools ,该工具的安装可以借鉴http://www.cnblogs.com/ddbear/p/6857199.html

安装VMWare-tools之后,执行以下命令

# /usr/bin/vmware-config-tools.pl

然后,一路回车,直到安装完成

见到这个画面,说明安装完成了。

5)        虚拟机linux: 重启虚拟机

# reboot

6)        检验和测试

# cd /mnt/hgfs

# ls

测试

# cd shared_vm3

# vim shared_test.txt

123456

abcdsf

保存退出 :wq

# ls

检验在windows 下,看看有没有该文件

成功。



遇到问题:

 error: too many arguments to function ‘wait_on_bit’


解决方案:

CC [M]  /tmp/modconfig-71euqe/vmhgfs-only/page.o

/tmp/modconfig-71euqe/vmhgfs-only/page.c: In function ‘HgfsWbRequestWait’:

/tmp/modconfig-71euqe/vmhgfs-only/page.c:1649:23: warning: passing argument 3 of ‘wait_on_bit’ makes integer from pointer without a cast [enabled by default]

                       TASK_UNINTERRUPTIBLE);

                       ^

In file included from include/linux/mmzone.h:9:0,

                 from include/linux/gfp.h:5,

                 from include/linux/mm.h:9,

                 from include/linux/pagemap.h:7,

                 from /tmp/modconfig-71euqe/vmhgfs-only/page.c:28:

include/linux/wait.h:1044:1: note: expected ‘unsigned int’ but argument is of type ‘int (*)(void *)’

wait_on_bit(void *word, int bit, unsigned mode)

^

/tmp/modconfig-71euqe/vmhgfs-only/page.c:1649:23: error: too many arguments to function ‘wait_on_bit’

                       TASK_UNINTERRUPTIBLE);

                       ^

In file included from include/linux/mmzone.h:9:0,

                 from include/linux/gfp.h:5,

                 from include/linux/mm.h:9,

                 from include/linux/pagemap.h:7,

                 from /tmp/modconfig-71euqe/vmhgfs-only/page.c:28:

include/linux/wait.h:1044:1: note: declared here

wait_on_bit(void *word, int bit, unsigned mode)

^

make[2]: *** [/tmp/modconfig-71euqe/vmhgfs-only/page.o] Error 1

make[2]: *** Waiting for unfinished jobs....

make[1]: *** [_module_/tmp/modconfig-71euqe/vmhgfs-only] Error 2

make[1]: Leaving directory `/usr/src/kernels/3.10.0-514.2.2.el7.x86_64'

make: *** [vmhgfs.ko] Error 2

make: Leaving directory `/tmp/modconfig-71euqe/vmhgfs-only'

通过查看后发现因为centos 7的Linux内核用的3.10版本,在函数 wait_on_bit_io()中有三个参数,而vmtool的代码在内核3.19后才用3个参数的wait_on_bit_io()函数,代码如下

vim
   1639 #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)
   1640    return wait_on_bit_io(&req->wb_flags,
   1641                          PG_BUSY,
   1642                          TASK_UNINTERRUPTIBLE);
   1643 #elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 13)
   1644    return wait_on_bit(&req->wb_flags,
   1645                       PG_BUSY,
   1646 #if LINUX_VERSION_CODE < KERNEL_VERSION(3, 17, 0)
   1647                       HgfsWbRequestWaitUninterruptible,
   1648 #endif
   1649                       TASK_UNINTERRUPTIBLE);
   1650 #else

个人推测,在其他linux版本中可能也会出现类是的问题,只要看看报错源码,如果是由于#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 17, 0),这种判断造成的报错,只要把宏改成当前的版本号,一般都能解决问题.

vmware-tools-distrib/lib/modules/source的目录下有不少tar文件,我是根据报错的提示 
“/tmp/modconfig-71euqe/vmhgfs-only/page.c:1649:23: error: too many arguments to function ‘wait_on_bit’” 一个个去解压了找的

解压指令 
tar xf vmhgfs.tar

修改目录下的page文件的1639行

vim
1639 #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)

改为如下↓

vim
1639 #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 10, 0)

解压后修改完成打包指令 
tar cf vmhgfs.tar vmhgfs-only

然后执行vmware-install.pl 问题解决(重新执行/home/vmware-tools-distrib/vmware-install.pl)



方法一: 
命令: uname -a 
作用: 查看系统内核版本号及系统名称 



参考资料:

http://www.linuxidc.com/Linux/2017-06/145167.htm

http://www.cnblogs.com/ddbear/p/6857199.html

https://www.b9go.com/blog/myweishanli/article/558

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值