作者并非从事嵌入式底层工作,完全凭兴趣得出此文,并没有详细做实验验证,仅根据阅读资料总结得出。
bios使用MBR分区表
1、Bios + windows:
Bios 读取 MBR 前446字节的引导程序到内存并执行,MBR里面也有分区表,引导程序根据这个分区表找到引导分区,再加载引导分区的第一个扇区(PBR)的二级引导程序,二级引导加载下一步的bootmgr (bootloader)。
2、bios + linux
Bios 读取 MBR 前446字节(GRUB的boot.img)的引导程序到内存并执行,MBR里面也有分区表,引导程序读取分区表,并加载core.img,MBR和第一个分区中间的空隙放的是GRUB的core.img,从/boot/grub中读取配置和其他功能代码从而加载系统。
uefi使用gpt分区表
3、uefi + windows
Uefi自身可以识别fat32文件系统,uefi启动时从第二个扇区(第一个扇区还是MBR,对于uefi无效)自动扫描分区表,根据gpt分区表找到ESP启动分区,在这个分区里面找到.efi文件(bootloader),用这个文件加载系统内核
4、uefi + linux
Uefi自身可以识别fat32文件系统,uefi启动时从第二个扇区(第一个扇区还是MBR,对于uefi无效)自动扫描分区表,根据gpt分区表找到ESP启动分区,在这个分区里面找到.efi文件(bootloader,名字可能为grubx64.efi,其实就是core.img,这时候是不需要boot.img的),用这个文件加载系统内核