kconfig-language.txt(for linux-2.6.23.8) (日本語訳) 訳注: 超意訳。間違っていても知りません。 間違いのご指摘は歓迎いたします。 訳文の更新履歴 -------------- 11/20/2007 すずきかつひろ はじめに -------- カーネルの設定データベースは以下のようなツリーで構成されるコンフィグ オプションの集まりです。 +- Code maturity level options | +- Prompt for development and/or incomplete code/drivers +- General setup | +- Networking support | +- System V IPC | +- BSD Process Accounting | +- Sysctl support +- Loadable module support | +- Enable loadable module support | +- Set version information on all module symbols | +- Kernel module loader +- ... 各項目は依存性を持っています。項目を表示するときにこれらの依存性を 利用します。子項目は親項目が見えていないと見えません。 メニュー項目 ------------ ほとんどの項目はコンフィグオプションの定義で、他の項目は項目をまとめるために あります。 単一のコンフィグオプションは以下のように定義できます: config MODVERSIONS bool "Set version information on all module symbols" depends on MODULES help Usually, modules have to be recompiled whenever you switch to a new kernel. ... どの行もキーワードから始まって、その後に複数の引数が続きます。 キーワード "config" は新たなコンフィグの項目を意味します。それに続く行はこの コンフィグオプションの属性を定義しています。属性はそれぞれ、コンフィグの型 と見出し(訳注: 2行目)、依存する項目(訳注: 3行目)、ヘルプに表示される文 (訳注: 4行目以降)と、デフォルトの値(訳注: 例には載って無い)です。 コンフィグオプションは同じ名前で何回でも定義できますが、一つの項目にされます。 そのとき型が異なってはいけません。 メニューの属性 -------------- メニューの項目はいくつもの属性を持っていますが、どこでも全ての属性を使える わけではありません(構文の章を見てね)。 - 型の定義: "bool"/"tristate"/"string"/"hex"/"int" どのコンフィグオプションも必ず型を決めなければなりません。基本的には "tristate" と "string" の二つの型です。他の型はこれら二つを基礎にしています。 型の定義では見出しの設定も受け付けます。 以下の二つの例は等価です: bool "Networking support" and bool prompt "Networking support" - 見出し: "prompt" ["if" ] メニュー項目にはユーザに対して表示する見出しを一つだけ設定できます。もし この見出しだけに対する依存関係がある場合は、"if" とともに条件を指定して ください。 - デフォルト値: "default" ["if" ] コンフィグオプションにはいくつものデフォルト値を設定できます。二つめ以降の デフォルト値が表示されるためには、最初のデフォルト値がアクティブでないとなり ません。デフォルト値はメニュー項目を定義した場所にしか書けないというわけでは ありません。別の場所に書いたり、事前に定義した値を上書きしたり出来ます。 デフォルト値はユーザが何も値を設定しなかった(上記の "input prompt" で) ときに、コンフィグオプションに割り当てられます。もし見出しが見えていれば、 ユーザに対してデフォルト値が表示され、ユーザは値を上書きできます。 もしこのデフォルト値だけに対する依存関係がある場合は、"if" とともに条件を指定 してください。 - 依存関係: "depends on"/"requires" これはメニュー項目の依存関係を定義します。もし複数の依存関係を定義したいなら、 '&&' で繋げてください。依存関係はメニュー項目の属性全て("if" も含め)に適用 されます。 そのため以下の二つは等価です: bool "foo" if BAR default y if BAR and depends on BAR bool "foo" default y - 逆依存関係: "select" ["if" ] 通常の依存関係がシンボルの上限を決める(以下を見てね)とするなら、 逆依存関係は他のシンボルの下限を決めるのに使えます。現在のメニュー項目から 他のシンボルに対して最小値 を設定できます。もし が複数選 ばれたら、その中でもっとも大きな値を最小値に選びます。 逆依存関係は "boolean" か "tristate" のシンボルにしか使えません。 注意: "select" は危険です。"select" は依存関係を検査しないで強制的に他のシン ボルを 'y' にしてしまうでしょう。だから "select" を使うと FOO が依存し ている BAR が有効でないにも関わらず、FOO を有効にしてしまう、という悪用 ができてしまいます。通常の利用では "select" は見えないシンボル(見出し がどこにもない)に使うか、依存関係のないシンボルに使います。これは利便 性がなくなりますが、一方でおかしなコンフィグが設定されるのを回避できま す。kconfig はいつかそのことを警告すべきです。 - 数値の範囲: "range" ["if" ] これは "int" あるいは "hex" で入力される数値の範囲を制限できます。一つめの 数値より大きいあるいは等しい値から、二つめの数値と等しい値までの数字だけを ユーザから受け取ります。 - ヘルプの文章: "help" or "---help---" これはヘルプの文章を定義します。ヘルプの文章の終わりはインデントのレベルで 決まります。つまり最初の行より少ないインデントの行で終わるということです。 "help" も "---help---" も動作になんら違いはありません。"---help---" を使うと 設定ファイルのロジックを視覚的に区切る事ができて、設定ファイルを書き直そうと する開発者の手助けになります。 メニューの依存関係 ------------------ 依存関係はメニュー項目の表示/非表示と、"tristate" のシンボルの入力範囲を限定 します。"tristate" は普通の "boolean" に加えてさらにモジュール状態を表すため に使います。 依存関係は以下の構文で表されます: ::= (1) '=' (2) '!=' (3) '(' ')' (4) '!' (5) '&&' (6) '||' (7) 式は以下の優先順位(優先度が高い順)に並んでいます。 (1) シンボルを式に変換します。"boolean" と "tristate" シンボルは単純にそれぞれ の持つ値に変換されます。他の型のシンボルであれば結果は 'n' になります。 (2) もし二つのシンボルの値が等しければ 'y' を、そうでなければ 'n' を返します。 (3) もし二つのシンボルの値が等しければ 'n' を、そうでなければ 'y' を返します。 (4) 式の値を返します。式の優先度を変えるために使います。 (5) 2 - (式の値) を返します。 (6) 二つの式の最小値を返します。 (7) 二つの式の最大値を返します。 式は値 'n', 'm', 'y' を取ります(計算するときはそれぞれ 0, 1, 2 です)。 メニュー項目は式の評価値が 'm' または 'y' のときに表示されます。 シンボルの型は二つあります: 定数シンボルと非定数シンボルです。非定数シンボル は一般的なシンボルで、"config" 行で定義します。非定数シンボルはアルファベット か数字か下線(underscore)から成ります。 定数シンボルは式の一部にしか使えません。定数シンボルは常にシングルクォート あるいはダブルクォートに囲まれています。クォートの内側では他のどんな記号でも 使えますし、クォートも '\' を使ってエスケープすれば使えます。 メニューの構造 -------------- ツリー内でのメニュー項目の位置を決めるには二つの方法があります。 一つは以下のように明確に指定します: menu "Network device support" depends on NET config NETDEVICES ... endmenu "menu" と "endmenu" ブロック内の全ての項目は "Network device support" の サブメニューとなります。"menu" の依存性は全てのサブメニューに引き継がれま す。 この例なら、依存関係 "NET" がコンフィグオプション NETDEVICES の依存関係 リストに追加されるわけです。 他の方法というのは、依存関係を解析してメニューの構造を生成する方法です。 あるメニュー項目とそれ以前のメニュー項目になんらかの依存関係があるなら、 そのメニュー項目はサブメニューにします。はじめに以前のシンボル(親となる シンボル)が依存関係リストに出てこなければならず、以下の二条件の内一つが 必ず成り立ちます。 - 親となる項目が 'n' なら、子となる項目は非表示です - 親となる項目が表示されているなら、子となる項目も表示されています。 config MODULES bool "Enable loadable module support" config MODVERSIONS bool "Set version information on all module symbols" depends on MODULES comment "module support disabled" depends on !MODULES MODVERSIONS は直に MODULES に依存しています。これは MODULES が 'n' 以外なら MODVERSIONS が表示されることを示しています。一方でコメント "module support disabled" は、MODULE が表示されていても表示されます。MODULES の空の依存関係 もコメントの依存関係の一部であるからです。 (訳注: 英語の意味が意味がよくわかりません。実際に試すと、MODULES が 'y' か 'm' のとき comment は消えます。) Kconfig の構文 -------------- 設定ファイルには一連のメニュー項目(ヘルプの文章を除いてどの行もキーワードで 始まる)を記述しています。 以下のキーワードがメニュー項目を終わらせます: - config - menuconfig - choice/endchoice - comment - menu/endmenu - if/endif - source 上から五個まではメニュー項目の定義です。 config: "config" "config" はシンボル を定義します。その後に属性を続けて書く事もでき ます。 menuconfig: "menuconfig" これは単純な "config" 項目と似ていますが、フロントエンドにヒントを与えていま す。この項目のサブ項目は全てバラバラのオプションとして表示すべきです。 choices: "choice" "endchoice" "choice" はグループの選択を定義します。この後に属性を続けて書くことも出来ます。 "choice" は "bool" か "tristate" 型でなければなりません。"bool" 型ならば、 一つのコンフィグ項目だけを選択でき、"tristate" 型ならばいくつでもコンフィグ項目 を 'm' にできます。これは一つのハードウェアに対して複数のドライバがあって、その うちの一つしかコンパイルできない(あるいは一つしかカーネルにロードできない)です が、全てのドライバをモジュールとしてコンパイルすることができる、というときに使い ます。 "choice" はオプション "optional" が使えます。このオプションを使うと、項目を一つも 選択しなくても良い "choice" が作れます。 comment: "comment" "comment" はユーザが設定しているの間、ユーザに対して表示するコメントを定義し ます。コメントは出力ファイルにも書かれます。 "comment" で使えるオプションは依存関係だけです。 menu: "menu" "endmenu" "menu" はメニューのブロックを定義します。詳しくは上にある「メニューの構造」を 見てね。使えるオプションは依存関係だけです。 if: "if" "endif" "if" ブロックを定義します。ブロック内のメニュー項目に対して式 である 依存関係を加えます。 source: "source" 指定した設定ファイルを読みます。このファイルは常にパースされます。