カーネルのビルド時間を短縮する技
カーネルのパッチを当てるようになって、困るのがビルド時間。。。一回一時間以上かかるので少しでも短縮したいと思い、色々調べました。
参考にしたHP
linux kernelのmakeターゲットについてのあれこれ
ccache でビルド高速化。と設定のポイント
ビルドを早くする方法
速いPCでビルドする。
当たり前のことですが、、、性能の良いPC、メモリやSSDを搭載したPCを使った方が早いです。
ビルド後に作成されたdebパッケージをコピーしてdpkgでインストールすれば動くので、母艦PCでビルドしてノートPCで使うといったことができます。
参考 ビルド時間
AtomZ8700のキングジムポータブックXMC10だと4時間かかりますが、Corei7 920(2.66GHz、4コア8スレッド)メモリ16GB、SSDの環境でビルドすると1時間で済みます。
モジュールを最小限にする。
Linuxカーネルは、汎用に作られているので使わないモジュールもコンパイルしてしまいます。
それを必要最小限にすることによってビルド時間を短縮できます。
★デメリット★
- ビルドした以降に新しい周辺機器を接続しても使えない場合もあり。
- .configのオプションがyのものは変更できない。(mのものだけ。)
- 他の構成のPCでは使えない。
手順
他のPCでビルドする場合で説明します。
①カーネルを使うPCに使用する周辺機器を全部接続する。
余計なドライバを入れないようにビルドするので接続してから下記の手順へ進んでください。
②lsmodを実行する。
lsmod > lsmod.txt
③lsmod.txtをビルドするPCのカーネルソースフォルダにコピー
④カーネルソースフォルダ直下で下記のコマンドを実行
LSMOD=lsmod.txt make localmodconfig
⑤ビルドする。
変更したソースのみビルドしてみる。
全体をビルドする前に自分が変更したソースのみコンパイルが通るかどうか時間短縮できます。
例えば、driver/mmc/core/core.cというソースをビルドしたい場合は下記のようにします。
make driver/mmc/core/core.o
★注意★makeの対象はオブジェクトなので*.oです。
ccacheを使う
修正時に何度も何度も再ビルドする際に有効な方法です。一回しかビルドしない方は効果がありません。1回目のビルドは通常の速さですが、2回目以降はキャッシュを利用するのでビルドが早くなります。
ccacheの使い方
①インストール
sudo apt-get install ccache
②.bashrcの変更
★カーネルのビルドはrootで行うのでsudo -sでrootになっておきます。
(1)エディタで開く
vim ~/.bashrc
(2)3行追加
# for ccache
export USE_CCACHE=1
export CCACHE_DIR=/root/.ccache
★CCACHE_DIRはなるべく読み書きの速いディスク上に設定しましょう。
(3).bashrcを再読み込み
source ~/.bashrc
③ビルドする。
distccを使って分散コンパイル
distccを使うと他のPCへコンパイル作業を割り当てることが可能になります。私の場合は1時間だったビルドが40分まで短くなりました。
詳しくはdistccでビルドを速くするを参照してください。
おわりに
時間のかかるカーネルのビルドを早くする方法を紹介しました。カーネルだけでなく、通常のビルドでも有効なのでぜひ使ってみてください。