我正在编写一个内核模块,它有两个可以使用的低级选项。这两个选项都可以选择为M/Y/N,但必须至少选择其中一个,否则系统将无法工作。如下所示:
[*] Enable FOO support
<M> Back-end A
<M> Back-end B我把它写成如下,但是两个子选项都可以取消选择。
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中编写这样的配置?
发布于 2017-01-15 17:22:19
假设后端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
endchoiceDocumentation/kbuild/kconfig-language.txt中描述了choice的行为
虽然布尔选择只允许选择单个配置条目,但三态选择还允许将任意数量的配置条目设置为“m”。如果单个硬件存在多个驱动程序,并且只有一个驱动程序可以编译/加载到内核中,但所有驱动程序都可以编译为模块,则可以使用此方法。
结合tristate使用choice的例子:sound/soc/davinci/Kconfig。
发布于 2017-01-17 01:01:43
您可以将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
endmenuhttps://stackoverflow.com/questions/41659027
复制相似问题