public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: Nikolay Bodunov <nikolay.bodunov@gmail.com>
To: Laszlo Ersek <lersek@redhat.com>
Cc: "Kinney, Michael D" <michael.d.kinney@intel.com>,
	 "edk2-devel@ml01.01.org" <edk2-devel@ml01.01.org>
Subject: Re: DEBUG() macros in DXE driver: can’t make it work in QEMU
Date: Wed, 15 Feb 2017 20:19:34 +0300	[thread overview]
Message-ID: <CANqPu1JgB2sMbsVEGbbKhnhrbewns0j0PgTXWXdZTRCAve01Jw@mail.gmail.com> (raw)
In-Reply-To: <9699113b-6e45-cd5c-c60d-f500f2ef072f@redhat.com>

Hi Laszlo

First of all, great thanks to you and all others for spending your time for
explanations!

I fixed it. A problem was, as you suggested, in setting different DebugLib
implementarions in OVMF and my DXE driver.

First, I compiled my DXE driver together with OVMF, to guarantee that
DebugLib implementation will be the same (PlatformDebugLibIoPort), and got
DEBUG()'s strings in output file.
Second, I set same DebudLib implementation for MdeModulePkg and got same
results.

All I want now is to redirect DEBUG() output in other file, than one with
kernel messages, for simplify reading, but I think it shouldn't be too
complex now.

Thank you one more time!

With best regards,
Nikolay

2017-02-15 13:13 GMT+03:00 Laszlo Ersek <lersek@redhat.com>:

