10

現在、カーネル モジュールを開発していますが、ビルド時間が気になり始めています。副作用として、ビルド中に「コーヒー」ブレイクが多すぎます。

そこで、自分のプラットフォームに必要なものだけを構築する方法を探していました。「Linux カーネルの概要」の第 7 章と第 8 章では、手動で行う方法について詳しく説明されています。その良い読み物: http://www.kroah.com/lkn/

しかし、私は内容を理解していますが、これを機能させるにはまだ多くの調整が必要です.

2.6.32 以降のカーネルでは、新しいターゲットが追加されましたmake localmodconfiglsmod.configをスキャンして適切に変更します。それで、私は自分の「自動化」を見つけたと思いました。しかし、この perl スクリプトにも問題があります。

このスレッドは問題を説明しています: https://bbs.archlinux.org/viewtopic.php?pid=845113

make のターゲットを使用する代わりに、スクリプトを直接実行するという、明らかに他の人のために機能する提案された解決策もありました。

私にとっては、make localmodconfig はまったく機能しません。その理由は次のとおりです。

make clean
make mrproper
cp /boo/config-'uname -r' .config
make localmodconfig

そしてそれはで止まります

vboxguest config not found!!
nf_defrag_ipv6 config not found!!
vboxsf config not found!!
vboxvideo config not found!!

問題は、カーネル開発環境が virtualbox 内にあることです。これらの vbox モジュールは、「virtualbox guest addtion」のインストールを選択したときにインストールされました。

また、netfilter モジュールはディストリビューション固有のモジュールである可能性があります (多くの netfilter モジュールはメインライン カーネルの一部ではないため、私にはショックではありません)。これはメインライン カーネルには含まれていません。

回避策として、これらのモジュールを明らかにアンロードして再試行します。streamline_config.plしかし、ユーザーが必要に応じて特定のモジュールを除外できるようにするためのパッチがあるかどうかを考えています。問題は、私はperlについてまったく知識がなく、そのように気に入っていることです。

だから私の問題を一言で言えば

  1. パッチを適用streamline_config.plして、構成ファイルの処理から除外するモジュール名のリストを引数として指定できるようにします。

    スクリプトはkernel.orgにあります

  2. 編集: perl スクリプトが実行されていないことに関する内容を削除しました。無限ケンイチが指摘したように(私はどれほど愚かでしょうか?). しかしlocalmodconfig、ソース ツリーの下にいくつかのモジュール コードがないため、まだ make は機能しません。パッチ適用streamline_config.plはまだ有効な要件です。

4

1 に答える 1

10

最小のカーネルイメージをビルドしようとしている他の人も、ビルド時間の短縮を求めている場合は、次のことを行う必要があります。

1)ソースツリーに配布カーネル構成をコピーします。以下のいずれかのコマンドで実行できます。

$zcat /proc/config.gz > .config

また

$cp /boot/config-'uname -r' .config

2)localmodconfigターゲットを使用します。

$make localmodconfig

lsmodこの時点でロードされているモジュールを見つけるために使用します。次に、ディストリビューションの.configを検索して、それらを有効にし、他を無効にします。

それが常に完璧に機能するとは限らないことを知っておくことが重要です。したがって、を使用して構成をさらに微調整する必要がありますmake menuconfig。一部のモジュールはまだビルド済みとしてマークされていますが、実際にはシステムには不要です。

ツリーモジュールが不足していると、makelocalmodconfigが失敗する場合があります。その場合は、2つの方法でその問題を回避できます。

a)ツリーモジュールからアンロードして、再試行make localmodconfigします。b)perlスクリプトを直接実行します。

$chmod +x script/kconfig/streamline_config.pl
$perl script/kconfig/streamline_config.pl > .config

ccache3) [1]をインストールします。ビルド時間が劇的に改善されます。オブジェクトをキャッシュします。したがって、後続のビルドが削減されます。

ccacheがディストリビューションのリポジトリに含まれている可能性があるため、apt-getまたはを介してインストールできますyum。CentOSでは、EPELリポジトリで利用できます。[2]

4)ビルドジョブにできるだけ多くのコアを提供します

$make -j8 CC="ccache gcc"

私の結果は:

real 3m10.871s
user 4m36.949s
sys 1m52.656s

[1] http://ccache.samba.org/ [2] http://fedoraproject.org/wiki/EPEL

于 2012-07-14T11:41:53.897 に答える