JF Linux Kernel 2.4 Documentation: /usr/src/linux/Documentation/smart-config.txt

smart-config.txt

スマートな CONFIG_* 依存関係処理 [プレインテキスト版]


スマートな 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 付属文書一覧へ戻る