dingux 続き8

あめりあです。
そいや、winのusbtoolはstage2までロード完了するので、こちらで走らせてみればstage2のデバッグログも取得出来るわー、やってないわーてやってみた。

見事に取得出来るのですが、スタートアドレスが0x80C00000でないのが不思議。ちゅか0てどゆことですか。

stage2 main.c L33 offset = start_addr - 0x80000000;

とあって、オフセットは0x00C00000と出力されているので、start_addrは0x80C00000のはずなんですけどね(重要なんだけど流す)。それ以上にingenicからDLしたstage2のリンカスクリプト(target.ld)を読むと開始アドレスが0x80000000であることも疑問。スタートアップルーチンでは、あくまでも$20から相対アドレス算出し、SPとc_main(stage2開始アドレス+0x40なのはシンボルファイルで確認済)のジャンプアドレスを求めているので、すべてが相対動作していれば良いのだが。あと、$20レジスタへ開始アドレスをセットするところは、SET_DATA_ADDERSSのベンダリクエストハンドラでしか考えられないんだけど、こちらはBOOT ROMなんで黒箱。あくまでもロードしているステージモジュールはingenicからダウンロードしてきたモジュールなんで、もしやすると。。

ぬあああ。
原因解明。因みにモジュールとか開始アドレスとかの問題じゃないです。モジュールファイルからデータを取得する際のファイルサイズ取得方法に誤りがありました。。なんてゆ結末。。なので中途半端なデータをロードして走らせてストールしているという状態でした。。ちゅうのも、先のモジュールを入れ替えて確認してみようかなと作業に入った瞬間、stage2のファイルサイズが29kbというのが目に入り、え?あれ?よく見ていたのは8kbだよね?と、コードを見た瞬間膝から崩れ落ちた。。アホだ。begin/endでシークしてのサイズ取得で無事29kb値を取得が出来たところで走らせると見事にブート完了。こんなの現場でやらかしたらクビちょんぱだよな。。私が逆の立場だったらクビちょんぱ(ぉ
ちゅう訳で、これからジャカジャカとstage2にログも仕込めるし、マップ調査も出来るぞぉー。敢えて言うならば、このミスを犯していなければシリアル受信はやっていなかっただろうし(ましてやQC-IDの流用なんて!)、デバイスソースもそんなに読んでいなかったでしょう。そゆ意味ではお勉強になりました。