[ipxe-devel] UEFI SCT patch

Daniel Li 354225989 at qq.com
Tue Sep 18 11:37:53 UTC 2012

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?
            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.

        daniel reply:You 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.
            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.
                   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. 

            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?
       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/20120918/eb59c819/attachment.htm>

More information about the ipxe-devel mailing list