public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
* Help with Logo Display Problems
@ 2020-05-10  3:00 jim slaughter
  2020-05-11 16:41 ` [edk2-devel] " Laszlo Ersek
  2020-05-11 18:27 ` Andrew Fish
  0 siblings, 2 replies; 6+ messages in thread
From: jim slaughter @ 2020-05-10  3:00 UTC (permalink / raw)
  To: devel

[-- Attachment #1: Type: text/plain, Size: 632 bytes --]

Hello,

I have followed previous directions provided and the build works ok. I
built an IA32 generic binary.
I cannot tell if the logo code is working since I cannot see the logo on my
display.

I do see a file in
the ~/src/edk2-stable202002/Build/MdeModule/DEBUG_GCC5/IA32/$ directory,
called LogoDxe.efi and another called LogoDxe. This leads me to
believe that the Logo entry point is in the image.

After the build I did find an empty map file? How do I get a map of the
build?

How do I debug this problem? I have no debugger. Can I freely use
DEBUG((...........)); .

Any help please. I am stuck. Thank you.
-- 
Jim Slaughter

[-- Attachment #2: Type: text/html, Size: 903 bytes --]

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [edk2-devel] Help with Logo Display Problems
  2020-05-10  3:00 Help with Logo Display Problems jim slaughter
@ 2020-05-11 16:41 ` Laszlo Ersek
  2020-05-11 17:12   ` jim slaughter
       [not found]   ` <160E089A62B6865C.18245@groups.io>
  2020-05-11 18:27 ` Andrew Fish
  1 sibling, 2 replies; 6+ messages in thread
From: Laszlo Ersek @ 2020-05-11 16:41 UTC (permalink / raw)
  To: devel, jim.slaughter

On 05/10/20 05:00, jim slaughter wrote:
> Hello,
> 
> I have followed previous directions provided and the build works ok. I
> built an IA32 generic binary.
> I cannot tell if the logo code is working since I cannot see the logo on my
> display.
> 
> I do see a file in
> the ~/src/edk2-stable202002/Build/MdeModule/DEBUG_GCC5/IA32/$ directory,
> called LogoDxe.efi and another called LogoDxe. This leads me to
> believe that the Logo entry point is in the image.
> 
> After the build I did find an empty map file? How do I get a map of the
> build?
> 
> How do I debug this problem? I have no debugger. Can I freely use
> DEBUG((...........)); .
> 
> Any help please. I am stuck. Thank you.
> 

Does your PlatformBootManagerLib instance call BootLogoEnableLogo() in
PlatformBootManagerAfterConsole()?

Thanks,
Laszlo


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [edk2-devel] Help with Logo Display Problems
  2020-05-11 16:41 ` [edk2-devel] " Laszlo Ersek
@ 2020-05-11 17:12   ` jim slaughter
       [not found]   ` <160E089A62B6865C.18245@groups.io>
  1 sibling, 0 replies; 6+ messages in thread
From: jim slaughter @ 2020-05-11 17:12 UTC (permalink / raw)
  To: Laszlo Ersek; +Cc: devel

[-- Attachment #1: Type: text/plain, Size: 1120 bytes --]

Hello,

I do not know. Will look into this.

Is this call,  BootLogoEnableLogo(),   normally in the code?
I have not added any code in this area.

Jim S.
;

On Mon, May 11, 2020 at 11:41 AM Laszlo Ersek <lersek@redhat.com> wrote:

> On 05/10/20 05:00, jim slaughter wrote:
> > Hello,
> >
> > I have followed previous directions provided and the build works ok. I
> > built an IA32 generic binary.
> > I cannot tell if the logo code is working since I cannot see the logo on
> my
> > display.
> >
> > I do see a file in
> > the ~/src/edk2-stable202002/Build/MdeModule/DEBUG_GCC5/IA32/$ directory,
> > called LogoDxe.efi and another called LogoDxe. This leads me to
> > believe that the Logo entry point is in the image.
> >
> > After the build I did find an empty map file? How do I get a map of the
> > build?
> >
> > How do I debug this problem? I have no debugger. Can I freely use
> > DEBUG((...........)); .
> >
> > Any help please. I am stuck. Thank you.
> >
>
> Does your PlatformBootManagerLib instance call BootLogoEnableLogo() in
> PlatformBootManagerAfterConsole()?
>
> Thanks,
> Laszlo
>
>

-- 
Jim Slaughter

[-- Attachment #2: Type: text/html, Size: 1739 bytes --]

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [edk2-devel] Help with Logo Display Problems
       [not found]   ` <160E089A62B6865C.18245@groups.io>
@ 2020-05-11 18:04     ` jim slaughter
  2020-05-11 21:26       ` Laszlo Ersek
  0 siblings, 1 reply; 6+ messages in thread
From: jim slaughter @ 2020-05-11 18:04 UTC (permalink / raw)
  To: devel, jim slaughter; +Cc: Laszlo Ersek

[-- Attachment #1: Type: text/plain, Size: 1489 bytes --]

Hello,

Yes BootLogoEnableLogo() appears in several files and is not commented out.

Files:
PlatformBm.c
BdsPlatform.c
BootLogoLib.c
 BootLogoLib.h
PlatformBm.c

Jim Slaughter
;

On Mon, May 11, 2020 at 12:12 PM jim slaughter via groups.io <jim.slaughter=
sage-micro.com@groups.io> wrote:

> Hello,
>
> I do not know. Will look into this.
>
> Is this call,  BootLogoEnableLogo(),   normally in the code?
> I have not added any code in this area.
>
> Jim S.
> ;
>
> On Mon, May 11, 2020 at 11:41 AM Laszlo Ersek <lersek@redhat.com> wrote:
>
>> On 05/10/20 05:00, jim slaughter wrote:
>> > Hello,
>> >
>> > I have followed previous directions provided and the build works ok. I
>> > built an IA32 generic binary.
>> > I cannot tell if the logo code is working since I cannot see the logo
>> on my
>> > display.
>> >
>> > I do see a file in
>> > the ~/src/edk2-stable202002/Build/MdeModule/DEBUG_GCC5/IA32/$ directory,
>> > called LogoDxe.efi and another called LogoDxe. This leads me to
>> > believe that the Logo entry point is in the image.
>> >
>> > After the build I did find an empty map file? How do I get a map of the
>> > build?
>> >
>> > How do I debug this problem? I have no debugger. Can I freely use
>> > DEBUG((...........)); .
>> >
>> > Any help please. I am stuck. Thank you.
>> >
>>
>> Does your PlatformBootManagerLib instance call BootLogoEnableLogo() in
>> PlatformBootManagerAfterConsole()?
>>
>> Thanks,
>> Laszlo
>>
>>
>
> --
> Jim Slaughter
> 
>
>

-- 
Jim Slaughter

[-- Attachment #2: Type: text/html, Size: 2964 bytes --]

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [edk2-devel] Help with Logo Display Problems
  2020-05-10  3:00 Help with Logo Display Problems jim slaughter
  2020-05-11 16:41 ` [edk2-devel] " Laszlo Ersek
@ 2020-05-11 18:27 ` Andrew Fish
  1 sibling, 0 replies; 6+ messages in thread
From: Andrew Fish @ 2020-05-11 18:27 UTC (permalink / raw)
  To: devel, jim slaughter

[-- Attachment #1: Type: text/plain, Size: 8225 bytes --]


Jim,

Sorry wrote this yesterday and did not hit send....

All my example are from OVMF using QEMU on a Mac. You should be able to run OVMF too as a way to learn things. 

> On May 9, 2020, at 8:00 PM, jim slaughter <jim.slaughter@sage-micro.com> wrote:
> 
> Hello,
> 
> I have followed previous directions provided and the build works ok. I built an IA32 generic binary.
> I cannot tell if the logo code is working since I cannot see the logo on my display.
> 
> I do see a file in the ~/src/edk2-stable202002/Build/MdeModule/DEBUG_GCC5/IA32/$ directory, called LogoDxe.efi and another called LogoDxe. This leads me to believe that the Logo entry point is in the image.
> 

So that means it got built. 

> After the build I did find an empty map file? How do I get a map of the build?
> 

You can generate a build log by adding '-y build.log' to the build command. Here is a OVMF example [1].

If you just want to inspect a FD or FV (Firmware Device is the ROM image composed of Firmware Volumes and other bits). Here is an OVMF example. Here is an OVMF example [2].

> How do I debug this problem? I have no debugger. Can I freely use DEBUG((...........)); .
> 

In general yes. The DEBUG_ERROR level should always print out. 

You should see this in the serial output when the driver loads:
Loading driver at 0x00007ABE000 EntryPoint=0x00007AC02BB LogoDxe.efi

It failed for me as Xcode currently does not support injecting resource sections in to PE/COFF images. I'm just mention this as I can't show you the expected output, but your toolchain should do the right thing. 
HII Image Package with logo not found in PE/COFF resource section
Error: Image at 00007ABE000 start failed: Unsupported

But that brings up the point of what LogoDxe is doing. If we look at the driver entry point, called InitializeLogo [3], it does the following:
1) Locates some Hii protocols
2) Grabes the gEfiHiiPackageListProtocolGuid from the drivers image handle.
  a) The logo.bmp file was injected into the resource section of the PE/COFF image and this data is made availible when the driver loads. 
3) Puts the Logo (Hii Package List) into the Hii database
4) Publishes a protocol (API) that has a member function that returns the logo. 

