首页 文章

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

提问于
浏览
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中编写这样的配置?

2 回答

  • 1

    假设后端 AB 无法同时加载到内核中, 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
    

    Documentation/kbuild/kconfig-language.txt中描述了 choice 的行为:

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

    使用示例 choicetristatesound/soc/davinci/Kconfig .

  • 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
    

相关问题