Re: [edk2] [Help needed] Failed to enable new shell in edkII

Subject: Re: [edk2] [Help needed] Failed to enable new shell in edkII

From: cheney chen <wjchen7@hotmail.com>

To: "edk2-devel@lists.sourceforge.net" <edk2-devel@lists.sourceforge.net>

Date: 2014-05-23 11:42:26

By the way, looks like the entry point of Shell.efi was called after ProcessLibraryConstructorList(). The shell protocols are to be installed in Shell.efi's entry point. So it seems to me that these protocols are consumed by library constructor prior to they are installed. I must be misunderstanding something. Can anybody direct me to the right way?

Thanks,
Cheney


From: wjchen7@hotmail.com
To: edk2-devel@lists.sourceforge.net
Date: Fri, 23 May 2014 03:33:12 +0000
Subject: [edk2] [Help needed] Failed to enable new shell in edkII

Hi all,

I downloaded the source from the latest edkII tree. Currently the shell application used is from EdkShellBinPkg/FullShell/FullShell.inf, which is standard shell built as binary. What I want to try is to build a new shell from source, located in ShellPkg/Application/Shell/Shell.inf.

I followed the steps described in ShellPkg\Readme.txt. 

1. Add this shell build to the NT32 build:
   Add the shell.inf to the [components] section as it is in the ShellPkg.dsc.

2. Update system PCDs to support this new module
   Update the PCD as follows using the Shell's PCD:
   gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdShellFile|{ 0x83, 0xA5, 0x04, 0x7C, 0x3E, 0x9E, 0x1C, 0x4F, 0xAD, 0x65, 0xE0, 0x52, 0x68, 0xD0, 0xB4, 0xD1 }

3. Remove the old shell from the NT32 Firmware list
   Remove the FILE APPLICATION section for the old shell.

4. Add this shell to the NT32 firmware list
   Add the Shell.INF to the end of the list of DXE modules.

5. Build NT32

However, it doesn't build. The error shown is something like "Instance of library class [ShellCommandLib] is not found". I solved this build error by adding the these libraries into Nt32Pkg.dsc, section [LibraryClasses.common.UEFI_APPLICATION].

  ShellLib|ShellPkg/Library/UefiShellLib/UefiShellLib.inf
  ShellCommandLib|ShellPkg/Library/UefiShellCommandLib/UefiShellCommandLib.inf
  FileHandleLib|ShellPkg/Library/UefiFileHandleLib/UefiFileHandleLib.inf
  SortLib|ShellPkg/Library/UefiSortLib/UefiSortLib.inf
  HandleParsingLib|ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.inf
  PathLib|ShellPkg/Library/BasePathLib/BasePathLib.inf

Now it builds. But when I was trying "build run", there is an assert error shown as "ASSERT_EFI_ERROR(Status = Not Found)". After tracing into debug code, the assert was found coming from ProcessLibraryConstructorList() function in AutoGen.c file.

  Status = ShellLibConstructor (ImageHandle, SystemTable);
  ASSERT_EFI_ERROR (Status);

The constructor tried to locate either UEFI2.0 shell or older shell protocols. But neither was found so the constructor returned with "EFI_NOT_FOUND" which led to the assert error.

Can anyone help? What I am missing?

Thanks,
Cheney

------------------------------------------------------------------------------ "Accelerate Dev Cycles with Automated Cross-Browser Testing - For FREE Instantly run your Selenium tests across 300+ browser/OS combos. Get unparalleled scalability from the best Selenium testing platform available Simple to use. Nothing to install. Get started now for free." http://p.sf.net/sfu/SauceLabs
_______________________________________________ edk2-devel mailing list edk2-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/edk2-devel