をを.configに従って任意の効率的な方法があります(おそらくgccのプリプロセッサを乱用することによっては?)の.configに応じて必要とされないすべてのコードが省略されて取り除かカーネルソースのセットを取得するには?ストリップのLinuxカーネルソース
答えて
解決策をいくつか手に入れました。
まず、1は今の
make KBUILD_VERBOSE=1 | tee build.log
grep '^ gcc' build.log
が使用するコンパイラのコマンドを取得することができ、私は更なるステップのために一つだけのgccコマンドラインを選択します。例えば、カーネル/ kmod.cのビルドが、それは次のようになります。
gcc <LIST OF MANY OPTIONS> -c -o kernel/kmod.o kernel/kmod.c
私は今オプション-c
、-o ...
を削除し、-E
を追加し、これコンパイルを無効にすると、画面にプリプロセッサ出力を書きます。さらに、マクロ展開を防ぐために-fdirectives-only
を追加し、-undef
にGNU定義のマクロ定義を削除します。 -nostdinc
は、標準のcヘッダを削除するためにカーネルmakefileによってすでに追加されています。
は今まだ含まので、プリプロセッサ出力の上に展開されています。したがって、私は入力ファイルをgrepを通してパイプで取り除きます:grep -v '#include' kernel/kmod.c
。現在、インクルードファイルは1つだけです:autoconf.hは、Makefileのコマンドラインに含まれています。これは実際には#ifdef CONFIG_...
がアクティブなカーネルコードを選択するために使用するマクロを定義しているので素晴らしいです。
残っているのは、grep -v '^#'
を使用して、プリプロセッサーコメントと残りの#define
をautoconf.hから除外することだけです。
全体のパイプは次のようになります。
grep -v '#include' kernel/kmod.c | gcc -E -fdirectives-only -undef <ORIGINAL KERNEL BUILD GCC OPTIONS WITHOUT -c AND -o ...> - |grep -v '^#'
と結果が実際kmod.o.に構築されたコードを含むカーネル/ kmod.cのフィルタされたバージョンであります
質問は残る:ソースツリー全体のためにそれを行うには?実際にビルドされているが、リンクに使用されずに削除されたファイルはありますか?
すべてをコンパイルし、ファイルが使用されなかったかを調べるためにatimeを使用しています。それはあまり正確ではないかもしれませんが、おそらく試してみる価値があります。
- 1. linux 2.4カーネルソースのダウンロード
- 2. 実装は、Linuxカーネルソース
- 3. Linuxカーネルソースの開始点はどこですか?
- 4. Linuxカーネルソースで見つかった構造体配列のCの初期化メソッド
- 5. カーネルソースとルートの違い
- 6. このカーネルソースは機能しますか?
- 7. Javaのストリップ/
- 8. ストリップ・パイソン
- 9. Cのストリップwavヘッダー
- 10. ストリップは、SOAP XML
- 11. ストリップ。テキストボックスから
- 12. 「コピー中にストリップのデバッグシンボル」と「ストリップはプロダクトをリンクされた」
- 13. ストリップ内のタグをストリップで削除しますか?
- 14. ストリップhtmlタグやコンテンツ
- 15. RAILS、ボタン - 醜いストリップ
- 16. ストリップ正規表現
- 17. MySQLストリップ 'onクエリwhere
- 18. ストリップ、大文字の単語
- 19. ストリップすべての要素
- 20. add_qt_android_apkストリップ共有ライブラリのデバッグシンボル
- 21. 多次元配列のストリップ
- 22. iPhoneアプリケーションのストリップ記号
- 23. Cストリップhtmlの間<...>
- 24. ストリップの特定は、PHPに
- 25. カーネルソースの__SetPageReferencedの定義はどこですか?
- 26. Pythonを使用してLEDストリップ(Adafruit Dotstar RGBストリップ)の輝度を下げる
- 27. Ubuntuカーネルソースのダウンロード中にエラーが発生しました
- 28. 発信URLストリップ文字
- 29. Apache VirtualHost:ストリップwww。 force https
- 30. ファイル名からストリップ./execdir
これは、多くの#ifdefを動作しません...文は、ソースファイル内で評価されているので、未使用のファイルとほとんど未使用のファイルがあまりにもコンパイルされます。 – dronus
@dronus:それは私が考えることができる唯一の簡単な方法です(次は、基本的には、Cプリプロセッサの作成または変更です)。未使用のモジュールやアーチのようなものは取り除かなければなりません。あなたは本当にそれがより正確である必要がありますか?あなたは何を達成しようとしていますか? –
私はちょうどカーネルがどのように動作するかについていくつかの推理可能な概観を得るのが好きですが、100MBのコードを読むことはほとんど不可能です。だから私は最小限のカーネルを構築し、実際に使用されているコードを読むのが好きです。 – dronus