1、grub遵循multiboot引導規範,從gnu的multiboot網頁(http://www.gnu.org/software/grub/manual/multiboot/multiboot.html#Examples)
下載示例代碼
2、編寫鏈接腳本link.ld內容如下:
ENTRY(start)
<span style="white-space:pre"> </span>. = 0x100000;
SECTIONS
{
.text :
{
*(.text)
}
. = ALIGN(0x1000);
.rodata :
{
*(.rodata)
}
. = ALIGN(0x1000);
.data :
{
*(.data)
}
. = ALIGN(0x1000);
.bss :
{
*(.bss)
*(COMMON)
}
}
3、編譯和鏈接
gcc -c boot.S -o boot.o
gcc -c -fno-builtin -fno-stack-protector -nostdlib -nostdinc kernel.c -o kernel.o
ld -T link.ld boot.o kernel.o -o kernel
4、測試
將生成的kernel拷貝到grub啓動盤的根目錄下,然後啓動qemu:
輸入multiboot /kernel
再輸入boot:
之後的工作就是修改kernel.c文件,採用grub作爲引導程序可以使得內核開發工作避免陷入彙編語言過多的細節中:-)