On 08/28/13 14:52, Laszlo Ersek wrote: > This filters the UEFI boot option list to those that the user requested > via fw_cfg, reorders them, and kills off the (non-requested) rest. UEFI > boot options of the form > > > HD(1,800,4e000,87f09d6f-dc40-4eaf-b90b-9c2c7d4ffdb5)File(\EFI\opensuse\grubx64.efi) > > don't match *any* output from the OFW->UEFI device path translation, > hence they are always removed. I assumed that would be no problem, since > such (root-less, ie. relative) device paths should be unbootable anyway. > Apparently edk2 can boot them nonetheless?
Sigh. Yes, that's the case. See BdsLibBootViaBootOption() in "IntelFrameworkModulePkg/Library/GenericBdsLib/BdsBoot.c": // // If it's Device Path that starts with a hard drive path, append it with the front part to compose a // full device path // WorkingDevicePath = NULL; if ((DevicePathType (DevicePath) == MEDIA_DEVICE_PATH) && (DevicePathSubType (DevicePath) == MEDIA_HARDDRIVE_DP)) { WorkingDevicePath = BdsExpandPartitionPartialDevicePathToFull ( (HARDDRIVE_DEVICE_PATH *)DevicePath ); if (WorkingDevicePath != NULL) { DevicePath = WorkingDevicePath; } } The simple StrnCmp() call in Match() [OvmfPkg/Library/PlatformBdsLib/QemuBootOrder.c] regresses this logic, because it kills the relative devpath -- starting with HD(...) -- before it could reach the quoted completion. I'm not sure how to resolve this -- even in theory. The OpenFirmware device paths end *exactly before* the HD() part -- they simply don't contain the necessary information. The output of *any* OFW->UEFI translation can be matched *only* against the leading UEFI device sub-path. Which the HD(...) format currently prepared by efibootmgr lacks. It could be worked around, maybe, by completing the relative devpath (with BdsExpandPartitionPartialDevicePathToFull(), see above) before matching it against the output of the OFW->UEFI translation. Laszlo ------------------------------------------------------------------------------ Learn the latest--Visual Studio 2012, SharePoint 2013, SQL 2012, more! Discover the easy way to master current and previous Microsoft technologies and advance your career. Get an incredible 1,500+ hours of step-by-step tutorial videos with LearnDevNow. Subscribe today and save! http://pubads.g.doubleclick.net/gampad/clk?id=58040911&iu=/4140/ostg.clktrk _______________________________________________ edk2-devel mailing list edk2-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/edk2-devel