[ipxe-devel] UEFI SCT patch

Daniel Li 354225989 at qq.com
Tue Sep 18 16:12:32 UTC 2012

Hi Alexandre,
Please see inline reply again,I am sorry to bother you so long,thank you so much.
Best Regards,Daniel Li 


------------------ Original ------------------
From:  "Alexandre Rames"<arames at solarflare.com>;
Date:  Tue, Sep 18, 2012 11:30 PM
To:  "Daniel Li"<354225989 at qq.com>; 
Cc:  "ipxe-devel"<ipxe-devel at lists.ipxe.org>; 
Subject:  Re: [ipxe-devel] UEFI SCT patch

                   See inlined answers.
       On 18/09/12 12:37, Daniel Li wrote:
                   Hi Alexandre ,
       Thanks for your greate helpful           reply,could you help me answer the following questions?
                   I think the answers to your             first three points should interest you, in particular the             3rd.
             On 15/09/12 16:46, Daniel Li wrote:
                        Hi Alexandre,
             Thanks for your helpful reply,After review your attach               file,I am very very exicted,and then has some               questions,could you help to answer again?
             1.I can't found the file sfc9000.c in the ipxe               project,what is the use of this document?Is a new driver               and could you tell me the driver support machine,if you               can send the file to me will best?
                      sfc9000 and similar files are code files for our NIC,           equivalent to other NIC specific files in src/drivers/net. You           can totally ignore that.
                   daniel reply:I still can't detect network device             Although i built special file like make -C src             bin-x86_64-efi/82545em.efidrv,so i want to know what your             have fixed ipxe code?did you fix the file efi_pci.c code?
          My patch does not touch this file.
                                    2.You said you can successfully PXE boot On a real UEFI               machine,did you used the ipxe project?Did you run under               uefi enviroment?could you tell me the machine and your               made script?which command has been run?what method do you               use to create image?as i know,if you run "chain" or               "sanboot" command under uefi shell,you should create a               uefi image format?
                      I used the iPXE based UEFI driver for my NIC. The PXE utility           is part of the host machine's software, accessible through the           boot manager (F1 menu on boot on my machine).
           So it seems this differs from the way you are trying to pxe           boot. Have you checked if your machine provides such a utility           via the boot manager? Note that if it does you need to make           sure the driver is loaded before starting it.
       cYou said you use "The           PXE utility is part of the host machine's software",I think           the pxe utility is supported by legacy bios?Why did you still           need built a ipxe based uefi?Did you netwok boot via ipxe           based uefi enviroment?Could you share your step to me?example           how config pxe server or how config pxe client.
          I used the host machine's UEFI based PXE utility, that uses the UEFI     driver I built for my NIC.
     The only change to the pxe server from a normal setup is to provide     a UEFI file that the client can boot (see also answer below).
     I don't have to configure anything on the client. 
>>daniel:1.Your machine builtin uefi base pxe utility?could you tell me your machine?i will get it and test,i can't find any thinkpad machine builtin uefi pxe.
                 2.Could you send me this UEFI file that the client can boot or how can i make this uefi file,i have replace the bootx64.efi to pxelinux.0,but still can't network boot.  

                                    3.Your attach show that the *.efi which your built can               detected the network device,but after my               bin-x86_64-efi/82579lm.efidrv can't detect network               device,as i know,the network device of my Thinkpad T420               machine is intel.
                      I detailed in my first email a procedure which I think can be           used to spot which uefi driver to use with your card.
           I mentioned 82579lm.efidrv because you listed a device with "computer vendor is             8086,device id is 1502".
             I can't see a matching device in the output of 'pci' you             attached, so 82579lm.efidrv is probably not what you need.
             From the output of your 'pci' command attached, I found             (following the procedure in my first email):
             ipxe/src/drivers/net $ grep -RHIin "8086" . | grep -i "100f"
             ./intel.c:844:    PCI_ROM ( 0x8086, 0x100f, "82545em",             "82545EM (Copper)", 0 ),
             So you probably need to build this one:
             $ make -C src bin-x86_64-efi/82545em.efidrv
               And then do check from your uefi that the driver is                 loaded and is managing a device.
               See my first email and (in your uefi shell)                   'drivers -?'  and 'devices -?'. (The               'drivers' command has a column listing the number of               devices managed by the drivers.)
              daniel reply:I still can't detected network device although             i built the file like "             $ make -C               src bin-x86_64-efi/82545em.efidrv ",could you             help to built a general built like "             $ make -C               src bin-x86_64-efi/ipxe.efidrv " and then test             on your machine and send the log to me?I guess it succeed             too.
          Building a driver with
     $ make -C ../../src bin-x86_64-efi/ipxe.efidrv DEBUG=efi_pci
     and loading the it works fine. See attached screenshots.
