อะไรคือความแตกต่างระหว่าง“ เลือก” กับ“ ขึ้นกับ” ในเคอร์เนล Kconfig?


11

อะไรคือความแตกต่างของการพึ่งพาระหว่างselectและdepends onในไฟล์ Kconfig

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เกี่ยวข้อง diffrently ไปFB && (ZORRO || PCI)กว่านั้นคือการFB_CFB_FILLRECT, FB_CFB_COPYAREAและFB_CFB_IMAGEBLIT?

ปรับปรุง

ฉันสังเกตุdepend onว่าไม่ได้ทำอะไรมากมายในแง่ของการรวบรวม

ตัวอย่างเช่น. บิลด์ที่ประสบความสำเร็จของ AppB ขึ้นอยู่กับ LibB ที่ลิงก์แบบสแตติกที่จะสร้างก่อน การตั้งค่าdepends on LibBใน Kconfig สำหรับ AppB จะไม่บังคับให้สร้าง 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นี่เป็นการเติมเต็มการพึ่งพาที่เป็นไปได้ของตัวเลือกการกำหนดค่าอื่น ๆ โปรดทราบว่าเคอร์เนล docs ไม่สนับสนุนการใช้สัญลักษณ์นี้สำหรับ "มองเห็นได้" (ซึ่งสามารถเลือก / ยกเลิกการเลือกโดยผู้ใช้) หรือสัญลักษณ์ที่มีการอ้างอิงเนื่องจากจะไม่ถูกตรวจสอบ

การอ้างอิง: https://www.kernel.org/doc/Documentation/kbuild/kconfig-language.txt


3

depends หมายความว่าตัวเลือกจะแสดงเฉพาะในเมนูหากตรงตามข้อกำหนดเบื้องต้น (ตรงกับบูลีนบิลด์)

selectหมายความว่าเมื่อผู้ใช้เลือกตัวเลือกนี้ตัวเลือกที่กำหนดเป็นอาร์กิวเมนต์selectจะถูกเลือกโดยอัตโนมัติ


1

ฉันชอบคิดว่าเป็นดังนี้:

  • selectเป็น "ส่วนย่อย" ของdependsสำหรับเมื่อมีเพียงหนึ่งการพึ่งพาที่เป็นไปได้สำหรับคุณสมบัติ

    เนื่องจากมีเพียงหนึ่งการพึ่งพาที่เป็นไปได้selectเพียงแค่เลือกตัวเลือกนั้นโดยอัตโนมัติและช่วยคุณในการเลือกการพึ่งพาอย่างชัดเจนด้วยตนเองก่อน

    ระบบอัตโนมัตินี้เป็นสิ่งที่คุณได้รับจากข้อ จำกัด ย่อยของการมีความเป็นไปได้เพียงครั้งเดียว

  • depends เป็นเรื่องทั่วไปมากขึ้นและทำงานในกรณีที่คุณลักษณะนั้นขึ้นอยู่กับส่วนต่อประสานที่มีการนำไปใช้งานหลายอย่าง

    ตัวอย่างเช่นใน 4.15 มีการใช้งาน BPF 2 แบบ: แบบคลาสสิคและแบบขยาย

    ดังนั้นBPF_JITคุณลักษณะขึ้นอยู่กับการเปิดใช้งานอย่างน้อยหนึ่งอย่าง:

    config BPF_JIT
        depends on HAVE_CBPF_JIT || HAVE_EBPF_JIT
    

    เนื่องจากมีสองการใช้งานที่เป็นไปได้สำหรับBFP_JITKconfig ไม่สามารถเลือกหนึ่งที่เหมาะสมโดยอัตโนมัติ

    บางครั้งฉันก็หวังว่าฉันจะพูดได้ว่า: "หากไม่มีการพึ่งพาใด ๆ ให้เลือกอันนี้โดยค่าเริ่มต้น" แม้ว่ามันจะช่วยให้สิ่งต่าง ๆ โดยอัตโนมัติเพิ่มเติม

นอกจากนี้ยังมี "บางสิ่งบางอย่างซ่อนตัวเลือกอื่นใน menuconfig" ผลกระทบ แต่สิ่งเหล่านี้เป็นเพียงปุย :-)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.