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

来源:互联网 发布:武汉软件测试工资 编辑:程序博客网 时间:2024/05/18 02:51

背景:

需要从本地的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 herewait_on_bit(void *word, int bit, unsigned mode)^make[2]: *** [/tmp/modconfig-71euqe/vmhgfs-only/page.o] Error 1make[2]: *** Waiting for unfinished jobs....make[1]: *** [_module_/tmp/modconfig-71euqe/vmhgfs-only] Error 2make[1]: Leaving directory `/usr/src/kernels/3.10.0-514.2.2.el7.x86_64'make: *** [vmhgfs.ko] Error 2make: 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

阅读全文
0 0
原创粉丝点击