Hack BBS

[全部のスレッド一覧][新規投稿][記事の削除・変更] [Home Page]

返信投稿はタイトルのリンクをクリックして下さい
スレッド【No.241】の中の記事をすべて表示しています

【No.241】のスレッド
04/04/06(火) 23:30:54 投稿者[たつや ] <http://linkstation.yi.org/> [No.241]のスレッド内
【No.241】 タイトル[/dev/fl2 の2ブロック目?] この記事がスレッドの最初です
>arch/ppc の下を 0xFFF0 や 0x9000 で grep しても、該当箇所なし。

カーネルパラメータのアドレスは多分 0x9000 になると思います。
というのは、fl2 のローダを逆アセンブルして見ていたのですが、
プログラムの先頭部分に exception(x86 でいう所のソフトウェ
ア割り込みベクタ)と思われる部分があります。
PowerPC の exception はメモリの先頭から始まりますので、起動
時には /dev/fl2 の最初が 0x0000 になるようにマッピングされて
いるようです。

カーネルの中からは fl1 が 0xFFC00000 番地から始ということ
ですのでカーネルの起動後にフラッシュメモリのマッピングを変
更しているのかもしれませんね。

>arch/ppc の下を 0xFFF0 や 0x9000 で grep しても、該当箇所なし。
>やっぱり謎。何に使っている?

絶対アドレスで見つからないとすると、ld script を探してみて
はいかがでしょうか? 多分、bootcode.bin を make する途中の
ld コマンドに -T (--script) オプションで指定するテキスト
ファイルがあると予想しています。このファイルの中で、セグメ
ントをどのアドレスにマッピングするかを書いてあるのではない
でしょうか。このファイル中で 0x9000 に割り当てられたセグメ
ントの最初のシンボルがカーネルパラメータになると思います。

ちなみにこの部分ですが、逆アセンブルして見ただけでははっき
りわかりませんが、何種類かのテーブルが入っているようです。

0x9010〜0x906c にはフラッシュROMのチップ名に対するポインタ
と関数のアドレスが入っているみたいです。チップの種類によっ
て書き込み方法を変更するためのテーブルか?

0x907c〜0x9080 には erasek、writeb、quit などのコマンド名
と関数のアドレスが入っていますので、モニタのコマンドとその
処理関数ではないかと思います。

0x9058 あたりからは 32bit 整数の配列のようです。

0x94dc〜0x94fc には "file error"、"stream error" などのエ
ラーメッセージのテーブルのようです。

上記の文字列等でソースを探してみたらすぐに場所が見つかる
かもしれませんね。

04/04/08(木) 22:55:34 投稿者[たつや ] <http://linkstation.yi.org/> [No.241]のスレッド内
【No.251】 タイトル[Re: /dev/fl2 の2ブロック目?] 【No.241】に対する返信
ソースが届いたので、中を見ていたらいろいろと間違いが見つかってきました。

>PowerPC の exception はメモリの先頭から始まりますので、起動
>時には /dev/fl2 の最初が 0x0000 になるようにマッピングされて
>いるようです。

実際にコンパイルされた bootcode を見ると、0x800000 にロード
されるようです。exception のテーブルが 0x800000 にあっていい
のかよくわかっていません。PowerPC の理解がまだまだ足りない、、、

>多分、bootcode.bin を make する途中の
>ld コマンドに -T (--script) オプションで指定するテキスト
>ファイルがあると予想しています。

bootcode.bin の中にカーネルパラメータが入っていることを前提
にこんなことを書きましたが、実際できた bootcode.bin は 34016
バイト (0x84e0) であり、0x9000 以降の部分が存在しませんでし
た。

>0x9010〜0x906c にはフラッシュROMのチップ名に対するポインタ
>と関数のアドレスが入っているみたいです。チップの種類によっ
>て書き込み方法を変更するためのテーブルか?

この部分は include/melco/flashd.h に入っていました。
しかしこのファイル、ヘッダなのにテーブルや関数の実体が定義され
ていますね。