That is very helpful.
As far as debugging goes, my source level debugging for Nt32Pkg is messed
up and I haven't fixed it yet. SecMain immediately closes after opening
and debugging stops. Also, my test code from the previous emails crashes
Nt32 (run without debugging) instead of returning Invalid Parameter. For
now, I'm using the Intel UDK Debugger with a serial cable to my test box
instead of Nt32Pkg. I haven't tried EmulatorPkg yet because I'm working
purely off of UDK2010 instead of the full edk2.
I've gone a different way since my last email:
Since my ultimate goal is to have Load.efi as a boot option also, I used
efibootmgr in Ubuntu to add it to the boot variables.
There is no EFI_LOAD_OPTION in UDK2010, but I found out how boot variables
are stored here:
http://www.mythic-beasts.com/resources/macmini/bootvariables.html
In my Test.efi, I got the BootOrder variable and looped through until I
found the one with the same name I gave to Load.efi in efibootmgr. I then
stored the device path (which starts right after the null character that
ends the name) into a pointer. Now I just need to call LoadImage and
StartImage using that device path. Hopefully it works.
If there are other ways of doing this, please let me know! Thanks again!
On Wed, Feb 13, 2013 at 4:02 PM, Andrew Fish <af...@apple.com> wrote:
>
> On Feb 13, 2013, at 1:36 PM, Thomas Rognon <tcrog...@gmail.com> wrote:
>
> Thanks for helping me! Tried just L"Load.efi", but still no luck. I'm
> starting to research LoadImage and StartImage to use instead of the
> ShellLib, but Load Image needs the EFI_DEVICE_PATH_PROTOCOL for my efi
> image and that seems hard to figure out how to get.
>
>
> Your ImageHandle will contain an EFI_LOADED_IMAGE_PROTOCOL and this
> protocol contains the DeviceHandle. You can then use the DevicePathLib
> FileDevicePath()
> to make the device path that points to your file.
>
>
> https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2/MdePkg/Include/Library/DevicePathLib.h
>
> The important thing to remember is the volume names are made up by the
> shell and don't relate to the device path. Another way to say this is that
> L"fs1:" would map a device path like DeviceHandle. So only use directory
> and file names with FileDevicePath() library calls.
>
> You can also locate all the handles in the system that contain a file
> system protocol and grab the device path protocol instance from that handle
> and use it with the device path lib.
>
>
> Here is what my screen looks like:
>
>
> Have you tried running in one of the emulators and just source level
> debugging to see what is going on?
>
> https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2/Nt32Pkg/
> https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2/EmulatorPkg/
>
> Thanks,
>
> Andrew
>
> ============================
> fs1:\> Load.efi
> Inside Load.efi
>
> fs1:\> Test.efi
> ImageHandle: B86D1218
> ShellInitialize: Success
> ShellExecute: Invalid Parameter
>
> fs1:\>
> ============================
>
> Here are my .inf files, by the way:
> ###############################
> ## Test.inf
> ###############################
> [Defines]
> INF_VERSION = 0x00010005
> BASE_NAME = Test
> FILE_GUID = 144F4789-F85E-4097-AABA-D0D0781C5F3D
> MODULE_TYPE = UEFI_APPLICATION
> VERSION_STRING = 0.1
> ENTRY_POINT = UefiMain
>
> [Sources]
> Test.c
>
> [Packages]
> MdePkg/MdePkg.dec
> ShellPkg/ShellPkg.dec
>
> [LibraryClasses]
> UefiLib
> UefiApplicationEntryPoint
> ShellLib
>
> ###############################
> ## Load.inf
> ###############################
> [Defines]
> INF_VERSION = 0x00010005
> BASE_NAME = Load
> FILE_GUID = 15E7F2DC-27C2-4db6-8CDE-CB52007DA8A2
> MODULE_TYPE = UEFI_APPLICATION
> VERSION_STRING = 0.1
> ENTRY_POINT = UefiMain
>
> [Sources]
> Load.c
>
> [Packages]
> MdePkg/MdePkg.dec
>
> [LibraryClasses]
> UefiLib
> UefiApplicationEntryPoint
>
> On Wed, Feb 13, 2013 at 3:09 PM, Carsey, Jaben <jaben.car...@intel.com>wrote:
>
>> Try like this (no drive information) – that’s how I’ve used it before. *
>> ***
>>
>> ** **
>>
>> Status = ShellExecute (****
>>
>> ImageHandle,****
>>
>> L"Load.efi",****
>>
>> FALSE,****
>>
>> NULL,****
>>
>> NULL****
>>
>> );****
>>
>> ** **
>>
>> ** **
>>
>> -Jaben****
>>
>> ** **
>>
>> ** **
>>
>> *From:* Thomas Rognon [mailto:tcrog...@gmail.com]
>> *Sent:* Wednesday, February 13, 2013 12:06 PM
>>
>> *To:* edk2-devel@lists.sourceforge.net
>> *Subject:* Re: [edk2] ShellExecute****
>>
>> ** **
>>
>> I'm new to this and using CommandInit because I've seen it used after
>> ShellInitialize in other files. I removed it and now it doesn't hang, but
>> ShellExecute returns Invalid Parameter.****
>>
>> ** **
>>
>> My goal is to execute a uefi application from inside another uefi
>> application. Here is my code:****
>>
>> ** **
>>
>> ////////////////////////////////////////////////****
>>
>> // Test.c****
>>
>> ////////////////////////////////////////////////****
>>
>> ** **
>>
>> #include <Library/UefiLib.h>****
>>
>> #include <Library/UefiApplicationEntryPoint.h>****
>>
>> #include <Library/ShellLib.h>****
>>
>> ** **
>>
>> EFI_STATUS****
>>
>> EFIAPI****
>>
>> UefiMain (****
>>
>> IN EFI_HANDLE ImageHandle,****
>>
>> IN EFI_SYSTEM_TABLE *SystemTable****
>>
>> )****
>>
>> {****
>>
>> EFI_STATUS Status;****
>>
>> ****
>>
>> Print (L"ImageHandle: %x\n", ImageHandle);****
>>
>> ****
>>
>> Status = ShellInitialize ();****
>>
>> Print (L"ShellInitialize: %r\n", Status);****
>>
>> ****
>>
>> Status = ShellExecute (****
>>
>> ImageHandle,****
>>
>> L" Load.efi",****
>>
>> FALSE,****
>>
>> NULL,****
>>
>> NULL****
>>
>> );****
>>
>> Print (L"ShellExecute: %r\n", Status);****
>>
>> return EFI_SUCCESS;****
>>
>> }****
>>
>> ** **
>>
>> ////////////////////////////////////////////////****
>>
>> // Load.c****
>>
>> ////////////////////////////////////////////////****
>>
>> ** **
>>
>> #include <Library/UefiLib.h>****
>>
>> #include <Library/UefiApplicationEntryPoint.h>****
>>
>> ** **
>>
>> EFI_STATUS****
>>
>> EFIAPI****
>>
>> UefiMain (****
>>
>> IN EFI_HANDLE ImageHandle,****
>>
>> IN EFI_SYSTEM_TABLE *SystemTable****
>>
>> )****
>>
>> {****
>>
>> Print (L"Inside Load.efi.\n");****
>>
>> return EFI_SUCCESS;****
>>
>> }****
>>
>> ** **
>>
>> ** **
>>
>> fs1 contains both Load.efi and Test.efi. The output from Test.efi is:***
>> *
>>
>> ** **
>>
>> ImageHandle: B86D1518****
>>
>> ShellInitialize: Success****
>>
>> ShellExecute: Invalid Parameter****
>>
>> ** **
>>
>> On Wed, Feb 13, 2013 at 11:15 AM, Carsey, Jaben <jaben.car...@intel.com>
>> wrote:****
>>
>> Have you tried removing the CommandInit() call? Why do you need that?***
>> *
>>
>> ****
>>
>> *From:* Thomas Rognon [mailto:tcrog...@gmail.com]
>> *Sent:* Tuesday, February 12, 2013 8:43 PM
>> *To:* edk2-devel@lists.sourceforge.net
>> *Subject:* Re: [edk2] ShellExecute****
>>
>> ****
>>
>> Additional info:****
>>
>> It crashes on ShellExecute with a memory violation and I'm using 64 bit
>> UEFI 2.1+, UDK2010, and VS2008.****
>>
>> ****
>>
>> On Tue, Feb 12, 2013 at 10:30 PM, Thomas Rognon <tcrog...@gmail.com>
>> wrote:****
>>
>> UEFI Ninjas,****
>>
>> ****
>>
>> I can execute an uefi application from the shell as follows:****
>>
>> Shell>map -r****
>>
>> Shell>fs0:****
>>
>> fs0:>launch.efi****
>>
>> ****
>>
>> But when I try this, it hangs and I have to restart the machine:****
>>
>> Shell>map -r****
>>
>> Shell>fs0:****
>>
>> fs0:>test.efi****
>>
>> ****
>>
>> where test.efi executes only the following code in UefiMain:****
>>
>> ShellInitialize ();****
>>
>> CommandInit ();****
>>
>> ShellExecute (ImageHandle, L"fs0:\\launch.efi", FALSE, NULL, NULL);****
>>
>> return EFI_SUCCESS;****
>>
>> ****
>>
>> where ImageHandle is the parameter passed into UefiMain.****
>>
>> ****
>>
>> If anyone can help, I would appreciate it very much!****
>>
>> ****
>>
>> Thomas Rognon****
>>
>> ****
>>
>>
>>
>> ------------------------------------------------------------------------------
>> Free Next-Gen Firewall Hardware Offer
>> Buy your Sophos next-gen firewall before the end March 2013
>> and get the hardware for free! Learn more.
>> http://p.sf.net/sfu/sophos-d2d-feb
>> _______________________________________________
>> edk2-devel mailing list
>> edk2-devel@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/edk2-devel****
>>
>> ** **
>>
>>
>> ------------------------------------------------------------------------------
>> Free Next-Gen Firewall Hardware Offer
>> Buy your Sophos next-gen firewall before the end March 2013
>> and get the hardware for free! Learn more.
>> http://p.sf.net/sfu/sophos-d2d-feb
>> _______________________________________________
>> edk2-devel mailing list
>> edk2-devel@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/edk2-devel
>>
>>
>
> ------------------------------------------------------------------------------
> Free Next-Gen Firewall Hardware Offer
> Buy your Sophos next-gen firewall before the end March 2013
> and get the hardware for free! Learn more.
>
> http://p.sf.net/sfu/sophos-d2d-feb_______________________________________________
> edk2-devel mailing list
> edk2-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/edk2-devel
>
>
>
>
> ------------------------------------------------------------------------------
> Free Next-Gen Firewall Hardware Offer
> Buy your Sophos next-gen firewall before the end March 2013
> and get the hardware for free! Learn more.
> http://p.sf.net/sfu/sophos-d2d-feb
> _______________________________________________
> edk2-devel mailing list
> edk2-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/edk2-devel
>
>
------------------------------------------------------------------------------
Free Next-Gen Firewall Hardware Offer
Buy your Sophos next-gen firewall before the end March 2013
and get the hardware for free! Learn more.
http://p.sf.net/sfu/sophos-d2d-feb
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/edk2-devel