#1 - 2018-3-18 01:59
Lrolic.holic (holic都是异端!lrolic.rng如是说.)
设备:surface pro 3乞丐版
焦点:GUID分区表的ESP分区
问题:引导咋写啊为啥啊咋整啊
关于引导,主要纠结于GRUB4DOS,grub的语法,以及它的配置文件(脚本?);
关于配置文件,先说目录结构
C12A7328-F81F-11D2-BA4B-00A0C93EC93B这东西分区,可以说是esp分区,系统保留分区,一个孤独的被抛弃的FAT32分区,至于这个“分区类型GUID ”还是“磁盘GUID”还是“分区GUID”还是“卷GUID”是个啥,我估计弄不懂了;总之BOOTx64.efi就是在这里的,暂且说它是esp分区。
1, Esp分区里有boot和EFI两个文件夹,windows boot manager是{通过esp\efi\bootx64.efi启动的}还是{随着efi shell在bios固件里启动的}还是{windows boot manager本身就是bootx64.efi};
2, Efi固件肯定不是写在硬盘里的,如此肯定,是因为同学的傻多戴开机按f12有EFI boot选项,列出(由efi所搜寻?)所有efi启动项,同一磁盘甚至有2-3个EFI启动项,初步判定系统有个优于BCD的存在,默默管理着启动项,但不知这个机制是一个文件还是一串代码,它存储在哪里?
3, 就是在这个一片混乱的情况下,我安装了rEFInd,一个efi环境下的启动管理程序,安装方法是复制给esp分区一个文件夹,并用easyUEFI去添加启动项:{文件路径:\EFI\refind\refind_x64.efi},easyUEFI所修改的奇怪的东西就是问题2中的,emmm总之是添加进去了,我把它的优先级提到了windows boot manager之上,关了安全启动,一切正常。eEFInd可以引导linux发行版,win,黑苹果,我去它的配置文件看了看这是什么黑魔法,得到启动项的语法
例如:
menuentry "My Mac OS X" {
icon \EFI\refind\icons\os_mac.png
volume "OS X boot"
loader \System\Library\CoreServices\boot.efi
disabled
}
和
menuentry "Windows 7" {
loader \EFI\Microsoft\Boot\bootmgfw.efi
disabled
}
还有
menuentry Ubuntu {
loader /EFI/ubuntu/grubx64.efi
icon /EFI/refind/icons/os_linux.png
disabled
}
看到这里我就很难过,因为和PhoenixOS生成的grub.cfg有那么一些不一样;
4, PhoenixOS
凤凰系统,说到底还是Androidx86,它在自动安装过程中在ESP分区中写了一个PHOENIXOS文件夹,里面有启动所必须的内核文件还有一个我不清楚的initrd.img,phoenixos自建的grub配置文件的一部分是这样的:
menuentry "Phoenix OS" {
search --file --set=root /EFI/PhoenixOS/kernel
linux /EFI/PhoenixOS/kernel quiet root=/dev/ram0 androidboot.hardware=android_x86 SRC=/PhoenixOS vga=788
initrd /EFI/PhoenixOS/initrd.img
}
看到这里我就有点开心,甭管phoenixos是咋启动失败的,我都要试试我的复制粘贴大法于是这一段就顺理成章的grub.cfg->menu.lst
menuentry 'Phoenix OS' {
icon \EFI\refind\icons\os_mac.png
volume "OS X boot"
set root=(hd1,gpt4)
linux /PhoenixOS/kernel root=/dev/ram0 androidboot.hardware=android_x86 quiet DATA= vga=788
initrd /PhoenixOS/initrd.img
boot
}
以上是我在rEFInd中发挥聪明才智写出来的,原理都不懂,不过安卓x86终于正常启动了,当时就没去深究;
5,导火索是学校发新书了,2016年出版的《Linux操作系统实用教程》竟然只提供MBR分区表硬盘的安装方法,而且给的办法一点都不解释明白,可以,这很百度经验= =,
诸位dalao,本萌新实在想弄懂GPT,grubfordos,refind,efi这几个东西之间的关系,确切的说是想要原理(甚至efi shell的),之后可以自由编写启动脚本,无奈百度不出,谷歌不懂,走投无路了
焦点:GUID分区表的ESP分区
问题:引导咋写啊为啥啊咋整啊
关于引导,主要纠结于GRUB4DOS,grub的语法,以及它的配置文件(脚本?);
关于配置文件,先说目录结构
C12A7328-F81F-11D2-BA4B-00A0C93EC93B这东西分区,可以说是esp分区,系统保留分区,一个孤独的被抛弃的FAT32分区,至于这个“分区类型GUID ”还是“磁盘GUID”还是“分区GUID”还是“卷GUID”是个啥,我估计弄不懂了;总之BOOTx64.efi就是在这里的,暂且说它是esp分区。
1, Esp分区里有boot和EFI两个文件夹,windows boot manager是{通过esp\efi\bootx64.efi启动的}还是{随着efi shell在bios固件里启动的}还是{windows boot manager本身就是bootx64.efi};
2, Efi固件肯定不是写在硬盘里的,如此肯定,是因为同学的傻多戴开机按f12有EFI boot选项,列出(由efi所搜寻?)所有efi启动项,同一磁盘甚至有2-3个EFI启动项,初步判定系统有个优于BCD的存在,默默管理着启动项,但不知这个机制是一个文件还是一串代码,它存储在哪里?
3, 就是在这个一片混乱的情况下,我安装了rEFInd,一个efi环境下的启动管理程序,安装方法是复制给esp分区一个文件夹,并用easyUEFI去添加启动项:{文件路径:\EFI\refind\refind_x64.efi},easyUEFI所修改的奇怪的东西就是问题2中的,emmm总之是添加进去了,我把它的优先级提到了windows boot manager之上,关了安全启动,一切正常。eEFInd可以引导linux发行版,win,黑苹果,我去它的配置文件看了看这是什么黑魔法,得到启动项的语法
例如:
menuentry "My Mac OS X" {
icon \EFI\refind\icons\os_mac.png
volume "OS X boot"
loader \System\Library\CoreServices\boot.efi
disabled
}
和
menuentry "Windows 7" {
loader \EFI\Microsoft\Boot\bootmgfw.efi
disabled
}
还有
menuentry Ubuntu {
loader /EFI/ubuntu/grubx64.efi
icon /EFI/refind/icons/os_linux.png
disabled
}
看到这里我就很难过,因为和PhoenixOS生成的grub.cfg有那么一些不一样;
4, PhoenixOS
凤凰系统,说到底还是Androidx86,它在自动安装过程中在ESP分区中写了一个PHOENIXOS文件夹,里面有启动所必须的内核文件还有一个我不清楚的initrd.img,phoenixos自建的grub配置文件的一部分是这样的:
menuentry "Phoenix OS" {
search --file --set=root /EFI/PhoenixOS/kernel
linux /EFI/PhoenixOS/kernel quiet root=/dev/ram0 androidboot.hardware=android_x86 SRC=/PhoenixOS vga=788
initrd /EFI/PhoenixOS/initrd.img
}
看到这里我就有点开心,甭管phoenixos是咋启动失败的,我都要试试我的复制粘贴大法于是这一段就顺理成章的grub.cfg->menu.lst
menuentry 'Phoenix OS' {
icon \EFI\refind\icons\os_mac.png
volume "OS X boot"
set root=(hd1,gpt4)
linux /PhoenixOS/kernel root=/dev/ram0 androidboot.hardware=android_x86 quiet DATA= vga=788
initrd /PhoenixOS/initrd.img
boot
}
以上是我在rEFInd中发挥聪明才智写出来的,原理都不懂,不过安卓x86终于正常启动了,当时就没去深究;
5,导火索是学校发新书了,2016年出版的《Linux操作系统实用教程》竟然只提供MBR分区表硬盘的安装方法,而且给的办法一点都不解释明白,可以,这很百度经验= =,
诸位dalao,本萌新实在想弄懂GPT,grubfordos,refind,efi这几个东西之间的关系,确切的说是想要原理(甚至efi shell的),之后可以自由编写启动脚本,无奈百度不出,谷歌不懂,走投无路了
linux 内核路径 参数
initrd 内存镜像路径
引导器本身是汇编
所以它大概两个都编辑
bcd和grub2都是装载/boot/efi/EFI/里的(这其实就是那个efi分区)
UEFI启动时候会找到第一个EFI分区,然后就读里面的文件夹
我一般不用grub4dos的