From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id EB27F1A1DF4 for ; Tue, 20 Sep 2016 12:13:57 -0700 (PDT) Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 531FE3D95E; Tue, 20 Sep 2016 19:13:57 +0000 (UTC) Received: from lacos-laptop-7.usersys.redhat.com (ovpn-116-72.phx2.redhat.com [10.3.116.72]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u8KJDtoi005822; Tue, 20 Sep 2016 15:13:56 -0400 To: Saqib Khan References: <2c8f7b31-7cc5-38cf-a56f-d60229ace8e9@redhat.com> Cc: edk2-devel@ml01.01.org, "Ni, Ruiyu" From: Laszlo Ersek Message-ID: Date: Tue, 20 Sep 2016 21:13:55 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.2.0 MIME-Version: 1.0 In-Reply-To: X-Scanned-By: MIMEDefang 2.68 on 10.5.11.27 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.30]); Tue, 20 Sep 2016 19:13:57 +0000 (UTC) Subject: Re: Help Required legacy booting from an EFI X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 20 Sep 2016 19:13:58 -0000 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit CC'ing Ray On 09/20/16 20:38, Saqib Khan wrote: > > > On Mon, Sep 19, 2016 at 10:49 PM, Laszlo Ersek > wrote: > > On 09/19/16 17:00, Saqib Khan wrote: > > Hello all, this is my first post to this list and i am very new to edk2 > > development. > > > > I started by building BootManagerMenuApp with following functionality > > > > - Boot from BootManagerManueApp > > - Run an Helloworld EFI > > - Run windows 7 EFI to boot windows 7 > > > > Now i want to develop an EFI which will first run Helloworld EFI then it > > will boot windows 7 which is installed on legacy boot (NOT EFI). > > > > I have looked through http://bluestop.org/edk2/docs/trunk/ > documentation > > thoroughly but i am not able to get any thing for legacy boot from an EFI. > > > > > > It will be helpful if someone guide me the flow for legacy booting from an > > EFI . > > You can add your EFI application to a SysPrep#### load option, then the > legacy-booted Windows OS to a normal Boot#### load option. > > > Sysprep is not my option . :-( > > > > > See "3.1.7 Required System Preparation Applications" in the UEFI-2.6 > spec, about the ordering between SysPrep#### and Boot####. > > Furthermore, legacy boot can be triggered by using a BBS (BIOS Boot > Specification) device path in the Boot#### option. This devpath node > type is documented in UEFI-2.6 "Table 98. Device Node Table", and in the > Compatibility Support Module Specification, rev 0.98, "3.2.1 Legacy BIOS > Protocol", near BBS_BBS_DEVICE_PATH. > > > > Booting using BBS is my option,i was already looking for this and I have > attempted to modify EFIBootManagerMenuApp to work with legacy boot used (). > > I have system with CSM support so essentially i will be doing all my > work on physical system not on virtual machine. > > The detail you provided about BBS device path and then adding it to boot > menu is abstract for me .if you can detail this procedure a bit it will > be helpful, if required I can share the code snippet with you It's been some time since I last tried CSM / legacy boot, but I think when your platform BDS (= PlatformBootManagerLib instance) calls the UefiBootManagerLib function called EfiBootManagerRefreshAllBootOption(), that should generate (among other boot options) BBS boot options for all suitable legacy OSes. It seems that for this, you should link IntelFrameworkModulePkg/Library/LegacyBootManagerLib/LegacyBootManagerLib.inf into all the drivers and modules in your firmware -- via NULL library resolution -- that consume UefiBootManagerLib. In OVMF's case at least, the set of affected drivers is: MdeModulePkg/Application/UiApp/UiApp.inf MdeModulePkg/Universal/BdsDxe/BdsDxe.inf MdeModulePkg/Universal/DriverHealthManagerDxe/DriverHealthManagerDxe.inf NetworkPkg/HttpBootDxe/HttpBootDxe.inf The important ones from these modules are likely the first two, UiApp and BdsDxe. (Theoretically any consumer of UefiBootManagerLib could call EfiBootManagerRefreshAllBootOption(), and at that point you might want LegacyBootManagerLib to have registered its "RefreshLegacyBootOption" callback at construction time.) In addition, IntelFrameworkModulePkg/Library/LegacyBootMaintUiLib/LegacyBootMaintUiLib.inf should likely be linked, via NULL resolution, into MdeModulePkg/Application/UiApp/UiApp.inf minimally. (Example: please see the CSM_ENABLE parts under "MdeModulePkg/Universal/BdsDxe/BdsDxe.inf" and "MdeModulePkg/Application/UiApp/UiApp.inf" in OvmfPkg/OvmfPkg*dsc. You'll find the above NULL library resolutions there.) > > Apart from this I am facing another issue, i created a boot-able USB > with EFI 2.0 shell in it . I have gabby motherboard(gigabyte h97- hd3) , > I am not able to launch EFI shell with any configuration it directly > boots windows no matter what I do, I attempted all USB port, and all > configuration like "boot from UEFI only" disabling secure boot. when I > plug US > B in another system which support UEFI but not CSM it works fine after > adding shell entry from USB. what might I be missing here?can you guide > in this case? No clue. My take would have been "disable secure boot because your shell binary is not signed", but you already tried that. Platform BDS is platform-dependent, as its name says. Get another development board? Laszlo