xv6 bootmain

0x7c00x86BIOSMBRを読み取って、物理メモリに展開するときの位置(仕様)

0x10000 はプログラム側でディスク読み取って、物理メモリに展開する際のdstアドレス。これはリンカスクリプトの設定と一致させればよい。

つまり、自作する際はリセットベクタ付近に、

  • bootasm.S(MIPSならレジスタ初期化とbootmain()へのjumpくらいしかやらなくてよい。)
  • bootmain.c(まず、ディスクからカーネル本体のELFヘッダを読み取り、それに従って本体を物理メモリ上に順次展開していく)

の双方を含むコードを配置しておけば良い。ブートローダ自体はコンフィギュレーションROM等に配置できそうだが、数百KBはある、カーネル本体(ELFイメージ)をどうやってFPGAに転送するのか要調査。