2010-01-25 3 views
6

अगर मैं "संस्करण" कहा जाता है मेरी निष्पादन पर निम्न आदेश, फेडोरा कोर 11 पर संकलित, मैं इस उत्पादनक्या लिनक्स फ़ाइल आदेश के उत्पादन में संस्करण संख्या क्षेत्र है

फ़ाइल संस्करण मिलता है

संस्करण: ELF 32-बिट LSB निष्पादन, इंटेल 80386, संस्करण 1 (SysV), गतिशील रूप से जुड़े हुए (साझा का उपयोग करता है libs), जीएनयू/लिनक्स 2.6.18 के लिए,

छीन नहीं 2.6 का महत्व क्या है .18 अंत की ओर संख्या, और क्या यह किसी भी प्रकार का उपयोग है ग्राहकों को tinguishing जो कुछ सॉफ्टवेयर के संस्करण डाउनलोड करना चाहिए?

मैं क्या अब तक देखा है से, यह संख्या निश्चित रूप से नहीं

  1. कर्नेल संस्करण
  2. libc संस्करण
  3. कुछ भी lsb_release से कोई लेना देना

मैं है 'ग्राहकों को यह जानने की अनुमति देने के लिए कुछ आसान पहचानकर्ता प्राप्त करना चाहते हैं कि उन्हें कौन सी बाइनरी रिलीज डाउनलोड करनी चाहिए, जिसे वे आदर्श रूप से कमांड टाइप करके पहचानने में सक्षम होना चाहिए (जैसे uname -a, हालांकि यह स्पष्ट रूप से है इस मामले में एक नहीं)।

धन्यवाद

उत्तर

7

यह द्विआधारी था मशीन की गिरी संस्करण पर संकलित है। यदि आप अपने वितरण से प्रीकंपील्ड बाइनरी का उपयोग करते हैं, तो यह वितरण विक्रेता की मशीन का कर्नेल संस्करण है, शायद इसके संकलन फार्म में।

यह प्रासंगिक है उदा। syscalls पर विचार करते समय। कहें कि आपकी बाइनरी syscall संख्या का उपयोग करती है। X और आप एक कर्नेल का उपयोग करते हैं जो X का समर्थन नहीं करता है या इससे भी बदतर syscall संख्या असाइन किया गया है। X एक अलग syscall के लिए।

वेनिला लिनक्स कर्नेल उपयोगकर्ता API स्थिर है। इसका मतलब है कि लिनक्स संस्करण A में उपलब्ध प्रत्येक सिस्कल लिनक्स संस्करण B में A <=B में उपलब्ध है। लेकिन ऐसा हो सकता है कि कुछ डेवलपर लिनक्स के अपने स्वयं के विकास संस्करण (linux-2.6.18-xy जैसे कुछ) जारी करता है और वह एक नया सिस्कोल लागू करता है। यदि वह अब उस कर्नेल संस्करण का उपयोग करके बाइनरी संकलित करता है, तो बाइनरी उस संस्करण के साथ टैग की जाती है। तो, आप बाद में यह जानने में सक्षम हैं कि यह काम कर सकता है या नहीं। तो प्रभावी ढंग से, कम से कम कर्नल संस्करण निष्पादन के साथ दोहरी संगतता है कि -

[...] 
#define __NR_restart_syscall  0 
#define __NR_exit   1 
#define __NR_fork   2 
#define __NR_read   3 
#define __NR_write  4 
#define __NR_open   5 
[...] 
+0

धन्यवाद:

Btw, /usr/include/asm/unistd_32.h syscall संख्या, अंश होता है? मैंने शुरुआत में एक उपयोगकर्ता स्पेस प्रोग्राम के रूप में एक कर्नेल संस्करण को छूट दी है, जो libc.so पर केवल "निर्भर करता है" (ldd output की तरह), लेकिन मैं वहां लिंक देख सकता हूं। –

+0

आप ऐसा कह सकते हैं। वास्तविक सत्य थोड़ा अधिक उपनिवेश है: प्रत्येक कर्नेल संस्करण नए सिस्को नहीं लाता है और सामान्य प्रोग्राम में आप libc से syscall wrappers का उपयोग करते हैं। इसलिए संख्याओं को प्रोग्राम में ही हार्डकोड नहीं किया गया है लेकिन libc में। लेकिन अगर एक कर्नेल ने एक नया सिस्कल का आविष्कार किया है, तो आपका प्रोग्राम इस पर निर्भर करता है, आप उस प्रोग्राम को पुराने कर्नेल पर निष्पादित नहीं कर सकते हैं ... –

+0

हां - मैं यही सोच रहा था - एक उपयोगकर्तास्पेस प्रोग्राम के रूप में, मुझे परवाह नहीं है कर्नेल - केवल libc। लेकिन निश्चित रूप से, libc को कर्नेल के बारे में ध्यान रखना चाहिए, क्योंकि यह कर्नेल के साथ उपयोगकर्ता स्थान पुल करता है।तो, वास्तव में, संख्या कर्नेल संस्करण है जिसे libc के खिलाफ संकलित किया गया था, जो विक्रेता से आता है (इस मामले में फेडोरा)। आपके समय के लिए धन्यवाद –

संबंधित मुद्दे