Monarm

MonaOSをARM上に移植してみます。
同OSはx86べったりだと思いますが、なるべくオリジナルの設計を崩さないように考慮したいと思います。

環境等はARMの擬似環境構築時のものを使用します。
MonaOSは 0.3.0alpha9 です。


とりあえずKernel開始(cstart関数)に到達するところまで移植できたので恥を惜しまず公開します。

追記/お詫び

記載していたsvnリポジトリは、登録ユーザ以外、閲覧することができませんでした。
以下に別のリポジトリを設けましたのでこちらを参照してください。
http://www.assembla.com/spaces/monarm/trac_subversion_tool

メモリマップ

移植前にまず、メモリマップを考えました。オリジナルはこちらのようになっています。
とりあえず以下のようにしました。

最終的なリセットベクタは0からに配置予定です。
従ってオリジナルがBaseとしている0x1200に合致しないのですが、そのあたりは追々考えていきたいと思います。

ブートローダ

オリジナルのブートシーケンスは、

  1. firstboot(先頭セクタ)
  2. secondboot

と2本立てになっています。これを1本化して、現状、

  1. armboot(MMU-offリセットベクタ)
    • コア初期化
    • 周辺初期化(割り込み、バス、クロック等)*1
    • mona.imgをROMからRAMへ
    • RAM上にjmp

といった手順を踏みます。
本来ならば、オリジナルで行っているサーバプロセスの読み込みが必要ですが、そこまでに至っていません。

Kernel

本体であるKernel.cppにはまだ到達していません。
cstart.cppでメッセージを出して止めています。
なんの面白みもありません。これからこれから。


割り算ルーチンには、ARM向けlibgcc.aをリンクするようにしました。
また同ライブラリ内のdiv0関数がraise関数を呼び出すため、とりあえずダミースタブを作成して対応しました。
(in cstart.c)


近々の課題

  • デバッグメッセージをUART送信バッファへ直接書き出しているのを何とかする(LogConsole移植)
  • MMU-ON
  • 割り込み処理(とりあえずタイマぐらい)
  • とりあえずな編集をきれいにする(特にMakefile)。

*1:u-bootを参考にしました