カーネルが構成されたら、どのファイルがどの順序でコンパイルされるかを知ることができるかどうか知りたいです。
アーキテクチャによるビルドプロセスのバリエーションに興味があり、アーキテクチャほど多くのツールチェーンを持ちたくないので、それを知りたいです...
ありがとう
カーネルが構成されたら、どのファイルがどの順序でコンパイルされるかを知ることができるかどうか知りたいです。
アーキテクチャによるビルドプロセスのバリエーションに興味があり、アーキテクチャほど多くのツールチェーンを持ちたくないので、それを知りたいです...
ありがとう
完全な編集:
カーネルソースの Make プロセスを変更して使用できます
-n, --just-print, --dry-run, --recon
これの最終的な結果は、コンパイラまたは実行可能ファイルが呼び出されないことです。それはただそれを偽造し、それが何をするかをあなたに伝えます。
オプションを選択し、ソースをビルドせずにそこからファイルを grep します。これは、上記のオプションを使用するようにシェルで MAKE 環境を設定するのと同じくらい簡単かもしれません。次に、.c および .h ファイルに関連するすべてのコンパイラ コマンドを grep します。2.6.29.2 のカーネル ソースをダウンロードして、これを行う方法を確認します。これから編集。
幸運を
乗り方を投稿してください。たぶんシェルスクリプトを投稿してください!:)
フォローアップ:
/2.6.19.2/Makefile に含まれる 2.6.29.2 カーネル ソースコードの 13 行目
# Do not:
# o use make's built-in rules and variables
# (this increases performance and avoids hard-to-debug behaviour);
# o print "Entering directory ...";
MAKEFLAGS += -rR --no-print-directory
# We are using a recursive build, so we need to do a little thinking
# to get the ordering right.
変数を編集しMAKEFLAGS
て dryrun フラグを含めると、特定の make 構成の出力を保存し、後で grep できるようになります。ala make > save.txt
私は私のものを
MAKEFLAGS += -rR --no-print-directory --just-print
例(もっと良いかもしれません):
[aiden@host linux-2.6.29.2]$ \
make > build_out.txt; grep -o -E "[a-zA-Z0-9_-]+\.[ch]" build_out.txt
完璧ではありませんが、ハックな方法で私のために働いたので、うまくいくはずです。同じ基本的なプロセスが、構成されたカーネルを使用したブラインド メイクの後に適用されることを願っています。
警告 アーキテクチャ固有のツールチェーンを維持したり、ターゲット アーキテクチャで Make を実行したりしないと、ASM およびアーキテクチャ固有のファイルの一部が実際のビルドと異なります。
コメントから編集
ld の失敗を抑えるには、カーネルの make ファイルで次のセクション (または類似のセクション) を見つける必要があります。
# Make variables (CC, etc...)
AS = $(CROSS_COMPILE)as
LD = $(CROSS_COMPILE)ld
CC = $(CROSS_COMPILE)gcc
CPP = $(CC) -E
AR = $(CROSS_COMPILE)ar
前の手順 (dry-run からのパイピングと grep) で使用されたソース ファイルを列挙する前に、構成手順を実行してソースを構成する必要があるためMakefile.enum
、通常の構成を実行した後に編集して使用することができます。手順 (アーキテクチャに関係なく、いくつかの config.h-type ファイルを生成する必要があります。したがって、実際のコンパイル、モジュール、およびすべてを実行しようとしている時点までカーネル ソースを取得します)。うわー!
ソースファイルを列挙するためにfake-makeを実行しているときに、カーネルソース構成(ドライバー/モジュールなどを指定します)を投稿すると、発見したようにLDが失敗します。から LD を変更できます。
LD = $(CROSS_COMPILE)ld
に
LD = -$(CROSS_COMPILE)ld
「-」文字に注意してください。これは Makefile に警告を無視するように指示します。あなたがやろうとしていることは明らかに異常ですが、非常にクールです:) Makefileセクションを見つけて実行されたコマンドを調整することで、さらにエラーを抑えることができます。後で IF ステートメントを変更する必要があるかもしれないので、Makefile に慣れ親しむことをお勧めします。すべてを整理すると、.c ファイルを吐き出す「ダム」メイクファイルが作成されるので、次のことができます。
make | grep -E "[a-zA-Z0-9_-]+\.[ch]"
または何でも。
結果を検証するためのクールな提案もあります...実際にカーネルを構築します...ただし、Linuxのinotify APIを使用します(ここでPythonバインディングを取得できますhttp://pyinotify.sourceforge.net/)およびファイルシステムイベントを監視しますコンパイル ウィンドウ (gcc によって読み取られる .c ファイルなど)。次に、これを「ダム」メイクファイルのリストと比較します。
わかりました、ワッフルになりすぎていないことを願っています! 幸運を