1

我正在编写一个内核模块,它有两个可以使用的低级选项。这两个选项都可以选择为 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 中编写这样的配置?

4

2 回答 2

1

假设两个后端不能同时加载到内核A配置入口似乎是最好的:Bchoice

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
endchoice

的行为choiceDocumentation/kbuild/kconfig-language.txt中描述:

虽然布尔选项只允许选择单个配置条目,但三态选项还允许将任意数量的配置条目设置为“m”。如果存在单个硬件的多个驱动程序并且只能将单个驱动程序编译/加载到内核中,则可以使用此方法,但所有驱动程序都可以编译为模块。

choice使用示例tristatesound/soc/davinci/Kconfig

于 2017-01-15T09:22:19.067 回答
0

您可以使其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
于 2017-01-16T17:01:43.060 回答