2017-01-15 10 views
1

2つの低レベルオプションを持つカーネルモジュールを作成しています。これらの2つのオプションはどちらもM/Y/Nとして選択できますが、少なくとも1つを選択する必要があります。そうでないと、モジュールは機能しません。ただ、以下のように:LinuxカーネルのKconfig項目を定義するには、少なくともサブオプションの1つを選択して動作させる必要がありますか?

[*] Enable FOO support      
     <M>  Back-end A 
     <M>  Back-end B 

私は以下のようにそれを書くが、両方の2つのサブオプションが選択されていないことができます。

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でこのような設定を書き込む方法はありますか?両方のバックエンドABを想定すると、

答えて

1

が同時にでカーネルにロードすることはできません、choice構成エントリはそこに最高のようだ:

choiceの挙動はDocumentation/kbuild/kconfig-language.txtに記述されている
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 

ブール値の選択では、単一のコンフィグレーションエントリが に選択されますが、トリスタットまた、任意の数のconfigエントリ を 'm'に設定することもできます。これは、単一のドライバの複数のドライバが存在し、単一のドライバだけがカーネルの にコンパイル/ロードされる場合に使用できますが、すべてのドライバはモジュールとしてコンパイルできます。

tristateでの使用choiceの例:sound/soc/davinci/Kconfig

+0

おかげで、それが動作します。ちょっとした問題は、ユーザーが使用できないビルドにつながるすべてのバックエンドを選択解除できることです。しかし、とにかく、それは、それを選択するようにユーザーを促すことができ、そのユーザーのブーイング。 –

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 
+0

別の良いアイデアは、少なくとも1つのバックエンドが選択されたときにFOOのみを表示させることができるかもしれません。 –

関連する問題