Kernel Out Tree Building
前書き
kernelの新機能を調査するときなど
ちょっとだけconfig変えた複数のkernelを用意して
比較テストしたりするのだが・・・
この場合、kernel source は変えなくていいので
ビルド結果を置くディレクトリを指定して
ソースは複製せずに1ヶ所に置いておける。
Out Tree Building とか呼ぶ場合もあるそう。
で、linux-2.6.x使いなら当然の知識かと思ったら
ガンガン複製している後輩等がいた・・・ので別の後輩等の参考になるかもしれんのでメモしておく。
本題
tree command 風表記で例を書くと、以下のようなディレクトリ構成とする。
~/linux-research/
-- sys.src/ | |
`-- linux-2.6.29/ | |
-- targets/ | |
-- beagle-preempt | |
`-- kernel/ | |
-- beagle-nonpreempt | |
`-- kernel/ | |
- "linux-research/sys.src/linux-2.6.31" が kernel source 一式展開済み。
- "linux-research/targets/beagle-preempt" が preemptive に設定したカーネルのビルドディレクトリ。まだ空とする。
- "linux-research/targets/beagle-nonpreempt" が non-preemptive に設定したカーネルのビルドディレクトリ。まだ空とする。
$ cd ~/linux-research/targets/beagle-preempt/kernel $ export ARCH=arm; export CROSS_COMPILE=arm-none-linux-gnueabi- $ make -C ~/linux-research/sys.src/linux-2.6.29 O=`pwd` omap3_beagle_defconfigこの操作で"beagle-preempt/kernel/Makefile"が作成される。(手元で確認して欲しい) このMakefileにはカーネルソースのディレクトリが記録されるので、 以降は "-C
$ make menuconfig $ make uImageちゃんとコンパイルできるハズ。 non-preemptiveも同様に。
$ cd ~/linux-research/targets/beagle-nonpreempt/kernel $ make -C ~/linux-research/sys.src/linux-2.6.29 O=`pwd` omap3_beagle_defconfig $ make menuconfig $ make uImageこんな感じで、kernel source を複製せずに作業していける。 生成物のうち、ターゲットで使用する"uImage"と、デバッグに使用する"vmlinux"以外は、 なくても構わないので動作確認後消してしまえばいい。 ディスク使用量が減るのでバックアップコストが下がって効果的。