Как определить элемент 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