ELFローダ

ROM上にあるRTOSやらアプリやらをRAM上に展開して実行したい.というところまでは,ふつーの要求.
しかし,今回の運用では,RTOSとアプリのリンク単位は別かもしれない.ふつーなら,ファイルシステムか何かを仕込んで解決すると思う.
ところが,今回の納品先は,高信頼性検証が要求される.下手にソフトウェア部品を使うと,その部品まで検証しろとかいう話になる可能性大.そんな検証につきあってらんない.

というわけで,簡単なローダを書き,ROM上に焼いたELFイメージをLMAに展開するという手を考えてみる.
ROMに焼けるELFイメージを作るのは,objcopy を使うのが最も簡単っぽい*1.いやなブログのエントリに番号辞書を使った具体例が載っているが,同様にELFイメージ全体をバイナリと見立て埋め込む.

ELFは,真っ当にサポートするにはそれなりに膨大なコードが要る.でも,RTOSのブートストラップ程度ならば,ELFヘッダ→プログラムヘッダと読み進めて,LMA*2とfileのoffset/sizeを取得しメモリコピーするだけで済む,はず.

書いてみた.BSDスタイルのCコードで,およそ100行もあれば十分.

*1:けれども,MIPSの場合は,なんか出力フォーマットの指定に癖が有るみたいな気がする.もしかして,バグなのかしら.

*2:VMAに展開してもよい.この辺は開発者の気分とRTOS側のブートストラップコード次第