FreeBSD ハンドブック : カーネルコンフィグレーションの新しいオプションを追加する : ではどのようにして追加するのでしょう?
Previous: そもそもカーネル オプションって何?
Next: カーネルデバッグ

19.2. ではどのようにして追加するのでしょう?

最初に sys/conf/options (または sys/i386/conf/options.<arch>, たとえば sys/i386/conf/options.i386) を編集し, 新しいオプション を含めるのに最適な opt_foo.h ファイルを選びます.

新しいオプションの必要がなくなったとしたら, これを取り除きます. たとえば, SCSI サブシステムに関するすべてのふるまいについてのオプション の変更は opt_scsi.h に入れられます. デフォルトでは, 適切 なオプションファイルに単に記述されます. たとえば FOO であれば 値は対応するファイルの opt_foo.h に格納されます. これは右端に別 のファイル名を書いて置き換えることができます.

新しいオプションを加えるのに使えそうな opt_foo.h がない場合は新しい名前を作ってください. 意味のある名前を作り options[.<arch>] ファイル に新しいセクションのコメントをつけてください. config(8) は自動的 に変更を検出して, 次の実行からは (訳注: 新しい .h) ファイル を作ります. ほとんどのオプションはヘッダファイルに入れられます.

大量のオプションを一つの opt_foo.h にまとめると コンフィグファイルの一つのオプションを変更したときに多くのファイルが 再コンパイルされる原因になります.

新しいオプションに依存するカーネルファイルは最終的には見つけ出 されます. ただし, オプションを作っただけで対応するソースがどこにも ない場合は別です.

        find /usr/src/sys -name type f | xargs fgrep NEW_OPTION

オプションに対応するソースを見つけるのに上記のコマンドは便利です. 見つけたすべてのファイルで編集, 追加をおこないます.

#include "opt_foo.h"

ファイルの先頭の, すべての #include <xxx.h> より前に入れます. この場合, オプションによって次のようにしてデフォルト値 を持たせている標準のヘッダファイル内の値を置き換えるため, 順番は非常に 重要です.

#ifndef NEW_OPTION
#define NEW_OPTION (something)
#endif

システムヘッダファイル (たとえば /usr/include/sys/ にある ファイル) をオプションで置き換えることは, ほとんどの場合で失敗します. そうすると, ヘッダファイルを深刻な状態に破壊してしまうので, include しないとオプションの値によって不整合が起きてしまう場合を除き, それらの ファイルに opt_foo.h を include しないでください. そう, 現在このような例がいくつか存在していますが, 必ずしも正しい方法 ではありません.


FreeBSD ハンドブック : カーネルコンフィグレーションの新しいオプションを追加する : ではどのようにして追加するのでしょう?
Previous: そもそもカーネル オプションって何?
Next: カーネルデバッグ
FreeBSD Home Page
www@freebsd.org
Updated May 23, 1997