更新日: $Date: 2005-11-20 08:29:46 $ UTC ($Revision: 1.9 $)
公開日: 2004/02/26
kernel 2.6から稼働中のkernelとkernelイメージファイル(bzImageとか)からkernelの設定情報(/usr/src/linux/.configにあたるもの)が取り出せるようになりました。
今まで17回ぐらい「前のkernelイメージからkernel設定が取れたらいいなぁ」と思ったことがあるので、ちと調べてやってみたメモです。
それぞれの目的を実現するために、以下のkernel設定を有効にしてkernelをビルドします。
init/Kconfig
。init/Kconfig
。
make V=0 clean bzImage modules modules_install
などでkernelをビルドしたのち、そのkernelでブートする。
無事、新しいkernelで起動したら早速試してみましょ。
/proc/config.gz
というファイルがあれば成功です。
% zcat /proc/config.gz | less
なり
% zcat /proc/config.gz > ~/config
するなりぞうぞ。rootになる必要はなく、一般ユーザーでOKです。
kernelイメージからkernel設定を取り出すには2つのプログラムが必要なので準備します。
一つはextract-ikconfigで、これは/usr/src/linux/scripts/extract-ikconfigにありシェルスクリプトなのでどこかPATHの通ったところにコピーすればOKです。
もう一つはbinoffsetです。ソースコードが同じく/usr/src/linux/scripts/binoffset.cにあるのですがシェルスクリプトではなくCのソースコードなので、
# cd /usr/src/linux/scripts # make binoffset
とすればbinoffsetができあがるので、PATHの通ったところにコピーします。
準備ができたらextract-ikconfigを使ってkernel設定を取り出します。
% cp /boot/bzImage-2.6.3 ~/ % extract-ikconfig ~/bzImage-2.6.3 filesize: 1776579 number of pattern matches = 1 19564 Kernel configuration written to /home/hirose31/bzImage-2.6.3.oldconfig.5823 %
これでkernelイメージがあったディレクトリに、
IMAGE.oldconfig.PID
というファイルができているはずです。
注意点は、
extract-ikconfigが内部でbinoffsetを実行してるが、パス指定していないのでextract-ikconfig実行時にPATHの通ったところにbinoffsetがある必要があるのと、
元のkernelイメージがあった場所にkernel設定をファイル出力するので、イメージファイルを/bootなど一般ユーザーが書き込み権限がない場所から書き込める場所にコピーしてからそのイメージファイルに対してextract-ikconfigを実行することぐらいです。
後者はrootで実行すれば関係ありませんが、rootでする必要のないことはrootですべきではないので。