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 2155281F35 for ; Wed, 15 Feb 2017 02:13:31 -0800 (PST) Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) (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 795F5804EB; Wed, 15 Feb 2017 10:13:31 +0000 (UTC) Received: from lacos-laptop-7.usersys.redhat.com (ovpn-116-89.phx2.redhat.com [10.3.116.89]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id v1FADTB5007413; Wed, 15 Feb 2017 05:13:30 -0500 To: Nikolay Bodunov References: <485eda84-7d3c-cbcf-6dbe-bc302aa8e3c0@redhat.com> Cc: "Kinney, Michael D" , "edk2-devel@ml01.01.org" From: Laszlo Ersek Message-ID: <9699113b-6e45-cd5c-c60d-f500f2ef072f@redhat.com> Date: Wed, 15 Feb 2017 11:13:28 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.7.1 MIME-Version: 1.0 In-Reply-To: X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.27]); Wed, 15 Feb 2017 10:13:31 +0000 (UTC) Subject: =?UTF-8?B?UmU6IERFQlVHKCkgbWFjcm9zIGluIERYRSBkcml2ZXI6IGNhbuKAmXQgbWFrZSBpdCB3b3JrIGluIFFFTVU=?= 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: Wed, 15 Feb 2017 10:13:31 -0000 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit 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 >: > > 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 > ] On Behalf Of Laszlo Ersek > > Sent: Tuesday, February 14, 2017 10:17 AM > > To: Nikolay Bodunov >; 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 { > > > > > > > > > > > > > > > > > > > gEfiMdePkgTokenSpaceGuid.gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x07 > > > > > > gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0x2F > > > > > > gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x80000042 > > > > > > > > > > > > > > > > > > > > > > DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf > > > > > > > > > > > > > > > GCC:*_*_*_CC_FLAGS = -UMDEPKG_NDEBUG > > > > > > } > > > > > > > > > Code (I used it as a base): > 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 > > https://lists.01.org/mailman/listinfo/edk2-devel > > > > > > -- > With best regards, > Nikolay Bodunov