更新ubuntu导致vmware虚拟机启动不了解决方法

升级ubuntu kernel后,vmware虚拟机启动不了了,报出“get_user_pages"找不到的错误,原来是在新kernel中,该函数不存在了 ,而vmware中还用的是该函数,因此按如下方式替换便可:
1)vmmon.tar
把vmmon-only/linux/hostif.c文件里的“get_user_pages”全都替换成“get_user_pages_fast"
    cd /usr/lib/vmware/modules/source
    tar xf vmmon.tar
    cd vmmon-only/linux/
    vim hostif.c
    :%s/get_user_pages/get_user_pages_fast/g
    :wq
    cd ../..

    重新打包vmmon.tar
    tar cvf vmmon.tar vmmon-only

2)vmnet.tar
把/vmnet-only/userif.c文件里的“get_user_pages”全都替换成“get_user_pages_fast"
    cd /usr/lib/vmware/modules/source
    tar xf vmnet.tar
    cd vmnet-only
    vim userif.c
    :%s/get_user_pages/get_user_pages_fast/g
    :wq
    cd ../..

    重新打包vmnet.tar
    tar cvf vmnet.tar vmnet-only

用以下命令安装:
user/bin/vmware-modconfig --icon='vmware-workstation' -appname='VMware'
vmware-modconfig --console --install-all

卸载:
sudo vmware-installer --uninstall-product vmware-workstation
sudo vmware-installer --uninstall-product vmware-player
/*
 *-----------------------------------------------------------------------------
 *
 * HostIFGetUserPages --
 *
 *      Lock the pages of an user-level address space in memory.
 *      If ppages is NULL, pages are only marked as dirty.
 *
 * Results:
 *      Zero on success, non-zero on failure.
 *
 * Side effects:
 *      None
 *
 *-----------------------------------------------------------------------------
 */

static int
HostIFGetUserPages(void *uvAddr,          // IN
                   struct page **ppages,  // OUT
                   unsigned int numPages) // IN
{
   int retval;

   retval = get_user_pages_fast((unsigned long)uvAddr, numPages, 0, ppages);

   return retval != numPages;
}

/*
 *-----------------------------------------------------------------------------
 *
 * UserifLockPage --
 *
 *    Lock in core the physical page associated to a valid virtual
 *    address.
 *
 * Results:
 *    The page structure on success
 *    NULL on failure: memory pressure. Retry later
 *
 * Side effects:
 *    Loads page into memory
 *
 *-----------------------------------------------------------------------------
 */

static INLINE struct page *
UserifLockPage(VA addr) // IN
{
   struct page *page = NULL;
   int retval;

   retval = get_user_pages_fast(addr, 1, FOLL_WRITE, &page);

   if (retval != 1) {
      return NULL;
   }

   return page;
}

retval = get_user_pages_fast((unsigned long)uvAddr, numPages, 0, ppages);
retval = get_user_pages_fast(addr, 1, FOLL_WRITE, &page);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值