¿Cuál es la diferencia entre "seleccionar" vs "depende" en el kernel de Linux Kconfig?

11

¿Cuáles son las diferencias en las dependencias entre selecty depends onen los archivos Kconfig de los núcleos?

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.

En el ejemplo anterior, ¿cómo se FB_CIRRUSdiffrently relacionada con FB && (ZORRO || PCI)lo que es FB_CFB_FILLRECT, FB_CFB_COPYAREAy FB_CFB_IMAGEBLIT?

Actualizar

He notado que en depend onrealidad no hace mucho en términos de orden de compilación.

Por ejemplo. Una compilación exitosa de AppB depende de una LibB estáticamente vinculada que se construirá primero. La configuración depends on LibBen Kconfig para AppB no obligará a la LibB a construirse primero. Configuración de select LibBvoluntad.

El Ingeniero Significante
fuente

Respuestas:

17

depends onindica que los símbolos ya deben estar seleccionados positivamente ( =y) para que esta opción se configure. Por ejemplo, los depends on FB && (ZORRO || PCI)medios FBdeben haber sido seleccionados y (&&) ZORROo (||) PCI. Para cosas como make menuconfig, esto determina si se presentará o no una opción.

selectestablece positivamente un símbolo. Por ejemplo, select FB_CFB_FILLRECTsignificará FB_CFB_FILLRECT=y. Esto cumple una dependencia potencial de algunas otras opciones de configuración. Tenga en cuenta que los documentos del núcleo desalientan el uso de esto para símbolos "visibles" (que el usuario puede seleccionar / deseleccionar) o para símbolos que tienen dependencias, ya que no se comprobarán.

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

encerrada dorada
fuente
3

depends significa que la opción solo aparece en el menú si se cumplen sus requisitos previos (la construcción booleana detrás de él).

selectsignifica que, cuando el usuario selecciona esta opción, la opción dada como argumento para selectse seleccionará automáticamente.

mirabilos
fuente
1

Me gusta pensar es como:

  • selectes un "subconjunto" de depends, para cuando solo hay una posible dependencia para una característica.

    Como solo hay una dependencia posible, selectsolo selecciona esa opción automáticamente y le ahorra el trabajo de seleccionar explícitamente la dependencia manualmente primero.

    Esta automatización es lo que obtiene de la restricción de subconjunto de tener solo una dependencia posible.

  • depends es más general y funciona en casos en los que una característica depende de una interfaz que tiene múltiples implementaciones.

    Por ejemplo, en 4.15, hay 2 implementaciones de BPF: Classic y Extended.

    Por lo tanto, la BPF_JITcaracterística depende de que al menos una de las implementaciones esté habilitada:

    config BPF_JIT
        depends on HAVE_CBPF_JIT || HAVE_EBPF_JIT
    

    Dado que hay dos implementaciones posibles para BFP_JIT, Kconfig no pudo seleccionar la correcta automáticamente.

    A veces desearía poder decir: "si no se cumple ninguna de las dependencias, seleccione esta por defecto", eso permitiría automatizar aún más las cosas.

También hay efectos de "algo oculta otra opción en menuconfig", pero estos son sólo pelusa :-)

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