কার্নেল ৩.১৯ এর জন্য "ভিএমনেট তৈরি করতে ব্যর্থ"


9

কারণ এই উত্তরটি কেবল কার্নেল 3.13 এর জন্য, সুতরাং আমি Failed to build vmnetকার্নেল 3.19 এবং পূর্ববর্তী সংস্করণগুলির জন্য সমস্যার সমাধান ভাগ করতে চাই । সুতরাং এটি আমার আসল সমস্যা নয় এবং এটি কেবল ভবিষ্যতের পাঠকদের সহায়তা করার উদ্দেশ্যে।

প্রশ্ন

আমি যখন প্রথমবারের মতো ভিএমওয়্যার ওয়ার্কস্টেশন বা ভিএমওয়্যার প্লেয়ার চালাতে চাই, এটির জন্য কার্নেল স্তরে কিছু প্যাকেজ মোতায়েন করা দরকার তবে এটি ত্রুটির এই লাইনে ব্যর্থ হয়।

ভিএমনেট তৈরি করতে ব্যর্থ। বিল্ড কমান্ড কার্যকর করতে ব্যর্থ।

এই সমস্যাটি সমাধান করার জন্য আমার কী করা উচিত?


মনে রাখবেন যে এটি আর কেস হিসাবে দেখা যায় না। আজ একটি নতুন ইনস্টলেশন হিসাবে, একটি লিনাক্স সিস্টেমে, আমি এই বিল্ড সমস্যার প্রতিলিপি করতে সক্ষম হইনি।
টমাস ওয়ার্ড

উত্তর:


8

সমাধান

  1. ডিরেক্টরিটি ভিএমওয়্যার মডিউল উত্স ডিরেক্টরিতে পরিবর্তন করুন। [1]

    cd /usr/lib/vmware/modules/source
    
  2. ভিএমনেট মডিউলগুলি অনার করুন। [1]

    sudo tar -xvf vmnet.tar
    
  3. vmnet-only/driver.cআপনার প্রিয় পাঠ্য সম্পাদক দিয়ে খুলুন ।

    sudo gedit vmnet-only/driver.c
    
  4. লাইন প্রায় 267, নিম্নলিখিত পরিবর্তন করুন [2]

    if (filp && filp->f_op && filp->f_op->ioctl == VNetFileOpIoctl) {
        ret = VNetFileOpIoctl(filp->f_dentry->d_inode, filp, iocmd, ioarg);
    }
    return ret;        
    

    প্রতি

    #if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0)
    if (filp && filp->f_op && filp->f_op->ioctl == VNetFileOpIoctl) {
        ret = VNetFileOpIoctl(filp->f_dentry->d_inode, filp, iocmd, ioarg);
    }
    return ret;
    #else 
    if (filp && filp->f_op && filp->f_op->ioctl == VNetFileOpIoctl) {
        ret = VNetFileOpIoctl(filp->f_path.dentry->d_inode, filp, iocmd, ioarg);
    }
    return ret;
    #endif
    
  5. ১১৯৪ লাইনের আশেপাশে নিম্নলিখিতটি পরিবর্তন করুন [2]

    if (filp && filp->f_dentry) {
        inode = filp->f_dentry->d_inode;
    }
    err = VNetFileOpIoctl(inode, filp, iocmd, ioarg);
    return err;
    

    প্রতি

    #if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0)
    if (filp && filp->f_dentry) {
        inode = filp->f_dentry->d_inode;
    }
    err = VNetFileOpIoctl(inode, filp, iocmd, ioarg);
    return err;
    #else 
    if (filp && filp->f_path.dentry) {
        inode = filp->f_path.dentry->d_inode;
    }
    err = VNetFileOpIoctl(inode, filp, iocmd, ioarg);
    return err;
    #endif
    
  6. এই ফাইলটি সংরক্ষণ করুন এবং তারপরে ফাইলটি খুলুন vmnet-only/userif.c

    sudo gedit vmnet-only/userif.c
    
  7. লাইনের 526 প্রায়, নিম্নলিখিত পরিবর্তন করুন [2]

    return skb_copy_datagram_iovec(skb, 0, &iov, len);
    

    প্রতি

    #if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0)
    return skb_copy_datagram_iovec(skb, 0, &iov, len);
    #else
    struct iov_iter to;
    iov_iter_init(&to, READ, &iov, 1, len);
    return skb_copy_datagram_iter(skb, 0, &to, len);
    #endif
    
  8. এই ফাইলটি সংরক্ষণ করুন এবং তারপরে মডিউলগুলি পুনরায় টের করুন। [1]

    sudo tar -uvf vmnet.tar vmnet-only
    
  9. পূর্ববর্তী ওয়ার্কিং ডিরেক্টরিটি মুছুন। [1]

    sudo rm -r vmnet-only
    
  10. আবার জিইউআই (ওয়ার্কস্টেশন বা প্লেয়ার) চালান এবং মডিউলগুলি তৈরি করতে দিন।

তথ্যসূত্র

[1]: একটি উত্তর থেকে nonsleepr
[2]: একটি লেখ-আপ রবার্ট Gadsdon থেকে।


2
একটি ভাল লিখিত পোস্টের জন্য আপনাকে ধন্যবাদ। এটি আমার জন্য সমস্যাটি সমাধান করেছে।
চসসিম্বাওয়ে

4

ওয়ার্কস্টেশন 10 এর জন্য প্যাচ পোস্ট করার জন্য বুডিয়াপ ধন্যবাদ! এটি একটি প্যাচ ফাইলে সেই কোডটি প্রয়োগ করার জন্য আপনাকে সেই কোডটি ব্যবহার করতে হবে তা নির্ধারণ করতে আমার কিছুটা সময় নিয়েছে। ওয়ার্কস্টেশন ফোরামগুলিতে আমি ভিএমওয়্যার করা পোস্টটি এখানে।

ঠিক আছে! আমি বুঝতে পেরেছি. উবুন্টু 15.04 এ ওয়ার্কস্টেশন 10, বা যাই হোক না কেন। আমি এটি Xubuntu 15.04 কার্নেল 3.19.0-18-জেনেরিক পরীক্ষিত

ওয়ার্কস্টেশন 10 এর জন্য প্যাচের জন্য নতুন প্যাসি (10215458) তৈরি করা হয়েছে।

ওয়ার্কস্টেশন 10.06 এর নতুন করে ইনস্টল করার পরে বিশেষত -> ভিএমওয়্যার-ওয়ার্কস্টেশন-ফুল-10.0.6-2700073.x86_64.bundle

অবশ্যই মূল হতে হবে তবে আপনি মূলত অনুলিপি / পেস্ট করতে পারেন।

curl http://pastie.org/pastes/10215458/download -o /tmp/vmnet-3.19.patch_ws10

cd /usr/lib/vmware/modules/source
tar -xf vmnet.tar
patch -p0 -i /tmp/vmnet-3.19.patch_ws10
mv vmnet.tar vmnet.tar.SAVED
tar -cf vmnet.tar vmnet-only
rm -r vmnet-only
vmware-modconfig --console --install-all

বিশ্বাস করতে পারছি না আমি এটিকে উজ্জীবিত করার প্রথম ব্যক্তি! এটি একটি দুর্দান্ত, দুর্দান্ত উত্তর। (আশা করি আপনি আমার প্রস্তাবিত সম্পাদনায় আপত্তি করবেন না))
মার্ক ই হা হাজে

1
আমি এটি কেবল কার্নেল 4.2 দিয়ে উবুন্টু 15.10 এর সাথে চেষ্টা করেছি এবং এটি কার্যকর হয়নি। 15.10 তে ডাব্লুএস 10 কাজ করার জন্য আমি কোনও প্যাচ সন্ধান করতে পারি নি এবং কার্নেল 3.19 ব্যবহার করে 14 এলটিএসে ফিরে যেতে হয়েছিল।
টিমোথি সি। কুইন

@ জাভাস্ক্রিপ্টডুড হিসাবে একই। ৪.৪ কার্নেলের জন্য প্যাচ করবেন কীভাবে?
লিগামার

@ লাইগার - আমি ভিএমওয়্যার ওয়ার্কস্টেশনটির পুরানো সংস্করণগুলি লিনাক্সে কাজ করার চেষ্টা করে ছেড়ে দিয়েছি এবং ভার্চুয়াল বাক্সে স্যুইচ করেছি এবং সিদ্ধান্তটি আমাকে বেশ কার্যকর করেছে। লিনাক্স, এবং ভিএমওয়্যারের জন্য আমি মনে করি যে একমাত্র বাস্তব সমাধান হ'ল সর্বশেষ ওয়ার্কস্টেশন সংস্করণটির লাইসেন্স কিনতে - বা বিনামূল্যে ফ্রি ভিএমওয়্যার প্লেয়ার ব্যবহার করুন এবং জেডএফএস বা বিটিআরএফএসের মতো একটি বাহ্যিক স্ন্যাপশট প্রক্রিয়াটি উপস্থিত করুন।
তীমথিয় সি। কুইন

ধন্যবাদ @ জাভাস্ক্রিপ্টডুড - সম্মত আমি পাশাপাশি ভার্চুয়াল বাক্সে গিয়ে শেষ করেছি। আমি একটি খুশি শিবির :-) আশা করি মন্তব্যগুলি অন্যান্য লিনাক্স ব্যবহারকারীদের সহায়তা করতে পারে। শুভ কোডিং।
লিগামার

2

আপনি যদি ভিএমওয়্যার ওয়ার্কস্টেশন 10 চালাচ্ছেন তবে কার্নেল 3.19 এ কাজ করার জন্য এই প্যাচটি প্রয়োগ করুন

diff -rupN vmnet-only/driver.c vmnet-only-modified/driver.c
--- vmnet-only/driver.c 2015-01-17 09:25:58.000000000 +0800
+++ vmnet-only-modified/driver.c    2015-05-07 14:53:18.272218785 +0800
@@ -265,10 +265,17 @@ LinuxDriver_Ioctl32_Handler(unsigned int
 {
    int ret = -ENOTTY;

+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0)
    if (filp && filp->f_op && filp->f_op->ioctl == VNetFileOpIoctl) {
       ret = VNetFileOpIoctl(filp->f_dentry->d_inode, filp, iocmd, ioarg);
    }
    return ret;
+#else 
+   if (filp && filp->f_op && filp->f_op->ioctl == VNetFileOpIoctl) {
+      ret = VNetFileOpIoctl(filp->f_path.dentry->d_inode, filp, iocmd, ioarg);
+   }
+   return ret;
+#endif
 }


@@ -1191,11 +1198,19 @@ VNetFileOpUnlockedIoctl(struct file    *
    struct inode *inode = NULL;
    long err;

+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0)
    if (filp && filp->f_dentry) {
       inode = filp->f_dentry->d_inode;
    }
    err = VNetFileOpIoctl(inode, filp, iocmd, ioarg);
    return err;
+#else 
+   if (filp && filp->f_path.dentry) {
+      inode = filp->f_path.dentry->d_inode;
+   }
+   err = VNetFileOpIoctl(inode, filp, iocmd, ioarg);
+   return err;
+#endif
 }
 #endif

diff -rupN vmnet-only/netif.c vmnet-only-modified/netif.c
--- vmnet-only/netif.c  2015-01-17 09:25:58.000000000 +0800
+++ vmnet-only-modified/netif.c 2015-05-07 14:51:43.326885576 +0800
@@ -149,7 +149,7 @@ VNetNetIf_Create(char *devName,  // IN:
    memcpy(deviceName, devName, sizeof deviceName);
    NULL_TERMINATE_STRING(deviceName);

-   dev = alloc_netdev(sizeof *netIf, deviceName, VNetNetIfSetup);
+   dev = alloc_netdev(sizeof *netIf, deviceName, NET_NAME_UNKNOWN, VNetNetIfSetup);
    if (!dev) {
       retval = -ENOMEM;
       goto out;
diff -rupN vmnet-only/userif.c vmnet-only-modified/userif.c
--- vmnet-only/userif.c 2015-01-17 09:25:58.000000000 +0800
+++ vmnet-only-modified/userif.c    2015-05-07 14:52:32.095595913 +0800
@@ -523,7 +523,13 @@ VNetCopyDatagram(const struct sk_buff *s
       .iov_base = buf,
       .iov_len  = len,
    };
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0)
    return skb_copy_datagram_iovec(skb, 0, &iov, len);
+#else
+   struct iov_iter to;
+   iov_iter_init(&to, READ, &iov, 1, len);
+   return skb_copy_datagram_iter(skb, 0, &to, len);
+#endif
 }

1
হাই বুড়িপ এই প্যাচটি কীভাবে প্রয়োগ করতে হয় সে সম্পর্কে কোনও নির্বোধের কোনও সুযোগের গাইড? ধন্যবাদ।
সিম্মো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.