ローダ


先日、firmimg.bin(/dev/fl1) のヘッダ部の構造が include/melco/firminfo.h に書いてあることに気が付いた。

その時は、なんとも思わなかったが、、、
ヘッダファイルがあるということは、 そのヘッダファイルを使っているソースがあるはず。
そのヘッダファイル(/dev/fl1 のヘッダ部の構造)を使うのは、 ローダではないだろうか?

早速 grep しまくってみると、include しているのは arch/ppc/boot/common/misc-simple.c であった。
このソースには Misc. bootloader code for many machines. と書いてある。

ざっと見ると、decompress_kernel() という関数があり、 /dev/fl2 を strings した時に見た

******* Product Information *******
----------------------------------
Product Name: (firminfo より取得)
         VER: (firminfo より取得)
         Date:(firminfo より取得)
----------------------------------
このような表示をしたり、
サムのチェックをしたり、
initrd.gz を(多分 RAM DISK に)コピーしたり
vmlinux.gz を gnuzip したりしている
これに違いない。

つまり、3/27 に書いた 「gzip のソースコードを使わずに gz ファイルを展開しているはず」 というのは間違い。 Monta Vista Linux 標準のローダに手を入れて(?)使っている。

arch/ppc/boot/sandpoint/Makefile を見ると、 make zImage を実行すると、bootcode.bin が出来上がりそう。 早速やってみる。

[yasunari@ls kernel_melext3]$ make zImage
すこしして、
objcopy -O elf32-powerpc -R .comment \
        bootcode.tmp bootcode
objcopy -I elf32-powerpc -O binary   bootcode bootcode.bin
bootcode.bin と /dev/fl2 とを比べてみる
[yasunari@ls sandpoint]$ cmp bootcode.bin /tmp/fl2
bootcode.bin /dev/fl2 異なります: バイト 5116、行 2
むむ。コンパイラや objcopy が違うので、予想はしていたが、、、

ただ、両者を strings しても、微妙に異なる。
strings /dev/fl2 すると、on board とか mini pci とかが見えるのだが、
strings bootcode.bin してもそんな文字列はない。
ソースコードを grep しても出てこない。(探し方が悪いだけかもしれないが)

本当にこのソースツリーをコンパイルしてできたものなのか疑問。

ローダを書けば HDD にカーネルを置く事もできるんだろうが、、、
ローダがちゃんと動かなければ、(カーネルの置き換え失敗と同様) お亡くなりになるのは確実だし、、、


LinkStation/玄箱 をハックしよう →  玄箱簡単インストール:失敗

Copyright (C) 2004 Yasunari Yamashita. All Rights Reserved.
yasunari @ yamasita.jp
山下康成京都府向日市