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作为引导程序可以使得内核开发工作避免陷入汇编语言过多的细节中:-)