Linux 内核 Kconfig 中的“select”与“depends”有什么区别?

The*_*eer 12 kernel configuration linux-kernel

内核 Kconfig 文件之间selectdepends 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.
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,与 和 的FB_CIRRUS关系如何不同?FB && (ZORRO || PCI)FB_CFB_FILLRECTFB_CFB_COPYAREAFB_CFB_IMAGEBLIT

更新

我注意到这depend on在编译顺序方面并没有太大作用。

例如。AppB 的成功构建取决于首先构建静态链接的 LibB。depends on LibB在 Kconfig 中为 AppB设置不会强制首先构建 LibB。设置select LibB会。

gol*_*cks 18

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