So loading the LogoDxe driver just publishes an API that lets some one else grab a logo.

OK so lets take a look [4]. 
1) When the gEdkiiPlatformLogoProtocolGuid is installed you should see something like this on the serial log (XXX is me being lazy and it will be upper case):
    InstallProtocolInterface: 53cd299f-2bc1-11D2-40c0-XXXXXXXX  721C040

2) Looks like the consumer of gEdkiiPlatformLogoProtocolGuid is BootLogoLib. It looks like BootLogoEnableLogo() does the magic. 
  a) BootLogoEnableLogo() is called from the PlatformBootManagerLib [5]
  b) So lets see who is using that lib [6].
  c) It looks like PlatformBootManagerAfterConsole() calls BootLogoEnableLogo ().
  d) And that is called from BdsEntry(). 

The BDS driver loads earlier in the boot process, but the BdsEntry is only called after all the drivers have dispatched. So look for this in the serial output to see when BdsEntry() is called :
[Bds] Entry..


The other thing to look out for is there can be more than one copy of a library [7]. You platforms *.DSC file picks the library instance your platform is using [8]. In the lingo the Library Class is the definition of the API, the public .h file, and the Library Instance is which library you chose to use. 

> Any help please. I am stuck. Thank you.


[1] build -p OvmfPkg/OvmfPkgX64.dsc -a X64 -t XCODE5 -y build.log

