玄箱のコンパイルは遅いのでクロスコンパイルをする。Debian(ubuntu)だととても楽ちん
apt-line を追加する。
root # echo "deb http://www.emdebian.org/debian/ lenny main "\ >> /etc/apt/sources.list root # aptitude update
ビルドに必要な一式
aptitude install build-essential ncurses-dev
PPCのクロスコンパイラ一式を入れる
aptitude install libc6-dev-powerpc-cross \ gcc-4.3-powerpc-linux-gnu \ binutils-powerpc-linux-gnu
終わり。ホントこれだけだった。
クロス・コンパイルを実行して、動くかためしてみる
echo "#include <stdio.h> main(){ printf(\"Hello world\"); } " >> test.c powerpc-linux-gnu-gcc test.c ./a.out #コンパイル元で実行してみる -bash: ./a.out: バイナリファイルを実行できません #当然実行できない。クロスコンパイル成功してる見たい
玄箱(ppc))で実行してみる
rsync a.out root@kurobox:/root #玄箱へバイナリを転送 ssh kuro-box "/root/a.out" #起動する Hello World #無事動く #クロスコンパイル成功!オメデトウ
動かない場合。
root@KURO-BOX:~# ./a.out Inconsistency detected by ld.so: dynamic-link.h: 62: elf_get_dynamic_info: Assertion `! "bad dynamic tag"' failed!
等とと出る。これは純正玄箱のビルドパッケージが入っていないのが起因だと思う。
玄箱カーネルをコンパイルする
hello world が動くなら カーネルもコンパイルできるよね!
wget http://www.genbako.com/kurobox-sources-2.6.25.patch & wget http://www.genbako.com/kurobox-section-mismatch2625.patch & wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.25.1.tar.bz2 & tar jxpvf linux-2.6.25.1.tar.bz2 cd linux-2.6.25.1 patch -Np1 <../kurobox-section-mismatch2625.patch patch -Np1 <../kurobox-sources-2.6.25.patch #configが作られる cp config_kurobox .config # HG と無印 玄箱 で ファイルが違う export ARCH=ppc export CROSS_COMPILE="powerpc-linux-gnu-" make oldconfig make menuconfig # menuconfig で iptables/VLAN/NFS 等モジュール組み込み make CROSS_COMPILE="powerpc-linux-gnu-" vmlinux powerpc-linux-gnu-objcopy -O binary vmlinux vmlinux.bin make CROSS_COMPILE="powerpc-linux-gnu-" modules make ARCH=ppc INSTALL_MOD_PATH=../modules-tmp modules_install #とりあえず modules を一階層上に完成させておく
あっけないほど短時間で終る。カーネルはできあがったら、玄箱に転送してカーネルを入れ替える。
玄箱だと90分かかる作業が数分で終った。x86 は偉大
あと、たしかMakefile を若干修正した
ファイルの何処か忘れたけど、、、grep するとたぶん出てくる。これ修正しないと binutils のチェックがエラーになる
- @if ! /bin/echo dssall | $(AS) -many -o $(TOUT) >/dev/null 2>&1 ; then \ + @if ![[ "/bin/echo dssall | $(AS) -many -o $(TOUT) >/dev/null 2>&1" ]] ; then \
ビルドが終ったら玄箱に転送します。
TARにまとめて転送
tar cvzf source.tgz ./linux-2.6.25.1 #ソース scp source.tgz 192.168.20.201:~
玄箱側で展開
tar zxvf source.tgz
既存ファイルをいったん待避
sudo cp -p /boot/vmlinux.bin /boot/vmlinux.bin.2010-10-14 sudo cp -p /boot/System.map /boot/System.map.2010-10-14
作ったファイルで上書き
cd ./linux-2.6.25.1 sudo cp -p ./vmlinux.bin /boot/vmlinux.bin sudo cp -p ./System.map /boot/System.map sudo chown root:root /boot/*
モジュールも待避&入れる
sudo cp -r /lib/modules/2.6.25.1-kurobox /lib/modules/2.6.25.1-kurobox.2010-10-14 #ソースとビルドを保管しておく sudo mkdir /lib/src sudo cp -r linux-2.6.25.1 /lib/src/ #モジュール入れる cd /lib/src/linux-2.6.25.1 export ARCH=ppc sudo make modules_install
再起動
sudo reboot #ドキドキしながら