【问题标题】:Linux kernel Kconfig: How do I de-select an option?Linux 内核 Kconfig:如何取消选择一个选项?
【发布时间】:2019-01-22 10:41:18
【问题描述】:

如何取消选择一个选项? 比如下面这个脚本就是我想要实现的:

choice                                                                                         
    prompt "Camera type"                                                                       
    default CAMERA1                                                                            

config CAMERA1                                                                                 
    select POWER_PIN_ACTIVE_HIGH                                                               

config CAMERA2                                                                                 
    deselect POWER_PIN_ACTIVE_HIGH

config CAMERA3                                                                                 
    select POWER_PIN_ACTIVE_HIGH                                                         

endchoice                                                                                      

config POWER_PIN_ACTIVE_HIGH                                                                   
    bool "Power pin is high active?"                                                           
    help  Say 'y' if the power pin is high active, 'n' if low active.                          

显然,没有de-select 命令,甚至没有select XXXX = n 命令。

如何实现效果,或者其他方式来实现脚本的目的? 另外,我想隐藏POWER_PIN_ACTIVE_HIGH 选项。选择相机类型时,应自动选择/取消选择。

--更新--

我以不同的方式尝试了它。它正在工作,但Makefile 给了我POWER_PIN_ACTIVE_HIGH 警告的强制选择:

choice                                                                                         
    prompt "Camera type"                                                                       
    default CAMERA1                                                                            

config CAMERA1                                                                                 
    select POWER_PIN_ACTIVE_HIGH                                                               

config CAMERA2                                                                                 
    deselect POWER_PIN_ACTIVE_HIGH

config CAMERA3                                                                                 
    select POWER_PIN_ACTIVE_HIGH                                                         

endchoice                                                                                      

config POWER_PIN_ACTIVE_HIGH
    depends on __HIDDEN_OPTION__                                                                   
    bool "Power pin is high active?"                                                           
    help  Say 'y' if the power pin is high active, 'n' if low active. 

该脚本有效,因为__HIDDEN_OPTION__ 从来都不是配置选项,因此它会导致所有情况下的依赖关系都失败。只有那些强大的select 命令才能覆盖它并选择配置。尽管Makefile 给出了警告,但由于不匹配(从不匹配)__HIDDEN_OPTION__ 条件。

有更好的主意吗?

【问题讨论】:

  • 取消选择是一件坏事(用户的观点):您在没有通知的情况下覆盖了用户的选择。 [发行版更好地处理包依赖关系,但内核配置并不适合所有人)。您应该采用另一种方式:只有在未选择另一个时才能选择(并添加帮助原因)。所以意图很明显。

标签: linux-kernel


【解决方案1】:

最后,我得到了自己的答案:

choice
    prompt "Camera type"
    default CAMERA1

config CAMERA1
    bool "camera1 support"
    select POWER_PIN_ACTIVE_HIGH

config CAMERA2
    bool "camera2 support"

config CAMERA3
    bool "camera3 support"
    select POWER_PIN_ACTIVE_HIGH

config CAMERA4
    bool "camera4 support"

endchoice

config POWER_PIN_ACTIVE_HIGH
    depends on CAMERA1 || CAMERA3
    # or, alternatively, we can say depends on !CAMERA2 && !CAMERA4

    # Since this shows up only when CAMERA1 || CAMERA2, we don't need help,
    # and we don't ask question, just an affirmative statement.
    bool "This camera has an active-high power pin."

然而这个答案,Kconfig 编写者必须小心保持一致。 Another disadvantage is, it does not show "active-low" when one of those active-low power pin cameras is selected.

如果没有更好的答案,我会在几天后接受这个答案。

【讨论】:

    【解决方案2】:

    default和select可以用来实现一样的

    config POWER_PIN_ACTIVE_HIGH
        bool
        default n
    
    config CAMERA1                                                                                 
        select POWER_PIN_ACTIVE_HIGH
    
    config CAMERA2                                                                                 
    

    【讨论】:

    • 但这意味着,对于CAMERA2,用户仍然可以选择POWER_PIN_ACTIVE_HIGH
    • CAMERA2 本身可以被禁用,如果它有这样的依赖。它应该在其 - “选择!POWER_PIN_ACTIVE_HIGH”中提及
    • 使用select !POWER_PIN_ACTIVE_HIGH 时出现语法错误。似乎否定标记 (!) 只能用于depends on 命令等条件。
    • @RobinHsu 用户无法手动选择POWER_PIN_ACTIVE_HIGH,因为它没有提示。
    • 我认为default n 可以省略,因为这是默认默认值。
    猜你喜欢
    • 1970-01-01
    • 2018-06-29
    • 2021-02-09
    • 2017-03-11
    • 1970-01-01
    • 2021-11-13
    • 1970-01-01
    • 1970-01-01
    • 2021-02-22
    相关资源
    最近更新 更多