Linux Kernel 2.6.29 to 2.6.32 on OBS600
目的
OpenBlocks600においてDebianをKernel 2.6.29で動かしているが、NFSクライアントでSegmentation Faultがでる。どうにも解消できないため、Kernelを2.6.32に上げてみる。 SSD/Linuxのネイティブビルドだと時間がかかりそうなので、VMWareイメージを使ってMacでKernelをコンパイルする。Flashに焼く用のSSD/Linux uImageと、CFにおいてu-Bootから起動する用のuImageをつくる。CFブート用のuImageをFlashに焼くこともできるが、不具合があったときの復旧のすべがtftpbootしかないため設定が面倒である。
手順
1.SSD/Linux i386版のVMWareイメージをMacOSXで動かす。 SSD/Linux i386版のVMWareイメージをプラットホームのWebからダウンロードする。ハードディスクイメージとフロッピーディスクイメージが必要。フロッピーディスクイメージからブートする。VMWareイメージはVirtualBoxでも動くので、MacOSXでも無償で動かせる。
2.VMWareイメージから起動したSSD/Linux i386を設定する。 root/rootでログインして、IPアドレスの取得はdhclient eth0が楽。
3.VMWareのSSD/Linux側ファイルの変更 ~root/.bash_profile
if [ -f ~/.bashrc ]; then . ~/.bashrc fi export PATH=$PATH:/usr/cross/mipsel/bin:/usr/cross/powerpc/bin:/usr/cross/x86_64/bin export CVSROOT=:pserver:anoncvs@cvs.plathome.co.jp:/cvs/ssdlinux export HOSTTYPE MACHTYPE SHELL
4.VMWareのSSD/Linux側ファイルの変更 /etc/mk.conf
# $ssdlinux: mk.conf.in,v 1.6 2010/04/20 01:49:07 kimura Exp $ #DESTDIR?= /home/dest #RELEASEDIR?= /home/release #RCS_LOCALID?= ssdlinux SSDCVSTAG?= #SSDCVSDATE?= 20020420 # alternate kernel config which instead of # mkdist/kernel/dot.config.* if required #KERNEL_CONFIG?= /usr/src/my_kernel_config KERNEL_CONFIG?= /usr/src/my_kernel_config KERNEL_MAJOR=2 KERNEL_MINOR=6 KERNEL_PATCHLEVEL=32 # Cross Compile for OpenBlockS CROSS_BUILD?= powerpc DESTDIR?= /home/dest-powerpc RELEASEDIR?= /home/release-powerpc # OPENBLOCKS 'obs50','obs200','obs266','obs600' or 'none' OPENBLOCKS?= obs600 HAVE_CVS?= yes DEVELOPTOOLS?= yes USE_PAM?= yes USE_PCMCIA?= yes USE_EXT3FS?= yes IPV6?= no SSDVERSION= 0.5 # MTA 'sendmail' or 'postfix' MTA?= sendmail
5.SSD/Linux最新版ソースの取得 VMWareのSSD/Linux側で下記のコマンドを実行する。
# cd /usr # cvs login CVS password: anoncvs # cvs co -P src
6.Linux Kernel .configファイルのコピー、カスタマイズ VMWareのSSD/Linux側で下記のコマンドを実行する。
# cp -p /usr/src/mkdist/kernel/2.6.32/dot.config.powerpc-obs600 /usr/src/my_kernel_config
AUTOFSを有効にしたいので、/usr/src/my_kernel_configに下記の行を追記する。
CONFIG_AUTOFS_FS=m CONFIG_AUTOFS4_FS=m
7.SSD/Linuxソースツリーのコンパイル VMWareのSSD/Linux側で下記のコマンドを実行する。
# cd /usr/src # bmake -DNOCLEAN build
8.ファームウェアの作成 VMWareのSSD/Linux側で下記のコマンドを実行する。
# date; pushd /usr/src/distrib/powerpc-obs600/cfboot/; bmake clean; bmake; date # date; pushd /usr/src/distrib/powerpc-obs600/standard/; bmake clean; bmake; date # cd /tmp # mkdir /tmp/2632 # cp -p /usr/src/distrib/powerpc-obs600/cfboot/treeboot/uImage.initrd-cfboot /tmp/2632/ # cp -p /usr/src/distrib/powerpc-obs600/standard/treeboot/uImage.initrd /tmp/2632/ # cp -p /home/dest-powerpc/System.map /tmp/2632/ # cp -p /home/dest-powerpc/System.map.2632 /tmp/2632/ # (cd /home/dest-powerpc; tar cf /tmp/2632/kern.tar lib/modules/2.6.32) # tar zcf 2632.tgz 2632
uImage.initrd-cfbootがCFに置く用、uImage.initrdがFlashに焼く用である。
9.ファームウェアをOBS600にとりこむ。 なんとかして2632.tgzをOBS600へ送る。デバイスファイルの問題があるので、ramdiskからブートしたSSD/Linuxを使うとよい。ファイルの受けわたしはどこかのftpサーバを介するのが楽。 OBS600側で下記のコマンドを実行する。/tmpに2632.tgzを置いた場合の例。
# cd /tmp # tar zxf 2632.tgz # mount LABEL=/ /mnt # cp -p 2632/uImage.initrd-cfboot /mnt/ # cp -p 2632/System.map /mnt/ # cp -p 2632/System.map.2632 /mnt/ # (cd /mnt; tar zxf /tmp/2632/kern.tar) # (cd /mnt; find lib/modules/ -type f -name "*.ko.gz" | xargs gzip -d) # depmod -b /mnt -a # flashcfg -f 2632/uImage.initrd # flashcfg -c cf # shutdown -r now
これで、CF上のDebianはCFのKernelで起動する。本体のボタンを押しながら電源を入れれば、Flash上のSSD/Linuxが起動する。 ここまでの作業でLinux Kernel 2.6.29→2.6.32の更新ができているはずである。ここまでやったらさすがにNFSクライアントもSegmentation Faultすることなくmountできた。AUTOFSもだいじょうぶ。めでたしめでたし。