昨天(2015-12-08),一不小心将内核模块全都删除了,汗。。。。郁闷了好久,也想了些办法,依然没有救活原系统,无奈只好重装。
之前的系统,我安装vmware 一直不能成功使用,各种版本vmware试了个遍。。。。。
全部都是报“在运行vmware之前需要编译一些必要的模块”,然后弹出对话框让我指定对应内核头文件路径,指定之后,提示没有找到正在使用的内核版本的头文件。。。就那么持续了1个多月没有解决。
重装后,我直接安装了vmware workstation10.0.2,安装成功,在启动时,弹出需要编译一些模块,但是对话框的样式完全与之前尝试时不同了,很是奇怪。只有一个vmnet模块没有编译通过,经过之前的各种尝试,也知道问题在什么地方,所以迳直去做了修改,然后在启动编译通过,正常使用了。。。
经过这个对比,我在想为什么会有这样的差异。或许是在之前的系统中我首先安装了vmware workstation 12,然后卸载,又装了10、9、vmware Player12、7等等进行尝试,但是vmware在卸载时并没有经编译模块的组件卸载掉,导致了我折腾了那么久。
我的系统信息:
Linux localhost.localdomain 3.10.0-229.el7.x86_64 #1 SMP Fri Mar 6 11:36:42 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
安装的vmware workstation版本:VMware-Workstation-Full-10.0.2-1744117.x86_64
出现的问题: vmware 中的vmnet 编译未通过
解决方法:在/usr/lib/vmware/modules/source中找到vmnet.tar,将其解压,修改filter.c文件的206、259行的编译选项:
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 13, 0) ==> #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 0, 0)
小版本有差异,代码行数是有些不同的,可参照以下:
主要是分别修改下面这两行的编译选项
1、VNetFilterHookFn(const struct nf_hook_ops *ops,
2、transmit = (ops->hooknum == VMW_NF_INET_POST_ROUTING);
修改好后,保存,将vmnet-only打包为vmnet.tar 替换原包。
再运行vmware即可。
update 2016.7.26
昨天将centos升级,内核随之升级为了3.10.0-327.22.2.el7.x86_64。
vmware的vmnet模块也要相应的重新编译,较上个版本,nf_hookfn函数类型有所变化:
-
typedef unsigned int nf_hookfn(const struct nf_hook_ops *ops,
-
struct sk_buff *skb,
-
const struct net_device *in,
-
const struct net_device *out,
-
#ifndef __GENKSYMS__
-
const struct nf_hook_state *state
-
#else
-
int (*okfn)(struct sk_buff *)
-
#endif
-
);
增加了__GENKSYMS__宏判断定义。
将vmnet中的filter.c中VNetFilterHookFn函数定义添加以上宏判断,保存,打包。执行sudo vmware即可
阅读(2838) | 评论(0) | 转发(0) |