研究目的

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

ELILO

現状

ELILO

目標

  • Page Table を初期化
  • 一度 Paging を disable
  • CR3 レジスタに初期化した Page Table を登録
  • 再度 Paging を enable

ELILO

作業[1]

  • 結局 ExitBootService を通して成功したのは GDT/IDT の操作のみ
  • CR3 へ PML4 の先頭アドレスを入れるために CR0.PG を disable すると落ちる
  • CR4.PCIDE を disable にするだけなら通る

ELILO

EFI Runtime Services[SetVirtualAddressMap]

  • EFI から OS を Boot するためのサービスが Boot Services
  • OS が走っている状態で、EFI を操作するためのサービスが Runtime Services
  • SetVirtualAddressMap()
  • Changes the runtime addressing mode of EFI firmware from physical to virtual.

ELILO

EFI Runtime Services[SetVirtualAddressMap]

  • x86_64_start_kernel
  • x86_64_start_reservations
  • start_kernel // カーネルの初期化
  • setup_arch // アーキテクチャごとの設定
  • efi_init // efi の初期化
  • efi_enter_virtual_mode

0x4000 でブートローダから EFI その他の情報を受け取る