>>daniel:Maybe the problem was occured because the  edk version?what do you think?could you tell me your edk version?
                                     4.As i know ,the return error code EFI_UNSUPPORTED was               showed when call efi_create->openprotocol?(), because               the controller handle is not in the pci hand list.
                      I don't really understand what you mean by . Anyway if your           device is not managed by your driver it seems normal that the           procedure stops at one point. I'd be concerned about that only           if it persists after your driver successfully manages your           device.
        daniel reply:I think you are               right,"I'd be concerned about           that only if it persists after your driver successfully           manages your device."?Do you know how i can debug it. 
          You'll have to work it out! Use debug/print statements and follow     the code.
                        5.PCI_vm_windows7_x64_under_uefishell.txt was created               when i run command "pci" under uefi shell.
                      See answer to 3).
                        6.snponly_boot_failed_under_uefishell.jpg when I run               under command: 
                   ipxe:chain http://boot.ipxe.org/demo/boot.php
                      I guess you need to load the correct driver before trying to           start snponly.efi
                                  daniel reply:If                     i used the snponly.efi under uefi enviroment,i can                     download the image,but i can't boot into the image                     ,because the image is not uefi format?Did you remote                     boot succeed                     via pxe                     network boot under uefi?
          I am starting to wonder now: if you manage to download the image is     your driver working?!
     Have you tried to change the configuration of your PXE server to     provide a simple uefi application? For example a UEFI shell or a     UEFI helloworld (see edk2 MdeModulePkg/Application... wrap the print     "hello" in a loop to make sure you have time to see it on the     screen.)
