Quelle est la différence entre «sélectionner» et «dépend» dans le noyau Linux Kconfig?

11

Quelles sont les différences de dépendances entre selectet depends ondans les fichiers Kconfig de noyaux?

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.

Dans l'exemple ci-dessus, comment est FB_CIRRUSdifféremment lié à FB && (ZORRO || PCI)ce qu'il est FB_CFB_FILLRECT, FB_CFB_COPYAREAet FB_CFB_IMAGEBLIT?

Mise à jour

J'ai remarqué que depend oncela ne fait pas grand-chose en termes d'ordre de compilation.

Par exemple. Une génération réussie d'AppB dépend d'une LibB liée de manière statique à construire en premier. La configuration depends on LibBde Kconfig pour AppB ne forcera pas la création de LibB en premier. Le réglage select LibBsera.

TheMeaningfulEngineer
la source

Réponses:

17

depends onindique que le ou les symboles doivent déjà être sélectionnés positivement ( =y) pour que cette option soit configurée. Par exemple, les depends on FB && (ZORRO || PCI)moyens FBdoivent avoir été sélectionnés, et (&&) soit ZORROou (||) PCI. Pour des choses comme make menuconfigcela, cela détermine si une option sera présentée ou non.

selectdéfinit positivement un symbole. Par exemple, select FB_CFB_FILLRECTsignifiera FB_CFB_FILLRECT=y. Cela remplit une dépendance potentielle de certaines autres options de configuration. Notez que les documents du noyau déconseillent son utilisation pour les symboles "visibles" (qui peuvent être sélectionnés / désélectionnés par l'utilisateur) ou pour les symboles qui ont eux-mêmes des dépendances, car ceux- ci ne seront pas vérifiés.

Référence: https://www.kernel.org/doc/Documentation/kbuild/kconfig-language.txt

boucle d'or
la source
3

depends signifie que l'option n'apparaît dans le menu que si ses prérequis (la construction booléenne derrière elle) sont remplis.

selectsignifie que, lorsque l'utilisateur sélectionne cette option, l'option donnée en argument à selectsera automatiquement sélectionnée.

mirabilos
la source
1

J'aime penser comme:

  • selectest un "sous-ensemble" de depends, lorsqu'il n'y a qu'une seule dépendance possible pour une fonction.

    Puisqu'il n'y a qu'une seule dépendance possible, il selectsuffit de sélectionner cette option automatiquement et vous évite de choisir manuellement la dépendance de manière explicite.

    Cette automatisation est ce que vous gagnez de la restriction de sous-ensemble d'avoir une seule dépendance possible.

  • depends est plus général et fonctionne dans les cas où une fonctionnalité dépend d'une interface ayant plusieurs implémentations.

    Par exemple, sur 4.15, il existe 2 implémentations BPF: Classic et Extended.

    Par conséquent, la BPF_JITfonctionnalité dépend de l'activation d'au moins une des implémentations:

    config BPF_JIT
        depends on HAVE_CBPF_JIT || HAVE_EBPF_JIT
    

    Puisqu'il y a deux implémentations possibles pour BFP_JIT, Kconfig n'a pas pu sélectionner la bonne automatiquement.

    Parfois, j'aimerais pouvoir dire: "si aucune des dépendances n'est satisfaite, sélectionnez-la par défaut", ce qui permettrait d'automatiser davantage les choses.

Il y a aussi des effets "quelque chose cache une autre option sur menuconfig", mais ce ne sont que des peluches :-)

Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功
la source