2010年1月13日水曜日

メモ:Multiboot Specification

前に調べたことをメモしておく。

Multiboot Specification準拠のブートローダ(つまりはGRUB)からカーネルを起動したときの状態について。

  • EAXレジスタ マジックナンバー0x2BADB002
  • EBXレジスタ Multibootの情報を持つ構造体へのポインタ
  • A20GATE 有効 (メモリアドレス1M以上へのアクセス有効)
  • CR0レジスタ ビット31(PG) クリア (ページング無効)
  • CR0レジスタ ビット0(PE) セット (32ビットモード)
  • EFLAGSレジスタ ビット17(VM) クリア (プロテクトモード)
  • EFLAGSレジスタ ビット9(IF) クリア (割り込み無効)
  • ESPレジスタ 未設定
  • GDTR ブートストラップローダが作成したセグメント
  • IDTR 未設定
  • カーネルが読み込まれるのは0x100000番地

アセンブラで書いたカーネルの先頭が0x100000となるようにリンカスクリプトを書く。たぶんこんなの。

ENTRY(_start)
SECTIONS
{
. = 0x100000;
.text :{
*(.start);
*(.text);
}
.data :{
*(.data);
}
.bss :{
*(.bss);
}
end = .;
}

0 件のコメント:

コメントを投稿