Was ist der Unterschied zwischen "select" und "abhängig" im Linux-Kernel Kconfig?

11

Was sind die Unterschiede in den Abhängigkeiten zwischen selectund depends onin den Kconfig-Dateien des Kernels?

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.

In dem obigen Beispiel, wie wird FB_CIRRUSdiffrently im Zusammenhang mit , FB && (ZORRO || PCI)als es ist zu FB_CFB_FILLRECT, FB_CFB_COPYAREAund FB_CFB_IMAGEBLIT?

Aktualisieren

Mir ist aufgefallen, dass depend ondie Kompilierungsreihenfolge nicht wirklich viel bewirkt.

Beispielsweise. Ein erfolgreicher Build von AppB hängt davon ab, dass zuerst ein statisch verknüpfter LibB erstellt wird. Durch die Einstellung depends on LibBin Kconfig für AppB wird die LibB nicht zuerst erstellt. Einstellung select LibBwird.

TheMeaningfulEngineer
quelle

Antworten:

17

depends onGibt an, dass die Symbole bereits positiv ausgewählt sein =ymüssen, damit diese Option konfiguriert werden kann. Zum Beispiel müssen depends on FB && (ZORRO || PCI)Mittel FBausgewählt worden sein und (&&) entweder ZORROoder (||) PCI. Für Dinge wie make menuconfig, bestimmt dieser , ob oder nicht , wird eine Option präsentiert.

selectsetzt positiv ein Symbol. Zum Beispiel select FB_CFB_FILLRECTwird bedeuten FB_CFB_FILLRECT=y. Dies erfüllt eine mögliche Abhängigkeit von einigen anderen Konfigurationsoptionen. Beachten Sie, dass die Kerneldokumente davon abraten, dies für "sichtbare" Symbole (die vom Benutzer ausgewählt / abgewählt werden können) oder für Symbole, die selbst Abhängigkeiten aufweisen, zu verwenden, da diese nicht überprüft werden.

Referenz: https://www.kernel.org/doc/Documentation/kbuild/kconfig-language.txt

Goldlöckchen
quelle
3

depends bedeutet, dass die Option nur dann im Menü angezeigt wird, wenn ihre Voraussetzungen (das dahinter stehende boolesche Konstrukt) erfüllt sind.

selectWenn der Benutzer diese Option auswählt, wird die als Argument angegebene Option selectautomatisch ausgewählt.

Mirabilos
quelle
1

Ich denke gerne über Folgendes nach:

  • selectist eine "Teilmenge" von depends, wenn nur eine mögliche Abhängigkeit für ein Feature besteht.

    Da es nur eine mögliche Abhängigkeit gibt, select wählen Sie diese Option einfach automatisch aus und sparen sich die Arbeit, die Abhängigkeit zuerst explizit manuell auszuwählen.

    Diese Automatisierung erhalten Sie aus der Teilmengenbeschränkung, nur eine mögliche Abhängigkeit zu haben.

  • depends ist allgemeiner und funktioniert in Fällen, in denen eine Funktion von einer Schnittstelle mit mehreren Implementierungen abhängt.

    In 4.15 gibt es beispielsweise zwei BPF-Implementierungen: Classic und Extended.

    Daher BPF_JIThängt die Funktion von mindestens einer der aktivierten Implementierungen ab:

    config BPF_JIT
        depends on HAVE_CBPF_JIT || HAVE_EBPF_JIT
    

    Da gibt es zwei mögliche Implementierungen für BFP_JIT , konnte Kconfig die richtige nicht sinnvoll automatisch auswählen.

    Manchmal wünschte ich, ich könnte sagen: "Wenn keine der Abhängigkeiten erfüllt ist, wählen Sie diese standardmäßig aus", würde dies eine weitere Automatisierung ermöglichen.

Es gibt auch "etwas verbirgt eine andere Option auf menuconfig" -Effekte, aber diese sind nur Flusen :-)

Ciro Santilli 新疆 改造 中心 法轮功 法轮功 事件
quelle