[2]  VolInfo  Build/OvmfX64/DEBUG_XCODE5/FV/OVMF_CODE.fd 

[3] If look in LogoDxe.inf you will see `ENTRY_POINT                    = InitializeLogo` and this is how we find the entry point of the driver.

[4] git grep -i gEdkiiPlatformLogoProtocolGuid
MdeModulePkg/Include/Protocol/PlatformLogo.h:65:extern EFI_GUID gEdkiiPlatformLogoProtocolGuid;
MdeModulePkg/Library/BootLogoLib/BootLogoLib.c:66:  Status  = gBS->LocateProtocol (&gEdkiiPlatformLogoProtocolGuid, NULL, (VOID **) &PlatformLogo);
MdeModulePkg/Library/BootLogoLib/BootLogoLib.inf:49:  gEdkiiPlatformLogoProtocolGuid                ## CONSUMES
MdeModulePkg/Logo/Logo.c:148:                    &gEdkiiPlatformLogoProtocolGuid, &mPlatformLogo,
MdeModulePkg/Logo/LogoDxe.inf:49:  gEdkiiPlatformLogoProtocolGuid     ## PRODUCES
MdeModulePkg/MdeModulePkg.dec:570:  gEdkiiPlatformLogoProtocolGuid = { 0x53cd299f, 0x2bc1, 0x40c0, { 0x8c, 0x07, 0x23, 0xf6, 0x4f, 0xdb, 0x30, 0xe0 } }

