web-dev-qa-db-ja.com

LinuxカーネルのMakefileはどのように.configを理解しますか?

LinuxカーネルのMakefileはどのように.configを理解しますか? defconfigファイルのパーサーはありますか? defconfigから有効なオプションごとに多くの#defineを生成し、.configファイルのディレクティブに基づいてコンパイルされているかどうかに関係なく多くのマイナーなMakefileを維持する必要があります。

3
s.paszko

.configファイルの構文はmakeと互換性があります。たとえば、CONFIG_CRC16=mのような行は、make変数CONFIG_CRC16を値mに設定します。 makeによって解析され、トップレベルのMakefileに間接的に含まれます。

  • Makefileには-include include/config/auto.confが含まれています
  • include/config/auto.confは、Makefileターゲットでトップレベルのsilentoldconfigを再帰的に呼び出すことによって構築されます。

ファイルの条件付きコンパイルは、主にターゲット名で遊ぶことによって行われます。makefileには次のようなルールが含まれます

obj-$(CONFIG_CRC16) += crc16.o

したがって、ターゲットobj-yは、構成オプションによって組み込みとして有効になっているすべてのオブジェクトをビルドし、obj-mは、モジュールとして有効になっているすべてのオブジェクトをビルドします。より複雑な場合のために、メイクファイルには条件付きディレクティブもあります。

C言語での条件付きコンパイルの場合、Cソースファイルにはinclude/generated/autoconf.hのような行を含む#define CONFIG_CRC16_MODULE 1が含まれます。このファイルは、xxxconfigターゲット(oldconfigのバッチターゲットの場合はinclude/config/auto.confxconfigの場合はscripts/kconfig/confなど)によって呼び出されるプログラムによってscripts/kconfig/qconfから生成されます。そのソースコードはscripts/kconfig/confdata.cで、非常に単純なテキスト処理を行います。