首先,我来解释一下我的情况
- 设备:华硕 x205ta,配备 32GB eMMC(已安装 Windows 8.1+Bing)。我们称之为
/dev/mmcblk0
- usb 闪存驱动器:64GB Sandisk ultra。安装了 Ubuntu 14.04。我们称之为
/dev/sda
查看结果parted -l
root@chkwag-X205TA:/home/chkwag# parted -l
Model: SanDisk SanDisk Ultra (scsi)
Disk /dev/sda: 31.6GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number Start End Size File system Name Flags
1 1049kB 2048MB 2047MB linux-swap(v1)
2 2048MB 2147MB 99.6MB fat32 boot
3 2147MB 31.6GB 29.5GB ext4
Error: /dev/mmcblk0rpmb: unrecognised disk label
Error: /dev/mmcblk0boot0: unrecognised disk label
Error: /dev/mmcblk0boot1: unrecognised disk label
Model: MMC SDW32G (sd/mmc)
Disk /dev/mmcblk0: 31.3GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number Start End Size File system Name Flags
1 1049kB 106MB 105MB fat32 EFI system partition boot
2 106MB 240MB 134MB Microsoft reserved partition msftres
3 240MB 20.5GB 20.3GB ntfs Basic data partition msftdata
4 20.5GB 31.3GB 10.7GB ntfs Basic data partition hidden, diag
eMMC 和闪存驱动器各有一个 ESP(格式:FAT32)。目前,我正在通过 GRUB2(名为bootia32.efi
)在 USB 闪存驱动器的 ESP 中加载 Ubuntu,方法是添加指向此文件的 UEFI 菜单项bootia32.efi
。(下面的条目grub-stable
)
检查 UEFI 菜单条目:
root@chkwag-X205TA:/home/chkwag# efibootmgr -v
BootCurrent: 0004
Timeout: 2 seconds
BootOrder: 0005,0007,0006,000C,0000,0001,0002,0003
Boot0000* Windows Boot Manager HD(1,800,32000,321f056d-350b-44ac-ac85-b19a4fac6b77)File(\EFI\MICROSOFT\BOOT\BOOTMGFW.EFI)WINDOWS.........x...B.C.D.O.B.J.E.C.T.=.{.9.d.e.a.8.6.2.c.-.5.c.d.d.-.4.e.7.0.-.a.c.c.1.-.f.3.2.b.3.4.4.d.4.7.9.5.}...e................
Boot0001* UEFI:CD/DVD Drive BIOS(81,0,00)
Boot0002* UEFI:Removable Device BIOS(82,0,00)
Boot0003* UEFI:Network Device BIOS(83,0,00)
Boot0005* grub_stable HD(2,3d0800,2f800,97a32bdd-cbf7-4583-a071-d205f5134f43)File(\EFI\BOOT\bootia32.efi)
Boot0006* fakeMS HD(1,800,32000,321f056d-350b-44ac-ac85-b19a4fac6b77)File(\EFI\FAKE_MS\BOOT\BOOTMGFW.EFI)
Boot0007* grub1 HD(1,800,32000,321f056d-350b-44ac-ac85-b19a4fac6b77)File(\EFI\GRUB32.EFI)
Boot000C* UEFI: SanDisk SanDisk Ultra PMAP ACPI(a0341d0,0)PCI(14,0)USB(2,0)USB(2,0)HD(2,3d0800,2f800,97a32bdd-cbf7-4583-a071-d205f5134f43)..BO
root@chkwag-X205TA:/home/chkwag#
从构建双启动系统的意义上讲,这已经足够了,但我想更进一步,让 UEFI 固件从 eMMC 的 ESP 加载 GRUB2(这只是个人探索)。为此,我刚刚复制了bootia32.efi
之前在 eMMC 的 ESP 中使用的内容,并创建了一个 UEFI 菜单项,明确加载此文件。(名为 的条目grub1
只是grub32.efi
的重命名版本bootia32.efi
)
理论上,我相信这是正确的。但是,当我使用此 UEFI 菜单项时,它将不起作用,只会执行也位于同一 ESP 中的原始 Windows 启动管理器。
我尝试了所有我能尝试的方法,比如重命名或用相同名称bootia32.efi
替换原来的 Windows 启动管理器 ( bootmgfw.efi
) 。但所有尝试都失败了。bootia32.efi
正如我所说的,如果一切都按照理论正确设置,那么我遗漏了什么?还有什么可以以某种方式忽略加载 GRUB2 的 UEFI 菜单项并决定加载 Windows 启动管理器?或者还有另一种可能性,bootia32.efi
eMMC 中的 ESP 不知何故神奇地不起作用?
启动顺序在这里不应该成为问题,因为如果我的菜单项正确,那么就不需要继续下一个启动顺序。此外,我已经确认,如果附近没有找到 GRUB2,bootia32.efi
单独加载仍应该可以得到命令行界面的 GRUB2 。grub.cfg
答案1
为了验证自定义 EFI 固件是否会导致我无法执行我想要的操作,我向华硕技术支持寻求帮助。我收到的回复是,他们无法回答这种需要修改固件的尝试。
虽然这个答案没有阐明问题的原因,但它确实增加了固件被操纵的可能性。对 BIOS 固件进行逆向工程对于进一步调查是必要的,但由于这种方法的深度和技术难度,在这里结束这个问题是合适的。