« モバ環境を作った | Main | 就活むずい »

2009.02.24

elfの思い出

http://shinh.skr.jp/m/?date=20090223
ごめんなさい。正直elfを舐めてました。

僕にとってelfヘッダーはROM化するにあたって削除しないといけない程度の物だったのですが、バイナリアンを目指すにはもっと大事に扱わないといけません。http://shinh.skr.jp/binary/shdr.htmlを三回読んで反省しているところです。

とはいえ、これはおかしい気がするんだ。努力の方向として。
http://shinh.skr.jp/binary/fsij061115/index.cgi?i=0

そんなこんなでelfに関する思い出(俺語り)のはじまりはじまり。

お仕事でFPGAでプロセッサを動かすという作業をするのですが、プロセッサは何かしらのプログラムが無いと動かなくて、そのプログラムはお客さんから提供して頂く、もしくは自力でハンドアセンブルするの2択になっています。

お客さんからプログラムを提供してもらう場合、FPGAですぐに動く状態でもらえることはまれです。こちらは純正の開発環境を用意しているのに、もらったファイルがgccで作ったelfというのはときどきあります。半導体作っている所は純正の環境があるんだけど、ソフト部隊はgccを使っていてるのでしょう。ソフト部隊が別会社だったりすると「ROMのイメージでください」が簡単にお願いできなくて、自力で何とかしないといけません。半導体作っている所とソフト部隊がお互い子会社な状況の場合、第三者にソースを開示するには2社の担当者同士では決めれず、ソースが出てくる事も期待できません。バイナリデータは出てくるのに不思議。

この手の仕事はネットワークに繋がらない場所での軟禁作業が基本になるので、elfでもらっちゃうとelfのフォーマットを調べる方法がありません。しょうがないので、最初の命令のbitパターンとプログラムのサイズだけ教えてもらって、そこからプログラム(.text)を抜き出します。現地でツールを作ったりしても、作業最終日に作業用PCのHDDを全部フォーマットして帰るので、そこでツールは消えてしまいます。非常に残念です。撤退後にその手のツールをもう一度作ろうとも思うのですが、今度はターゲットCPUのelfファイルが手元にないとか、プロセッサ動いてからが本当の地獄とかなんとか理由つけて、ようはやる気がでないわけです。

shinhさんの言われるように、行き当たりばったりなやり方は止めて、きっちり勉強して何来てもOKな状態にしておけば良いんでしょうね。今回の件で一つ賢くなって、向こうがターゲットCPUのgcc使っているのが分かれば、ROMのバイナリを送って逆アセしてもらう事はできそうです。ここもしっかり手順化して「ROMのイメージがもらえると思ったら、elfフォーマットで来たでござるの巻」で標準化して資料を持ち込めば良いんだ。そうしよう。

せっかくだから、FPGAで最初の命令がフェッチできないパターンの紹介。
FPGAに向かっている時点でRTLのバグはまず無いので、FPGAに落としたときに間違えているか作業者の勘違いがほとんど。

・CPUのアドレスと外部バスのアドレスがずれている仕様をしらずにROMを直結している。・ROMの0番地からではなく、オフセットをつけてプログラムを配置しないと駄目
・エンディアンが逆
・自作ROMのビット幅とCPUのモード(外部端子設定)が一致していない。
・リセット時のPCの値が予想と違う。
 (いったんSOC内の小さいBootコードを通ってから、外部のROMにアクセスしにいくとか)
このあたりの内部資料も見せてもらえないわけで、試行錯誤をしながら最初の命令を思われるbitをちゃんとフェッチできているかどうかがチェックポイントになります。

というわけで、もっともっとelfヘッダーを大事にしようという話でした。

|

« モバ環境を作った | Main | 就活むずい »

Comments

Post a comment



(Not displayed with comment.)




TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/18154/44162734

Listed below are links to weblogs that reference elfの思い出:

« モバ環境を作った | Main | 就活むずい »