2010年10月12日
Linuxカーネルを別のディレクトリでビルドする
今日はLinuxカーネルをビルドするときにちょっとしたTipsを紹介します。
カーネルをいじっていると、時々、同一のソースからコンフィグを少しだけ変えたものを複数作って、切り替えて交互に動作を試したいということがよくあります。
そのたびにコンフィグファイルを差し替えて再ビルドしてもよいのですが、そのコンフィグファイルごとに別々のディレクトリでビルドできると便利です。
そのためにはmakeの時に O=dir をつけます。
$ mkdir test1 $ make xxxx_defconfig O=test1 $ make menuconfig O=test1 $ make -j4 O=test1
これで、test1/.config の内容でtest1/vmlinux がビルドされます。
ただし、O=dir をつけずにビルドした後だと、以下のようなエラーになることがあります。
$ make -j4 O=test2 CHK include/linux/version.h GEN /opt2/koba/20101004/kernel/test2/Makefile CHK include/linux/utsrelease.h SYMLINK include/asm -> include/asm-arm make[2]: `/opt2/koba/20101004/kernel/include/asm-arm/mach-types.h' is up to date. Using /opt2/koba/20101004/kernel as source for kernel /opt2/koba/20101004/kernel is not clean, please run 'make mrproper' in the '/opt2/koba/20101004/kernel' directory. make[1]: *** [prepare3] Error 1 make: *** [sub-make] Error 2 make: INTERNAL: Exiting with 5 jobserver tokens available; should be 4! $
この時は、メッセージの通り 'make mrproper' を実行すればよいのですが、ポイントは, .configファイルが消されてしまうので必要ならばバックアップをとっておくということと、make mrproper にはO=dir をつけないということです。
$ cp .config config.1 $ make mrproper
この後で
$ make -j4 O=test2
とすれば今度はうまくいくと思います。