CONFIG(9) NetBSD Kernel Developer's Manual CONFIG(9) 名称 config -- 自動コンフィグレーション・フレームワーク ``デバイス定義'' 言語 解説 NetBSD では、config(8) プログラムがカーネルに組み込むデバイスの詳 細を記述した機種毎の記述ファイル(machine description file) を読み 込み検証します。config(8) はテーブルを作成し、カーネルは自動コン フィグレーション(autoconfiguration)(autoconf(9) 参照)の過程で、ハー ドウェアデバイスとデバイスドライバをマッチさせる際のヒント・詳細 情報としてそのテーブルを使用します。 記述ファイルには、デバイス毎に次の項目を記述します。 名前 (Name) 名前は単に英数字の文字列で、最後にユニット番号が付きます (e.g. "sd0", "sd1", ...)。ユニット番号はそのベースデバイ ス名の中で、個々のインスタンスを表し、ベースデバイス名は デバイスドライバと一対一に対応します。デバイスユニット番 号は、ハードウェア仕様には依存しません。 親 (Parent) 全てのデバイスは必ず親を持ちます。親子のペアは "子 at 親" と表記されます。親子関係をリンクすると、有向グラフを構成 します。ルートデバイスは唯一の例外で、親を持ちません。 ロケータ (Locators) ロケータは特定のデバイスの接続場所を指定し、親子のペアを 増大(augment)する為に使います。各ロケータの値は一つの整数 であり、親のバスやコントローラに於けるデバイスアドレス等 を表します。これはメモリアドレス、I/O ポート、ドライバ番 号等であるかもしれません。直接接続をサポートするようなデ バイスの場合、ロケータにワイルドカードを使うことがありま す。 属性 (Attribute) 属性はデバイスとコードの関係を表し、デバイスグラフの形を 決定するのに役立ちます。プレーン属性はデバイスの何らかの 属性を表します。インターフェース属性は ``ソフトウェア・イ ンターフェース'' の種類を表し、そのインターフェースを使う 他のデバイスをサポートする能力を宣言します。インターフェー ス属性はまた、ロケータを補足するため使われます。 自動コンフィグレーションの過程で、有向グラフはツリー構造に変換さ れます。つまり、あるデバイスをルートノードとして、そのルートノー ドから深さ優先でグラフをたどり、デバイスにマッチするドライバをツ リーに追加して行きます。 しかしながら、親子関係作る際には、実際にその組合せを可能とするた めの束縛条件が必要です。この束縛条件は ``デバイス定義(device definition)'' ファイルに埋め込まれています。このマニュアルページ の残りは ``デバイス定義'' 言語の説明と、この言語を使って NetBSD カーネルに新しい機能を追加する方法を示します。 デバイス定義ファイル デバイス定義ファイルは、機種依存(machine-dependent)ファイルと機種 独立(machine-independent)ファイルに分離されます。機種依存ファイル は sys/arch//conf/files. になります。(ここで は NetBSD アーキテクチャ名)。機種独立ファイルは sys/conf/files に なります。このファイルは、sys/dev//files. という機種独 立なドライバ用のファイルを順次インクルードします(ここで は 機種独立バス名)。 これらのファイルは全ての正当なデバイス(legal device)と疑似デバイ ス(pseudo-device)を定義します。これらはまた、全ての属性とインター フェースを定義し、機種記述ファイルの妥当性を決定する規則を制定し、 カーネルをに組み込まれるソースファイルのリストを作成します。 各デバイス定義ファイルは、ステートメントのリストで構成されます。 ステートメントは一般に一行に一つです。`#' から後ろはコメントにな り、空白で始まる行は前の行に継続します。有効なステートメントは次 のものです。 cinclude filename 現在処理中のコンフィグレーションに、filename で示すファイ ルの内容を、条件付きでインクルードします。指定した filename が存在しない場合、警告を表示しますがエラーにはな りません。 defflag [filename] {options} filename で示すファイルの中で定義される、プリプロセッサマ クロ options (空白で区切って複数記述できます)。このステー トメントにより、機種記述ファイル中で FOO (値指定なし) に ついて``options FOO'' と書けるようになります。値を指定し た場合、config(8) でエラーになります。filename が指定され なければ、オプションを小文字化して ``opt_foo.h'' のような ファイル名を使います。option は大文字小文字を区別します。 (訳註: filename は sys/arch//compile//filename として作成される) (訳註: 例 defflag INSECURE defflag opt_pipe.h PIPE_SOCKETPAIR PIPE_NODIRECT ) defparam [filename] {options} filename で示すファイルの中で定義される、プリプロセッサマ クロ options (空白で区切って複数記述できます)。このステー トメントにより、機種記述ファイル中で ``options FOO=bar'' または ``options FOO="\"com\""'' と書けるようになります。 値の指定がない場合、config(8) でエラーになります。 filename が指定されなければ、オプションを小文字化して ``opt_foo.h'' のようなファイル名を使います。option は大文 字小文字を区別します。 (訳註: 例 defparam MAXUPRC defparam opt_dump.h DUMP_ON_PANIC ) defopt [filename] {options} filename で示すファイルの中で定義される、プリプロセッサマ クロ options (空白で区切って複数記述できます)。このステー トメントは defflag と defparam の両方の記述形式を可能にし、 config(8) は ``options FOO'' が値を持っても持たなくてもエ ラーにしません。それゆえに defopt ステートメントの使用は 奨励されません。代わりに defflag と defparam ステートメン トを使用しましょう。filename が指定されなければ、オプショ ンを小文字化して ``opt_foo.h'' のようなファイル名を使いま す。option は大文字小文字を区別します。 deffs [filename] name ファイルシステム name を定義します。 (訳註: 例 deffs OVERLAY deffs fs_kernfs.h KERNFS ) devclass name デバイスクラス name を定義します。デバイスクラスは属性に 似ています。 (訳註: 例 devclass disk ) define name [{locators}] (訳註: ここで { } はリテラル) 属性 name を定義します。デバイス定義でその属性名を参照で きます。属性がインターフェース属性で、かつ、オプションの locators が指定されると、この属性 name を参照するデバイス 属性は、インターフェースを共有し同じロケータを持つことが 仮定されます。 (訳註: 例 define midibus { } define midisyn define ata {[channel = -1]} define scsi {[channel = -1]}: scsi_core define wsemuldisplaydev {[console = -1], [kbdmux = 1]} ) device name [{locators}]: [attributes] デバイス nameを定義します。オプションのロケータ locators を要求します(locators はコンマ区切り)。オプションの attributes は属性の依存関係を定義します。 (訳註: 例 device audio device ld: disk device cac {unit = -1} device siop: scsi,siop_common ) attach name at interface [with ifname]: [attributes] デバイス name を定義し、インターフェース interface をサポー トします。ifname を指定すると、デバイス name のドライバと のインターフェースを指定することになります(詳細は driver(9) 参照)。オプションの attributes は属性の依存関係 を定義します。 (訳註: 例 attach wdc at mainbus with wdc_mb: mbdma ) defpseudo name: [{locators}] 疑似デバイス name を定義します。オプションで locators を 定義することもできますが、どんなデバイスも疑似デバイスに attach することはできないので、ほとんど意味がありません。 (訳註: 例 defpseudo cgd: disk, des, blowfish, cast128, rijndael ) file pathname [attributes [flags]] [rule] ファイル pathname を、カーネルをビルドするために必要なファ イルのリストに追加します。属性を指定しない場合、ファイル は常にカーネルコンパイルに追加されます。もし属性のいずれ かが、機種記述ファイルに書かれた他のデバイスによって指定 されている場合、ファイルはコンパイルに含まれます。そうで なければ、ファイルは省略されます。オプションの flags に指 定可能な値は次の通りです。 needs-count 各々の属性について、個々のデバイスまたはデバイス セットがいくつコンフィグされたかをドライバに通知 します。このフラグを指定すると、使用されるドライ バ数を、コンパイル時にドライバが知ることができま す。このオプションは自動コンフィグレーション・ク ローニングを防ぎます。 needs-flag このフラグは needs-count と同じですが、デバイス数 が 非 0 であるかどうかだけを記録します。カウント 数は厳密でないので、needs-flag は自動コンフィグレー ション・クローニングを防げません。 (訳註: 例 file miscfs/overlay/overlay_vfsops.c overlay file dev/ld.c ld needs-flag file dev/ic/isp_target.c isp & isp_target_mode file dev/ic/dp8390.c dp8390nic | ipkdb_dp8390 ) device-major name char [block] [attributes] キャラクタデバイススイッチ name をキャラクタ・メジャー・ デバイス番号に関連づけ、カーネルをビルドする際、デバイス スイッチのリストに追加します。もし block を指定すると、ブ ロック・メジャー・デバイス番号に関連づけたブロックデバイ ススイッチも追加します。もし全ての attributes が、機種記 述ファイル中のデバイスによって指定されているならば、デバ イススイッチをカーネルコンパイル時に追加します。そうでな ければ追加しません。 (訳註: 例 device-major crypto char 160 crypto device-major md char 24 block 17 md ) include filename 現在処理中のコンフィグレーションに、filename で示すファイ ルの内容をインクルードします。指定した filename が存在し ない場合、config(8) はエラーで終了します。 package filename プリフィクスを filename のディレクトリに変更し、filename の内容を処理し、元のプリフィクスに戻って来ます。これは以 下と等しいシンタックスシュガーです。 prefix dirname(filename) include basename(filename) prefix prefix [dirname] dirname を指定すると、それをプリフィクススタックのトップ にプッシュします。以降、オプション file 経由で指定された ファイルは、その filename の前にプリフィクスを付加して処 理されます。dirname が指定されない場合、プリフィクススタッ クをポップ(取り除く)します。 機種記述ファイルでロケータをワイルドカードにするためには、属性定 義でそれらのデフォルト値を定義しなければなりません。機種記述ファ イル内全体でロケータを省略可能にするには、ロケータを角かっこ [ ] で囲みます。あるデバイスにとって、あるロケータが意味をなさない時、 しかしソフトウェアインターフェースにとってはそれらが必要とされる 場合、この機能が必要になります。 コードリファレンス このセクションでは、NetBSD ソースツリー内で、実際に自動コンフィグ レーション・フレームワークを使ったコード実装や、使用例の存在する 場所を示します。全てのパス名は /usr/src からの相対パスです。 デバイス定義ファイルは sys/conf/files、 sys/arch//conf/files.、sys/dev//files. にあ ります。 機種記述ファイルの文法は、config(8)、usr.sbin/config/gram.y を参 照して下さい。 関連項目 config(8), autoconf(9), driver(9) Building 4.4 BSD Systems with Config. Chris Torek, Device Configuration in 4.4BSD, 1992. 歴史 自動コンフィグレーションは 4.1BSD で登場しました。自動コンフィグ レーション・フレームワークは 4.4BSD で全面的に改修されました。 NetBSD では、バス独立(bus-independent)ドライバとバス依存 (bus-dependent) attachment をサポートする為に変更されました。 NetBSD 3.1 August 19, 2003 NetBSD 3.1 $Id: config.0,v 1.3 2007/07/12 02:47:01 candy Exp candy $