LinuxカーネルKconfigの「select」と「depends」の違いは何ですか?


11

間の依存性の違いは何ですかselectdepends 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_CIRRUSdiffrentlyに関連するFB && (ZORRO || PCI)ことがあるよりもFB_CFB_FILLRECTFB_CFB_COPYAREAFB_CFB_IMAGEBLIT

更新

depend onコンパイルの順序に関してはあまり効果がないことに気づきました。

例えば。AppBの正常なビルドは、最初にビルドされる静的にリンクされたLibBに依存しています。depends on LibBKconfigで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ます。これは、いくつかの他の構成オプションの潜在的な依存関係を満たします。カーネルのドキュメントでは、「可視の」シンボル(ユーザーが選択または選択解除できる)またはそれ自体に依存関係があるシンボルのチェックは行われないため、これを使用しないように注意してください。

リファレンス:https : //www.kernel.org/doc/Documentation/kbuild/kconfig-language.txt


3

depends オプションは、その前提条件(背後にあるブール構造)が満たされた場合にのみメニューに表示されることを意味します。

selectつまり、ユーザーがこのオプションを選択すると、引数として指定されたオプションselectが自動的に選択されます。


1

私が考えたいのは次のとおりです:

  • selectdepends機能の可能な依存関係が1つしかない場合のの「サブセット」です。

    可能な依存関係は1つしかないので、selectそのオプションを自動的に選択するだけで、最初に手動で依存関係を明示的に選択する手間が省けます。

    この自動化は、依存関係が1つしかないというサブセット制限から得られるものです。

  • depends より一般的で、機能が複数の実装を持つインターフェースに依存する場合に機能します。

    たとえば、4.15では、クラシックと拡張の2つのBPF実装があります。

    したがって、BPF_JIT機能は、有効になっている実装の少なくとも1つに依存します。

    config BPF_JIT
        depends on HAVE_CBPF_JIT || HAVE_EBPF_JIT
    

    には2つの可能な実装があるためBFP_JIT、Kconfigは適切なものを適切に自動的に選択できませんでした。

    「依存関係が1つも満たされていない場合は、デフォルトでこれを選択する」と言いたい場合がありますが、これにより、さらに自動化できます。

「何かがmenuconfigの別のオプションを隠す」効果もありますが、これらは単に綿毛です:-)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.