|
本帖最后由 wintoflash 于 2023-4-1 09:46 编辑
1. 方法1与方法2都是加载ISO内启动软盘镜像中的bootx64.efi,但是一个成功另一个失败。
方法2加载的(0xff),好像kernel不认识。
如果使用以下方法:
chainloader (0xff)/efi/boot/bootx64.efi boot=casper iso-scan/filename=/boot/imgs/ubuntu-18.04.6-desktop-amd64.iso noprompt noeject
kernel反馈:打不开\boot\imgs\ubuntu-18.04.6-desktop-amd64.iso
或许是kernel根本不理会UEFI建立的设备,而是抛弃UEFI环境,直接加载自己的驱动,然后探测有那些存在的设备,其中有没有传入指定的设备存在?
或许是kernel根本不理会UEFI建立的VenHw(EBE35AD9-40F5-AADE-0B919A46BF4b)/CDROM(1,11c,B40)这样类型的设备,
而只认PciRoot(0)/Pci(1,1)/Ata(S,M,0)/CDROM(1,11c,B40)这样类型的设备?
操作系统调用 BS->ExitBootServices 之后,所有的 UEFI 启动服务就都不能用了,BlockIo,GOP 之类的所有这些 Protocol 也不能用了。
操作系统是用自带的驱动自己探测,并读写硬盘的。
(0xff)/efi/boot/bootx64.efi 是 GRUB2 的 EFI 文件。你给它传参数是没用的,要直接传给内核。
2.方法3失败,是传入的参数缺失或是不正确?我觉得这是启动linux最麻烦的地方,每个分支的都不一样,而且同一分支的不同序号也不同。
方法三是正确的。报错是找不到 initrd。原因是你用的 Ubuntu 版本太老了。用 Ubuntu 22.04 就没问题。
老的 linux 内核,支持 EFI Handover,不支持 LoadFile2。新的 linux 内核,支持 LoadFile2,不支持 EFI Handover。
以前 G4E 用的是 EFI Handover,现在用的是 LoadFile2。
|
|