BAKの日記: OpenBlockS266 めも
とりあえずは Vine のインストールには成功.が,ほげり,というにはまだまだ.下調べ,というか敵状視察のフェーズは続くのである.
ディスアセンブル
とりあえず,ブートローダを吸い出してディスアセンブル.
-EB がキモ.デフォルトではリトルエンディアンと解釈されて,謎なニーモニックを吐く.
-m や -M のオプション値については要調査.出力にまだ一部に未定義命令らしい部分がある.
objdump -D -EB -b binary -m powerpc:403 -M power4 --adjust-vma=0xfffc0000 image
OpenBIOS
ブートローダのところに出てくる名前.ぐぐってみると,IBM 謹製らしい.が,「Open」の名に反してソースは非公開.技術情報も契約を結ばないと出てこないとかどうとか.
というわけで,
それならば,OpenBIOS からホントに Open な別のローダを経由して起動したらどうかな
と,二段ロケット方式を思いつく(思いついたからといって,私の実力では簡単に実現できるもんでもないのだが.それにこの手は,以前,某板で手抜きのために使った技である).で,適当にぐぐると PPCBoot というのが見つかる.
で,説明を読んでいると「PowerPC 以外にも MIPS, ARM などのアーキテクチャに対応しているので,名前が実情に合わなくなった」というので,名前を変えて仕切り直しをしたようである.その名も Das U-Boot.頑張って浮上したところを空襲で爆撃されそうな名前である.けど,かっくいー.
OpenBIOS が扱うバイナリ形式
付属の CD-ROM に Linux イメージが付いてきているのだが,単なる ELF でもないし,メモリイメージそのまま,という雰囲気でもない.Linux カーネルのソースを見れば,作り方もわかるはず.
というわけで,カーネルソースを get するために Plat'Home Open Laboratory へ,ごー.
パッチ一式をかっさらってくる.
で,パッチ当ての作業に入るのだが…いくつかパッチを当てたところでしくじってしまう.そこで,先日の「美青年 r 氏」に某チャネルで訊く.すると,パッチを当てる土台のソースは Linus 版ではなく ppc 版である,とのこと.やられたぜ.
で,何となく build してみる.すると,linux-2.4.20/arch/ppc/boot/images/zImage.treeboot という,それっぽいファイルができている.このファイルの製作過程をいろんなディレクトリの Makefile からかき集めると,こんな感じ.
vmlinux.gz: $(TOPDIR)/vmlinux
$(OBJCOPY) --strip-all -S -O binary $(TOPDIR)/vmlinux vmlinux
gzip -vf9 vmlinuxzvmlinux: $(obj-y) $(LIBS) ../ld.script ../images/vmlinux.gz ../common/dummy.o
$(OBJCOPY) $(OBJCOPY_ARGS) \
--add-section=.image=../images/vmlinux.gz \
--set-section-flags=.image=contents,alloc,load,readonly,data \
../common/dummy.o image.o
$(LD) $(LD_ARGS) -o $@ $(obj-y) image.o $(LIBS)
$(OBJCOPY) $(OBJCOPY_ARGS) $@ $@ -R .comment -R .stab -R .stabstr \
-R .ramdisk -R .sysmapzImage-TREE: zvmlinux
$(MKTREE) zvmlinux ../images/zImage.treeboot
要するに
- ELF 形式の vmlinux を
- strip コマンドでひん剥いて素っ裸のメモリイメージ形式にして
- gzip 圧縮をかけてできたのが vmlinux.gz
- こいつに zlib.a の自爆ルーチンをリンクしたのが zvmlinux
- さらに mktree コマンドで謎のフォーマット変換をしたのが,問題の zImage.treeboot
といったところかな.
まぁ,よーわからんが,このとおりに作ってやれば,Linux カーネル以外のプログラムでも送り込める,ということになる.
OpenBlockS266 めも More ログイン