Как определить элемент Kconfig ядра Linux, который должен по крайней мере выбрать один из его подопций, чтобы он работал?

Я пишу модуль ядра, который может использовать две опции низкого уровня. Оба эти 2 варианта можно выбрать как M/Y/N, но должен быть выбран хотя бы один из них, иначе модуль не будет работать. Как показано ниже:

[*]   Enable FOO support                      
       <M>     Back-end A
       <M>     Back-end B

Я пишу это, как показано ниже, но оба 2 подопции могут быть не выбраны.

config FOO
   bool "Enable FOO support"
config BACKEND_A
   tristate "Back-end A"
   depends on FOO
   depends on SUBSYSTEM_X
config BACKEND_B
   tristate "Back-end B"
   depends on FOO
   depends on SUBSYSTEM_Y

Как написать такой конфиг в kconfig?

2 ответа

Предполагая оба бэкэнда A а также B не может быть загружен в ядро одновременно, choice запись конфигурации кажется лучшей там:

config FOO
    bool "Enable FOO support"

choice
    prompt "Select back-end for FOO"
    depends on FOO

    config BACKEND_A
         tristate "Back-end A"
         depends on SUBSYSTEM_X
    config BACKEND_B
         tristate "Back-end B"
         depends on SUBSYSTEM_Y

Поведение choice описано в документации / kbuild / kconfig-language.txt:

В то время как логический выбор позволяет выбирать только одну запись конфигурации, выбор с тремя состояниями также позволяет любому количеству записей конфигурации быть установленным на "m". Это можно использовать, если существует несколько драйверов для одного оборудования, и только один драйвер может быть скомпилирован / загружен в ядро, но все драйверы могут быть скомпилированы как модули.

Пример использования choice с tristate: sound / soc / davinci / Kconfig.

Ты можешь сделать FOO недоступно для редактирования и выберите его, используя обратные зависимости:

config FOO
        tristate

menu "FOO support"

config BACKEND_A
        tristate "Back-end A"
        depends on SUBSYSTEM_X
        select FOO
config BACKEND_B
        tristate "Back-end B"
        depends on SUBSYSTEM_Y
        select FOO

endmenu
Другие вопросы по тегам