grub是一个开源的bootloader,可以实现把操作系统内核装进内存并跳转到内核。它的工作流程如下:
(1) BIOS执行INT 0x19,加载MBR至0x7c00并跳转执行。如果你安装GRUB到MBR, GRUB的安装程序会把Stage1(512B)拷贝到MBR。
(2) Stage1开始执行,它在进行直接加载Stage1_5或者Stage2并跳转执行。不论是 哪种情况,这一步的结果都是Stage2开始运行了。
(3) Stage2这个小型的操作系统终于开始正式运行了!它会把系统切入保护模式, 设置好C运行环境(主要是BSS)。他会先找Config文件(就是我们的 Menulist),如果没有的话就执行一个Shell,等待我们输入命令。然后Grub的工 作就是输入命令-解析命令-执行命令的循环,当然 Stage2本身是为加载其他操作系统而存在的,所以如果情况允许,在他执行Boot命令以后就会把控制权转交出去。
把grub写入软盘,然后接下来的工作就是加载操作系统了。这里可以省去bootloader的过程,为内核开发带来极大的便利。但是你的内核镜像要想被grub认识并加载(加载地址由内核镜像elf决定),还需要遵守一个标准:Grub Multiboot规范。
下面两条指令是挂载软盘并把内核banana复制到软盘。
sudo mount -o loop floppy.img /mnt/kernel
sudo cp banana /mnt/kernel/banana