[5] git grep BootLogoEnableLogo
ArmPkg/Library/PlatformBootManagerLib/PlatformBm.c:682:  Status = BootLogoEnableLogo ();
ArmVirtPkg/Library/PlatformBootManagerLib/PlatformBm.c:814:  BootLogoEnableLogo ();
EmulatorPkg/Library/PlatformBmLib/PlatformBm.c:270:    BootLogoEnableLogo ();
MdeModulePkg/Include/Library/BootLogoLib.h:21:BootLogoEnableLogo (
MdeModulePkg/Library/BootLogoLib/BootLogoLib.c:34:BootLogoEnableLogo (
OvmfPkg/Library/PlatformBootManagerLib/BdsPlatform.c:1504:  BootLogoEnableLogo ();

[6] git grep PlatformBootManagerLib -- *.inf | grep -v "=" | grep -v "#"
MdeModulePkg/Universal/BdsDxe/BdsDxe.inf:53:  PlatformBootManagerLib

[7] git grep PlatformBootManagerLib | grep "LIBRARY_CLASS"
ArmPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf:19:  LIBRARY_CLASS                  = PlatformBootManagerLib|DXE_DRIVER
ArmVirtPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf:18:  LIBRARY_CLASS                  = PlatformBootManagerLib|DXE_DRIVER
EmulatorPkg/Library/PlatformBmLib/PlatformBmLib.inf:19:  LIBRARY_CLASS                  = PlatformBootManagerLib|DXE_DRIVER
MdeModulePkg/Library/PlatformBootManagerLibNull/PlatformBootManagerLibNull.inf:16:  LIBRARY_CLASS                  = PlatformBootManagerLib|DXE_DRIVER
OvmfPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf:15:  LIBRARY_CLASS                  = PlatformBootManagerLib|DXE_DRIVER
UefiPayloadPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf:15:  LIBRARY_CLASS                  = PlatformBootManagerLib|DXE_DRIVER

[8] git grep PlatformBootManagerLib -- *.dsc
ArmPkg/ArmPkg.dsc:141:  ArmPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf
ArmVirtPkg/ArmVirtQemu.dsc:71:  PlatformBootManagerLib|ArmVirtPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf
ArmVirtPkg/ArmVirtQemuKernel.dsc:69:  PlatformBootManagerLib|ArmVirtPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf
ArmVirtPkg/ArmVirtXen.dsc:48:  PlatformBootManagerLib|ArmPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf
EmulatorPkg/EmulatorPkg.dsc:95:  PlatformBootManagerLib|EmulatorPkg/Library/PlatformBmLib/PlatformBmLib.inf
MdeModulePkg/MdeModulePkg.dsc:87:  PlatformBootManagerLib|MdeModulePkg/Library/PlatformBootManagerLibNull/PlatformBootManagerLibNull.inf
MdeModulePkg/MdeModulePkg.dsc:305:  MdeModulePkg/Library/PlatformBootManagerLibNull/PlatformBootManagerLibNull.inf
OvmfPkg/OvmfPkgIa32.dsc:362:  PlatformBootManagerLib|OvmfPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf
OvmfPkg/OvmfPkgIa32X64.dsc:366:  PlatformBootManagerLib|OvmfPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf
OvmfPkg/OvmfPkgX64.dsc:366:  PlatformBootManagerLib|OvmfPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf
OvmfPkg/OvmfXen.dsc:306:  PlatformBootManagerLib|OvmfPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf
SignedCapsulePkg/SignedCapsulePkg.dsc:84:  PlatformBootManagerLib|MdeModulePkg/Library/PlatformBootManagerLibNull/PlatformBootManagerLibNull.inf
UefiPayloadPkg/UefiPayloadPkgIa32.dsc:179:  PlatformBootManagerLib|UefiPayloadPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf
UefiPayloadPkg/UefiPayloadPkgIa32X64.dsc:180:  PlatformBootManagerLib|UefiPayloadPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf



Thanks,

Andrew Fish

PS If we broke out BaseTools parser for edk2 build config files we could build a smart git grep. Something like:
$ edk2-git-grep -p OvmfPkg/OvmfPkgX64.dsc

Then you only see files that are used by your project. 

> -- 
> Jim Slaughter
> 


[-- Attachment #2: Type: text/html, Size: 38141 bytes --]

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [edk2-devel] Help with Logo Display Problems
  2020-05-11 18:04     ` jim slaughter
@ 2020-05-11 21:26       ` Laszlo Ersek
  0 siblings, 0 replies; 6+ messages in thread
From: Laszlo Ersek @ 2020-05-11 21:26 UTC (permalink / raw)
  To: jim slaughter, devel

On 05/11/20 20:04, jim slaughter wrote:
> Hello,
> 
> Yes BootLogoEnableLogo() appears in several files and is not commented out.
> 
> Files:
> PlatformBm.c
> BdsPlatform.c
> BootLogoLib.c
>  BootLogoLib.h
> PlatformBm.c

That doesn't answer my question.

Does the PlatformBootManagerLib instance that is *specifically* linked
into BdsDxe in *your* firmware platform call BootLogoEnableLogo()?

Build your firmware with "--report-file=report.txt", and look up the
following part:

Module Name:          BdsDxe
[...]
Module INF Path:      MdeModulePkg/Universal/BdsDxe/BdsDxe.inf
[...]
Library
[...]
<IMPORTANT-LINE-HERE>
{PlatformBootManagerLib:  Time = ...ms}

The pathname just before the "PlatformBootManagerLib:  Time" line gives
you the INF file path that is relevant. Check the C files listed in that
INF file, for a BootLogoEnableLogo() call. The call should be made in
PlatformBootManagerAfterConsole().

Thanks
Laszlo

> 
> Jim Slaughter
> ;
> 
> On Mon, May 11, 2020 at 12:12 PM jim slaughter via groups.io <jim.slaughter=
> sage-micro.com@groups.io> wrote:
> 
>> Hello,
>>
>> I do not know. Will look into this.
>>
>> Is this call,  BootLogoEnableLogo(),   normally in the code?
>> I have not added any code in this area.
>>
>> Jim S.
>> ;
>>
>> On Mon, May 11, 2020 at 11:41 AM Laszlo Ersek <lersek@redhat.com> wrote:
>>
>>> On 05/10/20 05:00, jim slaughter wrote:
>>>> Hello,
>>>>
>>>> I have followed previous directions provided and the build works ok. I
>>>> built an IA32 generic binary.
>>>> I cannot tell if the logo code is working since I cannot see the logo
>>> on my
>>>> display.
>>>>
>>>> I do see a file in
>>>> the ~/src/edk2-stable202002/Build/MdeModule/DEBUG_GCC5/IA32/$ directory,
>>>> called LogoDxe.efi and another called LogoDxe. This leads me to
>>>> believe that the Logo entry point is in the image.
>>>>
>>>> After the build I did find an empty map file? How do I get a map of the
>>>> build?
>>>>
>>>> How do I debug this problem? I have no debugger. Can I freely use
>>>> DEBUG((...........)); .
>>>>
>>>> Any help please. I am stuck. Thank you.
>>>>
>>>
>>> Does your PlatformBootManagerLib instance call BootLogoEnableLogo() in
>>> PlatformBootManagerAfterConsole()?
>>>
>>> Thanks,
>>> Laszlo
>>>
>>>
>>
>> --
>> Jim Slaughter
>> 
>>
>>
> 


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2020-05-11 21:27 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-05-10  3:00 Help with Logo Display Problems jim slaughter
2020-05-11 16:41 ` [edk2-devel] " Laszlo Ersek
2020-05-11 17:12   ` jim slaughter
     [not found]   ` <160E089A62B6865C.18245@groups.io>
2020-05-11 18:04     ` jim slaughter
2020-05-11 21:26       ` Laszlo Ersek
2020-05-11 18:27 ` Andrew Fish

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox