研究目的

  • ブートが高速で、コンパクトなカーネルを実装する。
  • Codesegment と Datasegment をカーネルに実装するにあたって、メモリ管理の役割とどう合致するのかを検証する。
  • 上記を確認したら CbC を用いて、動作が軽く落ちにくいカーネルを実装する。
  • モデル検証に対応し、エラー予測を可能にする
  • カーネルパニックをなくす
  • Mach-O を ELILO でロードし、64bit で動作可能にする

ELILO のレジスタの状態

CR0

  • PGbit ON : ページングが enable されている
  • PEbit ON : Protect mode (32 bit mode) が enable

CR4

  • PAEbit ON : ページングが 32bit 以上を使用
  • PSEbit ON : 32bit ページングでの 4Mbyte page を enable

CR3

  • Page directory base にアドレス

CS

  • GDT のセグメントの番号
  • requested privirege level は最大(全権限をもつ)

ELILO のレジスタの状態[2]

現在の状態

  • GDT は動いている
  • long mode(compatibility mode/64bit mode)
  • EFI の仕様でレジスタへの書き込みを許してないのではないか
  • 4M byte のページテーブル
  • ページングは enable だが、EFI のマニュアルには physical address = virtual address とある

ELILO で Mach-O するためにするべきこと

  • ELILO は x86-64 ように bzImaze と plain loader を持っている
  • Mach-O 用ローダを追加
  • 一度使用するローダを登録して、使用するか決める
  • 登録したローダを使う