लिनक्स कर्नेल कॉंफिग में "चयन" बनाम "निर्भर" के बीच अंतर क्या है?


11

गुठली Kconfig फ़ाइलों के बीच selectऔर निर्भरता में क्या अंतर हैं depends on?

config FB_CIRRUS
tristate "Cirrus Logic support"
depends on FB && (ZORRO || PCI)
select FB_CFB_FILLRECT
select FB_CFB_COPYAREA
select FB_CFB_IMAGEBLIT
---help---
This enables support for Cirrus Logic GD542x/543x based boards on
Amiga: SD64, Piccolo, Picasso II/II+, Picasso IV, or EGS Spectrum.

ऊपर के उदाहरण में, यह FB_CIRRUSकिससे FB && (ZORRO || PCI)भिन्न है FB_CFB_FILLRECT, FB_CFB_COPYAREAऔर इससे संबंधित कैसे है FB_CFB_IMAGEBLIT?

अपडेट करें

मैंने देखा है कि depend onसंकलन क्रम के संदर्भ में वास्तव में बहुत कुछ नहीं करता है।

उदाहरण के लिए। AppB का एक सफल निर्माण एक सांख्यिकीय रूप से जुड़े LibB पर निर्भर करता है जिसे पहले बनाया जाना था। depends on LibBAppB के लिए Kconfig में स्थापित करना LibB को पहले निर्मित करने के लिए बाध्य नहीं करेगा। सेटिंग select LibBकरना।

जवाबों:


17

depends onइंगित करता है कि =yइस विकल्प को कॉन्फ़िगर करने के लिए प्रतीक (ओं) को पहले से ही सकारात्मक रूप से चयनित ( ) होना चाहिए। उदाहरण के लिए, depends on FB && (ZORRO || PCI)साधन FBचुने गए होंगे, और ((&&) या तो ZORRO(()) PCI। जैसी चीजों के लिए make menuconfig, यह निर्धारित करता है कि एक विकल्प प्रस्तुत किया जाएगा या नहीं।

selectसकारात्मक रूप से एक प्रतीक सेट करता है। उदाहरण के लिए, select FB_CFB_FILLRECTमतलब होगा FB_CFB_FILLRECT=y। यह कुछ अन्य विन्यास विकल्प (ओं) की एक संभावित निर्भरता को पूरा करता है। ध्यान दें कि कर्नेल डॉक्स इसके लिए "दृश्यमान" प्रतीकों (जो उपयोगकर्ता द्वारा चयनित / अचयनित किए जा सकते हैं) या उन प्रतीकों के लिए जो स्वयं निर्भरता रखते हैं, के उपयोग को हतोत्साहित करते हैं, क्योंकि वे जांचे नहीं जाएंगे।

संदर्भ: https://www.kernel.org/doc/Documentation/kbuild/kconfig-language.txt


3

depends इसका मतलब यह है कि विकल्प केवल मेनू में दिखाई देता है यदि इसके पूर्वापेक्षाएँ (इसके पीछे बूलियन निर्माण) मिले हैं।

selectइसका मतलब है कि, जब उपयोगकर्ता इस विकल्प का चयन करता है, तो तर्क के रूप में दिया गया विकल्प selectस्वतः चयनित होगा।


1

मैं इस बारे में सोचना चाहता हूं:

  • selectएक "सबसेट" है depends, जब किसी सुविधा के लिए केवल एक संभव निर्भरता होती है।

    चूंकि केवल एक ही संभव निर्भरता है, selectबस उस विकल्प को स्वचालित रूप से चुनता है, और आपको पहले निर्भरता को मैन्युअल रूप से चुनने के काम को बचाता है।

    यह स्वचालन वही है जो आप केवल एक संभावित निर्भरता होने के सबसेट प्रतिबंध से प्राप्त करते हैं।

  • depends अधिक सामान्य है, और उन मामलों पर काम करता है जहां एक विशेषता एक इंटरफ़ेस पर निर्भर करती है जिसमें कई कार्यान्वयन हैं।

    उदाहरण के लिए, 4.15 पर, 2 बीपीएफ कार्यान्वयन हैं: क्लासिक और विस्तारित।

    इसलिए, यह BPF_JITसुविधा सक्षम होने के कम से कम एक कार्यान्वयन पर निर्भर करती है:

    config BPF_JIT
        depends on HAVE_CBPF_JIT || HAVE_EBPF_JIT
    

    चूँकि BFP_JIT, दो संभावित कार्यान्वयन हैं , कोंकफिग समझदारी से अपने आप ही सही का चयन नहीं कर सका।

    कभी-कभी मेरी इच्छा होती है कि मैं कहूं: "अगर कोई भी निर्भरता पूरी नहीं हुई है, तो डिफ़ॉल्ट रूप से इस एक का चयन करें", हालांकि यह आगे सामान को स्वचालित करने की अनुमति देगा।

वहाँ भी "कुछ menuconfig पर एक और विकल्प छुपाता है" प्रभाव है, लेकिन ये सिर्फ फुलाना हैं :-)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.