如何定义一个Linux内核Kconfig项目,必须至少选择一个子选项才能使其工作?

时间:2017-01-15 07:59:18

标签: linux-kernel kbuild

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

2 个答案:

答案 0 :(得分:1)

假设后端scrollView.setContentOffset(scrollPoint, animated: true) A无法同时加载到内核 B配置条目似乎是最好的:< / p>

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的行为:

  

虽然布尔选项只允许单个配置条目   选中,三态选择也允许任意数量的配置条目   被设定为&#39; m&#39;。如果单个驱动程序有多个,则可以使用此选项   硬件存在,只能编译/加载一个驱动程序   内核,但所有驱动程序都可以编译为模块。

choice使用tristate的使用示例:Documentation/kbuild/kconfig-language.txt

答案 1 :(得分: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