Linux Kernel 2.4 Documentation:
/usr/src/linux/Documentation/smart-config.txt
smart-config.txt
スマートな CONFIG_* 依存関係処理
[プレインテキスト版]
- 原著作者: Michael Chastain <mec@shout.net> Werner Almesberger <almesber@lrc.di.epfl.ch> Martin von Loewis <martin@mira.isdn.cs.tu-berlin.de>
- 翻訳者: 川崎 貴彦 <takahiko(a)hakubi.co.jp>
- バージョン: 2.4.29
- 翻訳日時: 2004/04/15
スマートな CONFIG_* 依存関係処理
1999 年 8 月 1 日
Michael Chastain <mec@shout.net>
Werner Almesberger <almesber@lrc.di.epfl.ch>
Martin von Loewis <martin@mira.isdn.cs.tu-berlin.de>
次のような問題があります。
drivers/net/foo.c が次のような記述を含んでいたとしましょう。
#include <linux/config.h>
...
#ifdef CONFIG_FOO_AUTOFROB
/* 自動で何かをおこなうコード */
#else
/* 手作業でおこなうことのみ */
#endif
...
#ifdef CONFIG_FOO_MODEL_TWO
/* モデル II 用のコード */
#endif
今、ユーザ (カーネルをビルドする人) が関連のない項目を変更するように
再設定をおこなうとしましょう。この作業で、include/linux/autoconf.h
ファイルが再生成されるので、include/linux/config.h が古いものとなり、
結果として drivers/net/foo.c が再コンパイルされることになります。
ほとんどのカーネルソースコード、おそらく 80% くらいは、少なくとも
どこかに一つは CONFIG_* 依存を持っています。そのため、何か一つでも
CONFIG_* 設定項目を変更すると、ほとんど全てのカーネルソースコードの
再コンパイルが必要になってしまいます。
解決方法は次のようになります。
依存関係生成プログラム mkdep.c を、よりスマートにしました。次の
ような依存関係行
drivers/net/foo.c: include/linux/config.h
を生成するかわりに、現在は次のような依存関係行を生成します。
drivers/net/foo.c: \
include/config/foo/autofrob.h \
include/config/foo/model/two.h
これによって、drivers/net/foo.c は、自身が実際に使用する CONFIG_*
行のみに依存することになります。
新しいプログラム split-include.c は、コンパイル処理 (make bzImage
または make zImage) の始めに実行されます。split-include は include/
linux/autoconf.h を読み込み、include/config/ ツリーを更新し、一つの
オプションごとに一つのファイルを書き出します。split-include は、
変更になったオプションに対応するファイルのみを更新します。
mkdep.c が、欠けている <linux/config.h> 行または不必要な <linux/
config.h> 行に対する警告メッセージを生成することは、もうありません。
トップレベルの新しいターゲット 'make checkconfig' で、これらの問題の
チェックをおこなえます。
フラグ依存関係
Martin Von Loewis は、今回のパッチにもう一つの機能 'フラグ依存関係'
を提供してくれました。考え方は、.o ファイルは、それをビルドする時に
使用されたコンパイルフラグに依存する、というものです。ファイル foo.o
では、そのフラグは .flags.foo.o に保存されます。
ユーザが、foo ドライバを常駐型からモジュール型へと変更するとしましょう。
'make' は、現在の foo.o が -DMODULE 付きでコンパイルされていないことを
認識し、foo.c を再コンパイルします。
C ソースコードから作成される全ての .o ファイルは、フラグ依存関係を
持ちます。ld で作成される .o ファイルと ar で作成される .a ファイルも
同様です。しかし、アセンブリソースコードから作成される .o ファイルは
フラグ依存関係を持ちません (現在は誰も必要としていませんが、これを
修正するのは価値あることでしょう)。
ソースファイルごとのフラグ
フラグ依存関係は、ソースファイルごとのフラグとともに使っても機能
します。次のように、個々のソースファイルごとにコンパイルフラグを
指定することができます。
CFLAGS_foo.o = -DSPECIAL_FOO_DEFINE
これは、drivers/net/Maefile, drivers/scsi/Makefile, およびその他
幾つかの Makefile をきれいにするのに役立つでしょう。
謝辞
Werner Almesberger は、原型となるアイディアを出し、 このパッチの
最初のバージョンを作成しました。
Michael Chastain はそれを引き継ぎ、開発を続けました。彼は現在、
第一の開発者であり、メンテナーです。バグは彼に報告してください。
Martin von Loewis は、フラグ依存関係処理を作成し、Michael Chastain
はそれらを修正しました。
全てのβテスターに感謝します。
------------------------------------------------------------
翻訳団体: JF プロジェクト < http://www.linux.or.jp/JF/ >
翻訳日: 2004/04/15
翻訳者: 川崎 貴彦 <takahiko(a)hakubi.co.jp>
校正者: 武井 伸光 <VEC05526(a)nifty.ne.jp>
Linux カーネル 2.4 付属文書一覧へ戻る