在mac上,用paralles虚拟机安装完ubuntu时,在Parallels 版本小于13.3.1且ubuntu版本大于14.4.4时会出现paralles tools安装失败的现象,具体如下图
可以通过如下步骤修复:
-
挂载 Parallels Tools镜像
-
打开一个terminal,执行如下命令(或者手动复制后添加相应权限)
cd /media//Parallels\ Tools/ mkdir ~/Desktop/tools cp -pr * ~/Desktop/tools cd ~/Desktop/tools chmod -R 777 kmods
-
用解压缩工具打开~/Desktop/tools/kmods目录下的prl_mod.tar.gz
-
在压缩工具里用gedit打开./prl_tg/Toolgate/Guest/Linux/prl_tg/prltg.c,在其他include的代码后面添加如下代码
#include <linux/vmalloc.h>
-
在压缩工具里用gedit打开./prl_fs/SharedFolders/Guest/Linux/prl_fs/inode.c,找到prlfs_follow_link (大约在650行)并修改为如下代码(包括 compat_follow_link_t)
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,2,0) #define compat_follow_link_t const char* #elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,13) #define compat_follow_link_t void* #else #define compat_follow_link_t int #endif #if LINUX_VERSION_CODE >= KERNEL_VERSION(4,2,0) static compat_follow_link_t prlfs_follow_link(struct dentry *dentry, void **cookie) #else static compat_follow_link_t prlfs_follow_link(struct dentry *dentry, struct nameidata *nd) #endif { #if LINUX_VERSION_CODE >= KERNEL_VERSION(4,2,0) return do_read_symlink(dentry); #else #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) nd_set_link(nd, do_read_symlink(dentry)); #endif #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,13) return NULL; #elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) return 0; #else return vfs_follow_link(nd, do_read_symlink(dentry)); #endif #endif }
-
在~/Desktop/tools目录执行如下命令:
sudo ./install
- 挂载 Parallels Tools镜像
- 打开一个terminal,执行如下命令(或者手动复制后添加相应权限)
cd /media//Parallels\ Tools/ mkdir ~/Desktop/parallels_fixed cp -pr * ~/Desktop/parallels_fixed cd ~/Desktop/parallels_fixed chmod -R 777 kmods - 用解压缩工具打开~/Desktop/tools/kmods目录下的prl_mod.tar.gz
- 修改3个文件
-
进入"prl_eth/pvmnet/" (cd ~/Desktop/parallels_fixed/kmods/prl_eth/pvmnet) 目录,修改pvmnet.c文件,在438行,修改
MODULE_LICENSE("Parallels"); 为 MODULE_LICENSE("GPL"); 然后保存并更新压缩包
-
进入"prl_tg/Toolgate/Guest/Linux/prl_tg/" (cd ~/Desktop/parallels_fixed/kmods/prl_tg/Toolgate/Guest/Linux/prl_tg) 目录,修改prltg.c文件,在1535行,修改
MODULE_LICENSE("Parallels"); 为 MODULE_LICENSE("GPL");
然后保存并更新压缩包
-
进入"prl_fs_freeze/Snapshot/Guest/Linux/prl_freeze/" (cd ~/Desktop/parallels_fixed/kmods/prl_fs_freeze/Snapshot/Guest/Linux/prl_freeze)目录,修改prl_fs_freeze.c文件,在212行,修改
void thaw_timer_fn(unsigned long data) { struct work_struct *work = (struct work_struct *)data; schedule_work(work); } 为 void thaw_timer_fn(unsigned long data) { struct work_struct *work = (struct work_struct *)data; schedule_work(work); } void thaw_timer_fn_new_kernel(struct timer_list *data) { struct work_struct *work = data->expires; schedule_work(work); }
修改原220行 DEFINE_TIMER(thaw_timer, thaw_timer_fn, 0, (unsigned long)&(thaw_work)); 为
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0)
DEFINE_TIMER(thaw_timer, thaw_timer_fn_new_kernel);
#else
DEFINE_TIMER(thaw_timer, thaw_timer_fn, 0, (unsigned long)&(thaw_work));
#endif
然后保存并更新压缩包
最后在~/Desktop/parallels_fixed目录执行如下命令:
sudo ./install
- 在parallels 13.3.1版本中已经对tools在ubuntu目前的最新版18.04提供了支持,升级parallels是最简单的解决方案
- 前文的两种方法是在网上到处搜索实践比较得出的有效的方法,这里感谢上面两个方法的提供者
- 如果你不想升级parallels,也觉得按上面说的改文件太麻烦,这里提供一份我修改好的供大家使用,下载然后给权限,执行sudo ./install即可 (fix-Parallels-Tools-for-Ubuntu)
ref: