2009-05-06 20 views
5

लिनक्स कर्नेल अपग्रेड के बाद, मेरा वीएमवेयर सर्वर कुछ पुनः कॉन्फ़िगरेशन कार्य (कुछ कर्नेल मॉड्यूल बनाने सहित) करने के लिए vmware-config.pl का उपयोग करने तक शुरू नहीं हो सकता है।लिनक्स कर्नेल अपग्रेड के बाद मुझे vmware कर्नेल मॉड्यूल को फिर से संकलित करने की आवश्यकता क्यों है?

यदि मैं अपने विंडोज़ वीएमवेयर होस्ट को नवीनतम विंडोज सर्विस पैक के साथ अपडेट करता हूं, तो मुझे आमतौर पर वीएमवेयर चलाने के लिए कुछ भी करने की आवश्यकता नहीं होती है।

क्यों वीएमवेयर लिनक्स और विंडोज के बीच अलग-अलग काम करता है? क्या यह पुन: संकलित कार्रवाई विंडोज पर लिनक्स प्लेटफॉर्म पर कोई लाभ लाती है?

उत्तर

12

The Linux Kernel Driver Interface पढ़ें।

यह समझाने की कोशिश करने के लिए लिखा जा रहा है कि लिनक्स में बाइनरी कर्नेल इंटरफ़ेस क्यों नहीं है, और न ही इसमें एक स्थिर कर्नेल इंटरफ़ेस है। कृपया महसूस करें कि यह आलेख _in kernel_ इंटरफेस का वर्णन करता है, कर्नेल को इंटरफेस के लिए कर्नेल नहीं। उपयोगकर्ता इंटरफ़ेस इंटरफ़ेस के लिए कर्नेल वह है जो अनुप्रयोग प्रोग्राम का उपयोग करता है, syscall इंटरफ़ेस। वह इंटरफ़ेस समय के साथ _very_ स्थिर है, और टूट नहीं जाएगा। मेरे पास पुराने प्रोग्राम हैं जो पूर्व 0.9something कर्नेल पर बनाए गए थे जो अभी भी नवीनतम 2.6 कर्नेल रिलीज पर ठीक काम करता है। यह इंटरफ़ेस वह है जो उपयोगकर्ता और एप्लिकेशन प्रोग्रामर स्थिर होने पर भरोसा कर सकते हैं। स्वतंत्रता किसी भी समय में गिरी कार्यान्वयन विवरण और एपीआई बदलने के लिए उन्हें बहुत तेजी से और बेहतर विकसित करने के लिए अनुमति देता है :

यह लिनक्स कर्नेल डेवलपर्स के एक बड़े हिस्से को देखते दर्शाता है।

रिलीज से रिलीज होने के समान-कर्नेल इंटरफेस को रखने के वादे के बिना, बाइनरी कर्नेल मॉड्यूल जैसे वीएमवेयर के कई कर्नेल पर भरोसेमंद काम करने का कोई तरीका नहीं है।

उदाहरण के तौर पर, यदि कुछ संरचनाएं नए कर्नेल रिलीज (बेहतर प्रदर्शन या अधिक सुविधाओं या किसी भी अन्य कारण के लिए) पर बदलती हैं, तो बाइनरी वीएमवेयर मॉड्यूल पुरानी संरचना लेआउट का उपयोग करके विनाशकारी क्षति का कारण बन सकता है। स्रोत से फिर से मॉड्यूल को संकलित करने से नए संरचना लेआउट को कैप्चर किया जाएगा, और इस प्रकार काम करने का एक बेहतर मौका खड़ा होगा - हालांकि फ़ील्ड हटा दिए गए हैं या नाम बदल दिए गए हैं या अलग-अलग उद्देश्यों को दिए गए हैं।

