首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何定义一个Linux内核Kconfig项,它必须至少选择一个子选项才能使其工作?

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

Stack Overflow用户
提问于 2017-01-15 15:59:18
回答 2查看 3K关注 0票数 1

我正在编写一个内核模块,它有两个可以使用的低级选项。这两个选项都可以选择为M/Y/N,但必须至少选择其中一个,否则系统将无法工作。如下所示:

代码语言:javascript
复制
[*]   Enable FOO support                      
       <M>     Back-end A
       <M>     Back-end B

我把它写成如下,但是两个子选项都可以取消选择。

代码语言:javascript
复制
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中编写这样的配置?

EN

回答 2

Stack Overflow用户

发布于 2017-01-15 17:22:19

假设后端AB不能同时加载到内核中,那么choice配置条目似乎是最好的:

代码语言:javascript
复制
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

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

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

结合tristate使用choice的例子:sound/soc/davinci/Kconfig

票数 1
EN

Stack Overflow用户

发布于 2017-01-17 01:01:43

您可以将FOO设置为不可编辑,并使用反向依存关系选择它:

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41659027

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档