> On 02/14/17 23:06, Nikolay Bodunov wrote:
> > Thank you for the suggestions.
> >
> > I tried to use them:
> >
> >> (1) Please always terminate the debug message with a newline ("\n")
> > Done. No changes. Of course, I usually do it, but in that case all I
> > needed was to have any string on output. Sorry for bad programming style.
> >
> >> (2) Please use DEBUG_ERROR as the symbolic constant for the error mask
> > Done. I think you meant in DEBUG() macros. No changes. Question about
> > style, too.
> >
> >> (3) DEBUG output from OVMF is by default not written to the serial port
> > and
> >> add -D DEBUG_ON_SERIAL_PORT
> > Done. Recompiled OVMF with that option. I have now file "debug.log"
> > 74415 bytes size that contains everything, include EFI Shell output, but
> > except my debug messages
> >
> > BTW, QEMU option "-debugcon file:debug.log -global
> > isa-debugcon.iobase=0x402", recommended in OVMF README, did nothing -
> > "debug.log was empty.
>
> I think you have it mixed up a little. The README covers this, but it
> might not be very approachable.
>
> So: if you do *not* specify -D DEBUG_ON_SERIAL_PORT when you build OVMF,
> then the debug messages will go to the QEMU debug port. And, if you want
> to capture the QEMU debug port in a file, then you should pass
> "-debugcon file:debug.log -global isa-debugcon.iobase=0x402" on the QEMU
> command line.
>
> Conversely, if you *do* specify -D DEBUG_ON_SERIAL_PORT when building
> OVMF, then debug messages will go to the emulated serial port (and
> they'll be intermixed with any serial terminal output, which is why this
> setting is not the default). In this case, the -debugcon etc. settings
> are useless, because the QEMU debug port is not used.
>
> >
> > Based on results, I suppose that the problem is not on OVMF side.
> > Hope you propose something else to try. Maybe I got something in a wrong
> > way.
>
> Are you sure that when you build your module, it links against the right
> DebugLib instance?
>
> If you pass -D DEBUG_ON_SERIAL_PORT when you build OVMF, that switches
> the library class resolution for DebugLib from the default
>
>   DebugLib|OvmfPkg/Library/PlatformDebugLibIoPort/
> PlatformDebugLibIoPort.inf
>
> to
>
>   DebugLib|MdePkg/Library/BaseDebugLibSerialPort/
> BaseDebugLibSerialPort.inf
>
> for all module types. However, for this library class resolution to take
> effect for your own module as well, you should either add your module
> directly to OvmfPkg*.dsc, or else implement the exact same library
> resolution for your module (in the external DSC file where your module
> is listed). Library instances are statically linked into driver and
> application modules in edk2.
>
> In other words, if you *separately* build your driver or application
> module with a DebugLib class resolution that points to, say, the
>
>   MdePkg/Library/BaseDebugLibNull/BaseDebugLibNull.inf
>
> library instance, then you won't see any DEBUG output whatsoever,
> regardless of how you build OVMF (*separately* again), and how you
> configure QEMU. At that point, a "null" DebugLib instance will have been
> statically linked into your driver or application, and it will produce
> no output.
>
> Thanks
> Laszlo
>
> >
> > Nikolay
> >
> > 2017-02-14 21:28 GMT+03:00 Kinney, Michael D <michael.d.kinney@intel.com
> > <mailto:michael.d.kinney@intel.com>>:
> >
> >     If you prefer debug messages on a serial port, you can
> >     add -D DEBUG_ON_SERIAL_PORT
> >
> >     Mike
> >
> >     > -----Original Message-----
> >     > From: edk2-devel [mailto:edk2-devel-bounces@lists.01.org
> >     <mailto:edk2-devel-bounces@lists.01.org>] On Behalf Of Laszlo Ersek
> >     > Sent: Tuesday, February 14, 2017 10:17 AM
> >     > To: Nikolay Bodunov <nikolay.bodunov@gmail.com
> >     <mailto:nikolay.bodunov@gmail.com>>; edk2-devel@ml01.01.org
> >     <mailto:edk2-devel@ml01.01.org>
> >     > Subject: Re: [edk2] DEBUG() macros in DXE driver: can’t make it
> >     work in QEMU
> >     >
> >     > Hi Nikolay,
> >     >
> >     > On 02/14/17 18:55, Nikolay Bodunov wrote:
> >     > > Hello
> >     > >
> >     > >
> >     > > I compiled DXE Driver, in DEBUG_GCC49 mode, but I can’t print
> >     any debug
> >     > > message.
> >     > > DEBUG((-1, “Print test”))  does nothing.  Exactly as
> >     > > DebugPrint(EFI_D_ERROR, “Print Test);
> >     >
> >     > (1) Please always terminate the debug message with a newline
> >     ("\n") once
> >     > you are done with it. (It's okay to format a single message with
> >     several
> >     > DEBUG calls of course, and terminate only the last DEBUG with a
> >     newline.)
> >     >
> >     > (2) Please use DEBUG_ERROR as the symbolic constant for the error
> >     mask.
> >     >
> >     > >
> >     > > However, I see “Print Test” string in my *.efi binary.
> >     > > I use QEMU + OMVF (OVMF was also recompliled in DEBUG_GCC49
> >     mode, to be
> >     > > sure). Serial port output is redirected to a file:
> >     > > qemu-system-x86_64 -L . --bios /…/FV/OVMF.fd -hda hdd.img -serial
> >     > > file:./serial_file
> >     >
> >     > (3) DEBUG output from OVMF is by default not written to the serial
> >     port,
> >     > it is written to the QEMU debug port. Please consult
> >     OvmfPkg/README for
> >     > specifics, namely under "Capturing OVMF debug messages on qemu".
> >     >
> >     > Hope this helps,
> >     > Laszlo
> >     >
> >     > >
> >     > > All I see in output file is EFI shell output messages, include
> >     one that my
> >     > > driver was succesfully loaded. But no messages from DEBUG().
> >     > >
> >     > >
> >     > > My conditions:
> >     > >
> >     > > MODULE_TYPE    = DXE_DRIVER
> >     > >
> >     > >
> >     > > Debug Print Library:
> >     > >
> >     > >
> >     DebugLib|MdePkg/Library/BaseDebugLibSerialPort/
> BaseDebugLibSerialPort.inf
> >     > >
> >     > > (BaseDebugLibNull.inf is commented, of course)
> >     > >
> >     > >
> >     > > DebugPrintEnabled() returns TRUE
> >     > >
> >     > >
> >     > > I also tried to set some key options manually in MdeModulePkg.dsc
> >     > > afterwards, but result didn’t change:
> >     > >
> >     > >
> >     > > [Components]
> >     > >
> >     > >
> >     > >   MdeModulePkg/CrScreenshotDxe/CrScreenshotDxe.inf  {
> >     > >
> >     > >
> >     > >     <PcdsFixedAtBuild>
> >     > >
> >     > >
> >     > >
> >     gEfiMdePkgTokenSpaceGuid.gEfiMdePkgTokenSpaceGuid.
> PcdDebugPrintErrorLevel|0x07
> >     > >
> >     > >       gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0x2F
> >     > >
> >     > >       gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|
> 0x80000042
> >     > >
> >     > >
> >     > >
> >     > >    <LibraryClasses>
> >     > >
> >     > >
> >     > >
> >     DebugLib|MdePkg/Library/BaseDebugLibSerialPort/
> BaseDebugLibSerialPort.inf
> >     > >
> >     > >
> >     > >    <BuildOptions>
> >     > >
> >     > >       GCC:*_*_*_CC_FLAGS             = -UMDEPKG_NDEBUG
> >     > >
> >     > > }
> >     > >
> >     > >
> >     > > Code (I used it as a base):
> >     https://github.com/LongSoft/CrScreenshotDxe
> >     <https://github.com/LongSoft/CrScreenshotDxe>
> >     > >
> >     > > Where I got wrong and what else could I try to make it work?
> >     > >
> >     >
> >     > _______________________________________________
> >     > edk2-devel mailing list
> >     > edk2-devel@lists.01.org <mailto:edk2-devel@lists.01.org>
> >     > https://lists.01.org/mailman/listinfo/edk2-devel
> >     <https://lists.01.org/mailman/listinfo/edk2-devel>
> >
> >
> >
> >
> > --
> > With best regards,
> > Nikolay Bodunov
>
>


-- 
With best regards,
Nikolay Bodunov


      reply	other threads:[~2017-02-15 17:19 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-02-14 17:55 DEBUG() macros in DXE driver: can’t make it work in QEMU Nikolay Bodunov
2017-02-14 18:16 ` Laszlo Ersek
2017-02-14 18:28   ` Kinney, Michael D
2017-02-14 22:06     ` Nikolay Bodunov
2017-02-14 22:17       ` David A. Van Arnem
2017-02-14 22:36         ` Nikolay Bodunov
2017-02-14 23:14           ` David A. Van Arnem
2017-02-14 23:46             ` Nikolay Bodunov
2017-02-15  0:00               ` David A. Van Arnem
2017-02-15 12:39                 ` Laszlo Ersek
2017-02-16 18:05                   ` Andrew Fish
2017-02-16 18:59                     ` Laszlo Ersek
2017-02-15 10:13       ` Laszlo Ersek
2017-02-15 17:19         ` Nikolay Bodunov [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CANqPu1JgB2sMbsVEGbbKhnhrbewns0j0PgTXWXdZTRCAve01Jw@mail.gmail.com \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox