前回、OOM Killerの発動を検知するテスト用のカーネルモジュールをビルドしたと書きました。前回は長くなるのを避けてビルド手順を端折ったので、改めて記録しておきます。ここを見ながらビルドしました。
- カーネルソースのダウンロード
~/kernel>$ apt-get source linux-image-$(uname -r) パッケージリストを読み込んでいます... 完了 依存関係ツリーを作成しています 状態情報を読み取っています... 完了 : linux-3.13.0/virt/kvm/iommu.c linux-3.13.0/virt/kvm/kvm_main.c ~/kernel>$
テストに使ったUbuntuのカーネルソースコードのダウンロードです。~/kernelにダウンロードしました。
以前カーネルをビルドしたときは、gitで最新のソースをとってきました。今回は今Ubuntu上で動いているカーネルバージョンのソースが必要です。
- コンフィグファイルのコピー
~/kernel>$ cd linux-3.13.0/ ~/kernel/linux-3.13.0>$ sudo cp /boot/config-3.13.0-43-generic .config ~/kernel/linux-3.13.0>$
今使っているカーネルのコンフィグファイルをコピーしました。
- カーネルモジュールのビルド準備
~/kernel/linux-3.13.0>$ make modules_prepare HOSTCC scripts/basic/fixdep HOSTCC scripts/kconfig/conf.o SHIPPED scripts/kconfig/zconf.tab.c : HOSTCC scripts/recordmcount HOSTCC scripts/sortextable HOSTCC scripts/asn1_compiler ~/kernel/linux-3.13.0>$
この手順がどうして必要なのかは上記ドキュメントの2.項に書かれています。
- Modules.symversのコピー
~/kernel/linux-3.13.0>$ cp /lib/modules/`uname -r`/build/Module.symvers . ~/kernel/linux-3.13.0>$
カーネル全体をビルドすれば生成されますが、時間短縮のため生成済みのファイルをコピーしました。書き忘れましたがこの仮想マシンを動かしたホストマシンはAM1H-ITX + Athlon5350です。以前書いた通り、このマシンはLinuxカーネルのビルドが格別遅いので、全体をビルドする気にならない。
- カーネルモジュールのビルド
~/work/hookoom>$ make -C ~/kernel/linux-3.13.0/ M=`pwd` modules make: ディレクトリ `/home/nashi/kernel/linux-3.13.0' に入ります CC [M] /home/nashi/work/hookoom/hookoom.o LD [M] /home/nashi/work/hookoom/mod_hookoom.o : CC /home/nashi/work/hookoom/mod_hookoom.mod.o LD [M] /home/nashi/work/hookoom/mod_hookoom.ko make: ディレクトリ `/home/nashi/kernel/linux-3.13.0' から出ます ~/work/hookoom>$
カーネルモジュールのソースファイルhookoom.cと前回掲載したKbuildを~work/hookoomに置きました。そしてこのディレクトリでmake。
- 最後にカーネルモジュールをコピー
~/work/hookoom>$ sudo cp mod_hookoom.ko /lib/modules/3.13.0-43-generic/kernel/ ~/work/hookoom>$
しかるべきディレクトリにカーネルモジュールをコピーして完了です。