前に調べたことをメモしておく。
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 件のコメント:
コメントを投稿