パスワードを忘れた? アカウント作成
359286 journal

BAKの日記: OpenBlockS266 めも

日記 by BAK

とりあえずは 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 vmlinux

zvmlinux: $(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 .sysmap

zImage-TREE: zvmlinux
                $(MKTREE) zvmlinux ../images/zImage.treeboot

要するに

  1. ELF 形式の vmlinux を
  2. strip コマンドでひん剥いて素っ裸のメモリイメージ形式にして
  3. gzip 圧縮をかけてできたのが vmlinux.gz
  4. こいつに zlib.a の自爆ルーチンをリンクしたのが zvmlinux
  5. さらに mktree コマンドで謎のフォーマット変換をしたのが,問題の zImage.treeboot

といったところかな.

まぁ,よーわからんが,このとおりに作ってやれば,Linux カーネル以外のプログラムでも送り込める,ということになる.

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

身近な人の偉大さは半減する -- あるアレゲ人

読み込み中...