एक समारोह अपने तर्क सूची में परिवर्तन, या का नाम बदले जाने या अन्यथा भी एक ही स्रोत कोड काम करेंगे से फिर कंपाइल नहीं अब उपलब्ध नहीं बनाया है, तो। मॉड्यूल को नए कर्नेल को अनुकूलित करना होगा। चूंकि सभी को (स्रोत) होना चाहिए और (कोई भी जो ढूंढ सकता है) फिट करने के लिए इसे संशोधित करने में सक्षम है।"एंड-नोड्स पर पुश वर्क" नेटवर्किंग और फ्री सॉफ़्टवेयर दोनों में एक आम विचार है: चूंकि संसाधन [फ्रिंग्स पर]/[लिनक्स कर्नेल के बाहर के डेवलपर्स के] सीमित संसाधनों [रीढ़ की हड्डी के] से बड़े हैं/[लिनक्स डेवलपर्स के], पूर्व में काम करने के लिए व्यापार बंद करने के लिए व्यापार बंद कर दिया जाता है।

दूसरी तरफ, माइक्रोसॉफ्ट ने निर्णय लिया है कि उन्हें जितना संभव हो सके बाइनरी ड्राइवर संगतता को सुरक्षित रखना होगा - उनके पास कोई विकल्प नहीं है, क्योंकि वे मालिकाना दुनिया में खेल रहे हैं। एक तरह से, यह बाहरी डेवलपर्स के लिए बहुत आसान बनाता है, जो अब आगे बढ़ने वाले लक्ष्य का सामना नहीं करते हैं, और अंतिम उपयोगकर्ताओं के लिए जिन्हें कभी भी कुछ भी बदलना नहीं पड़ता है। नकारात्मक स्तर पर, यह माइक्रोसॉफ्ट को पीछे की संगतता बनाए रखने के लिए मजबूर करता है, जो माइक्रोसॉफ्ट के डेवलपर्स के लिए समय लेने वाली (सबसे अच्छी) है और (सबसे खराब) अक्षम है, बग का कारण बनता है, और आगे की प्रगति को रोकता है।

2

लिनक्स में एक स्थिर कर्नेल एबीआई नहीं है - डेटास्ट्रक्चर के आंतरिक लेआउट की तरह चीजें, संस्करण से संस्करण में बदलती हैं। नए कर्नेल में एबीआई का उपयोग करने के लिए वीएमवेयर को पुनर्निर्मित करने की जरूरत है।

दूसरी तरफ, विंडोज़ में एक बहुत ही स्थिर कर्नेल एबीआई है जो सर्विस पैक से सर्विस पैक में नहीं बदलती है।

1

बोडनान के उत्तर में जोड़ने के लिए, एबीआई संगतता मिश्रित बैग है। एक ओर, यह आपको बाइनरी मॉड्यूल और ड्राइवर वितरित करने की अनुमति देता है जो कर्नेल के नए संस्करणों के साथ काम करेगा। दूसरी ओर, यह कर्नेल प्रोग्रामर को पीछे की संगतता बरकरार रखने के लिए बहुत सारे गोंद कोड जोड़ने के लिए मजबूर करता है। चूंकि लिनक्स ओपन-सोर्स है, और क्योंकि kernel developers even whether they're even allowed, बाइनरी मॉड्यूल वितरित करने की क्षमता को महत्वपूर्ण नहीं माना जाता है। उलझन में, कर्नेल को बेहतर बनाने के लिए डेटास्ट्रक्चर को बदलने पर लिनक्स कर्नेल डेवलपर्स को एबीआई संगतता के बारे में चिंता करने की ज़रूरत नहीं है। लंबे समय तक, इसका परिणाम क्लीनर कर्नेल कोड में होता है।

1

यह लिनक्स और विंडोज के विभिन्न सांस्कृतिक वातावरण और अपेक्षाओं में विकसित होने का एक परिणाम है: http://www.joelonsoftware.com/articles/Biculturalism.html। संक्षेप में: विंडोज उपयोगकर्ताओं के लिए उपयुक्त होने के लिए डिज़ाइन किया गया है, जबकि लिनक्स ओपन सोर्स डेवलपर्स के लिए उपयुक्त होने के लिए विकसित होता है।