>>daniel:1.Yes,if I built snponly.efi(the command is make bin-x64-efi/snponly.efi),it can download image via network protocol.
              2.As we know,legacy pxe server should include key file pxelinux.0(NBP),i think uefi pxe server should include uefi file for NBP like pxelinux.0,but I can't built a uefi file like pxelinux.0 so far.Where did you get this file?Could you share your method that how config your uefi pxe server?
             5.Could you help to review two attach documents and               point out my mistakes?
             Thanks for your great greate support.
                      As pointed before try in order:
           - building the correct driver
           - load it from the uefi shell and CHECK that it manages your           device.
           - then try pxe booting or other snp utilities.
               Best                 Regards,                 Daniel Li 
               ------------------ Original                 ------------------
                                From:  "Alexandre Rames"<arames at solarflare.com>;
                 Date:  Fri, Sep 14, 2012 05:04 PM
                 To:  "Daniel Li"<354225989 at qq.com>;                   
                 Cc:  "ipxe-devel"<ipxe-devel at lists.ipxe.org>;                   
                 Subject:  Re: [ipxe-devel] UEFI SCT patch
               For info I attached a                 screenshot of the driver loading. It was compiled with
                 On 14/09/12 09:59, Alexandre Rames wrote:
                                Hello Daniel,
                   On 13/09/12 14:48, Daniel Li wrote:
                                                         Hi Alexandre,
                     Thanks for your quickly                       reply.Did you built a *.efi and detected device                       under uefi enviroment?Did you network boot                       succeed?
                 Yes. I can detect my pci device (UEFI 'pci' command),                 and load the driver. On a real UEFI machine I can                 successfully PXE boot.
                 I am not sure if that makes a difference with your                 command I see in the screenshot, but I use a command                 like 
                 fs0:\> load <driver name>.efidrv
                 to load the driver. Not a simple invocation of a *.efi                 file.
                 From what I mentioned in my previous email yours may be:
                 ipxe/src $ ls bin-x86_64-efi/*.efidrv
                 Check the output of 'pci' in your UEFI shell (see                 previous email).
                                                         I have debug this issue more                       than one week,but i can't find the root cause,my                       deubg information like following figure.
                     The call flow is                       efipci_supported()->efipci_create()->OpenProtocol(),unfortunately,OpenProtocol                       return EFI_UNSUPPORTED error code and the log is                       "EFIPCI device 0x3dbf5398 is not a PCI device",I                       think ipxe can't enum the pci device.Could you                       tell me the right step or ut pass machine. I get                       the faile result after boot ipxe via uefi shell on                       Thinkpad T420 and VMare 8.0,it's network device is                       intel.
                                  If the steps I described previously don't work you may                 try to better undestrand why EFI_UNSUPPORTED is                 returned. Check the parameters provided to OpenProtocol;                 maybe list the protocols available on your handle.
                                                         BTW,Could                         you tell me whether ipxe is supported in uefi                         enviroment,if not,could you tell me your plan.
                                  I don't really understand the question here. You can                 compile a UEFI driver for you card if it is supported in                 iPXE.
                     Best                       Regards,                       Daniel Li 
                     ------------------                       Original ------------------
                                            From:  "Alexandre Rames"<arames at solarflare.com>;
                       Date:  Thu, Sep 13, 2012 08:39 PM
                       To:  "Daniel Li"<354225989 at qq.com>;                         
                       Cc:  "ipxe-devel"<ipxe-devel at lists.ipxe.org>;                         
                       Subject:  Re: [ipxe-devel] UEFI SCT                         patch
                     My patch will                       potentially fix some errors reported by SCT. It                       probably won't fix your problem.
                       I have little experience with UEFI or iPXE, but                       here are a few suggestions:
                       The commands you listed don't work for me, and I                       could not find matching vendor / device id for the                       first 3 devices you mention:
                       $ cd <ipxe_repo>/src/
                       $ grep -RHIin 8086 drivers/net/ | grep -i 2000
                       $ grep -RHIin 8086 drivers/net/ | grep -i 2001
                       $ grep -RHIin 8086 drivers/net/ | grep -i 2625
                       I could build a efi-driver for the last device                       your mention:
                       $ cd <ipxe_repo>/src/
                       $ grep -RHIin 8086 drivers/net/ | grep -i 1502
                       gives me:
                       ./intel.c:926:    PCI_ROM ( 0x8086, 0x1502,                       "82579lm", "82579LM", 0 )
                       So I could build your UEFI driver with the                       command:
                       $ make bin-x86_64-efi/82579lm.efidrv -j6
                       (replace efidrv with efirom to build a rom)
                       I am wondering if your other devices are                       supported. Maybe the way I am looking for devices                       is not appropriate though.
                       Here is an example procedure to load the driver                       built previously (very verbose).
                       cd to the filesystem
                       > fs0:
                       Check that your device exist. Here look for your                       device 0x8086, 0x1502
                       > pci
                       Check what drivers are loaded. Write down the                       index of the last driver loaded.
                       > drivers
                       List devices. Write down the index of the last                       device
                       > devices
                       Load your driver manually (this is the file                       compiled previously)
                       > load driver\82579lm.efidrv
                       Now check if your driver is loaded
                       > drivers
                       and if your device is present.
                       > devices
                       If that does not work maybe try to enable debug in                       some iPXE files.
                       For example:
                       make bin-x86_64-efi/82579lm.efidrv -j6                       DEBUG=intel,efi_snp,efi_init
                       Enabling debug in files related to your device may                       give you some useful info.
                       Hope this helps,
                       On 13/09/12 12:54, Daniel Li wrote:
                                            Hi Alexandre,
                       Could you tell me which issue was be fixed by                         your patch?
                       I have some issue like following about ipxe                         with uefi,I think you are good well with uefi.
Our product will                               import ipxe,but efi file can't found                               network device,I built efi file according                               to the below steps.
1.I                               have undef PXE_STACK and PXE_MENU in                               src\config\general.h.
2.Built                               EFI version as vendor/product specific:
$ make                               bin-x86-64/10222000.efi                               bin-x86-64/10222001.efi                               bin-x86-64/10222625.efi.(computer vendor                               is 1022 ,device id is 2001).
$make                               bin-x86-64-efi/80861502(computer vendor is                               8086,device id is 1502).
3.insert                               usb drive and enter uefi shell.
5.run                               above efi file.
6.All                               commands are Show the tip "No more                               network devices".
                         Best                           Regards,                           Daniel Li 
                         ------------------                           Original ------------------
                                                    From:  "Alexandre Rames"<arames at solarflare.com>;
                           Date:  Thu, Sep 13, 2012 06:15 PM
                           To:  "ipxe-devel"<ipxe-devel at lists.ipxe.org>;                             
                           Subject:  [ipxe-devel] UEFI SCT                             patch
                         I recently started working on our UEFI driver,                         and some of my changes 
                         may be useful for iPXE upstream.
                         So here is a first patch dealing with NIC                         independent code. Can you have 
                         a look and let me know if it needs some                         modifications.
                         It includes:
                           - changes to be more UEFI compliant and pass                         SCT tests (most changes 
                         in efi_snp.c)
                           - initial support for the driver health                         protocol
                           - initial support for the firmware management                         protocol
                         You'll probably want to verify the additional                         checks for UEFI versions:
                           - I added the DRIVER_EFI_SUPPORTED_VERSION                         protocol, as required by 
                         the UEFI spec.
                         " Provides information about the version of the                         EFI specification that a 
                         driver is following. This
                         protocol is required for EFI drivers that are on                         PCI and other plug in 
                         cards. "
                         - In efi_init.c I added a check for a minimal                         version of UEFI required 
                         to use the driver. I am not sure you want to                         keep that.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ipxe.org/pipermail/ipxe-devel/attachments/20120919/d843771d/attachment.htm>

More information about the ipxe-devel mailing list